package com.sequenceiq.cloudbreak.reactor.handler.orchestration;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.sequenceiq.cloudbreak.reactor.ClusterEventHandler;
import com.sequenceiq.cloudbreak.reactor.api.event.orchestration.ClusterTerminationRequest;
import com.sequenceiq.cloudbreak.reactor.api.event.orchestration.ClusterTerminationResult;
import com.sequenceiq.cloudbreak.service.cluster.flow.ClusterTerminationService;
import com.sequenceiq.cloudbreak.service.stack.StackService;
import reactor.bus.Event;
import reactor.bus.EventBus;
@Component
public class ClusterTerminationHandler implements ClusterEventHandler<ClusterTerminationRequest> {
private static final Logger LOGGER = LoggerFactory.getLogger(ClusterTerminationHandler.class);
@Inject
private StackService stackService;
@Inject
private EventBus eventBus;
@Inject
private ClusterTerminationService clusterTerminationService;
@Override
public Class<ClusterTerminationRequest> type() {
return ClusterTerminationRequest.class;
}
@Override
public void accept(Event<ClusterTerminationRequest> event) {
ClusterTerminationRequest request = event.getData();
ClusterTerminationResult result;
try {
Boolean allowed = clusterTerminationService.deleteClusterContainers(request.getClusterId());
result = new ClusterTerminationResult(request, allowed);
} catch (Exception e) {
LOGGER.error("Failed to delete cluster containers: {}", e);
result = new ClusterTerminationResult(e.getMessage(), e, request);
}
eventBus.notify(result.selector(), new Event(event.getHeaders(), result));
}
}