use of com.sequenceiq.flow.domain.FlowLog in project cloudbreak by hortonworks.
the class FlowService method getFlowState.
public FlowCheckResponse getFlowState(String flowId) {
List<FlowLog> allByFlowIdOrderByCreatedDesc = flowLogDBService.findAllByFlowIdOrderByCreatedDesc(flowId);
FlowCheckResponse flowCheckResponse = new FlowCheckResponse();
flowCheckResponse.setFlowId(flowId);
flowCheckResponse.setHasActiveFlow(!completed("Flow", flowId, List.of(), allByFlowIdOrderByCreatedDesc));
flowCheckResponse.setLatestFlowFinalizedAndFailed(isFlowInFailedState(allByFlowIdOrderByCreatedDesc, failHandledEvents));
return flowCheckResponse;
}
use of com.sequenceiq.flow.domain.FlowLog in project cloudbreak by hortonworks.
the class FlowService method getFlowChainStateSafe.
public FlowCheckResponse getFlowChainStateSafe(List<Long> resourceIdList, String chainId) {
FlowCheckResponse flowCheckResponse = new FlowCheckResponse();
flowCheckResponse.setFlowChainId(chainId);
List<FlowChainLog> flowChains = flowChainLogService.findByFlowChainIdOrderByCreatedDesc(chainId);
if (!flowChains.isEmpty()) {
LOGGER.info("Checking if there is an active flow based on flow chain id {}", chainId);
List<FlowChainLog> relatedChains = getRelatedFlowChainLogs(flowChains);
Set<String> relatedChainIds = relatedChains.stream().map(FlowChainLog::getFlowChainId).collect(toSet());
Set<String> relatedFlowIds = flowLogDBService.getFlowIdsByChainIds(relatedChainIds);
List<FlowLog> relatedFlowLogs = flowLogDBService.getFlowLogsByFlowIdsCreatedDesc(relatedFlowIds);
validateResourceId(relatedFlowLogs, resourceIdList);
flowCheckResponse.setHasActiveFlow(!completed("Flow chain", chainId, relatedChains, relatedFlowLogs));
flowCheckResponse.setLatestFlowFinalizedAndFailed(isFlowInFailedState(relatedFlowLogs, failHandledEvents));
return flowCheckResponse;
} else {
flowCheckResponse.setHasActiveFlow(Boolean.FALSE);
return flowCheckResponse;
}
}
use of com.sequenceiq.flow.domain.FlowLog in project cloudbreak by hortonworks.
the class FlowService method getFlowChainState.
public FlowCheckResponse getFlowChainState(String chainId) {
FlowCheckResponse flowCheckResponse = new FlowCheckResponse();
flowCheckResponse.setFlowChainId(chainId);
List<FlowChainLog> flowChains = flowChainLogService.findByFlowChainIdOrderByCreatedDesc(chainId);
if (!flowChains.isEmpty()) {
LOGGER.info("Checking if there is an active flow based on flow chain id {}", chainId);
List<FlowChainLog> relatedChains = getRelatedFlowChainLogs(flowChains);
Set<String> relatedChainIds = relatedChains.stream().map(FlowChainLog::getFlowChainId).collect(toSet());
Set<String> relatedFlowIds = flowLogDBService.getFlowIdsByChainIds(relatedChainIds);
List<FlowLog> relatedFlowLogs = flowLogDBService.getFlowLogsByFlowIdsCreatedDesc(relatedFlowIds);
flowCheckResponse.setHasActiveFlow(!completed("Flow chain", chainId, relatedChains, relatedFlowLogs));
flowCheckResponse.setLatestFlowFinalizedAndFailed(isFlowInFailedState(relatedFlowLogs, failHandledEvents));
return flowCheckResponse;
} else {
flowCheckResponse.setHasActiveFlow(Boolean.FALSE);
return flowCheckResponse;
}
}
use of com.sequenceiq.flow.domain.FlowLog in project cloudbreak by hortonworks.
the class FlowService method getLastFlowProgressByResourceCrn.
public FlowProgressResponse getLastFlowProgressByResourceCrn(String resourceCrn) {
checkState(Crn.isCrn(resourceCrn));
LOGGER.info("Getting flow logs (progress) by resource crn {}", resourceCrn);
List<FlowLog> flowLogs = flowLogDBService.getFlowLogsByResourceCrnOrName(resourceCrn);
FlowProgressResponse response = flowProgressResponseConverter.convert(flowLogs, resourceCrn);
if (StringUtils.isBlank(response.getFlowId())) {
throw new NotFoundException(String.format("Not found any historical flow data for requested resource (crn: %s)", resourceCrn));
}
return flowProgressResponseConverter.convert(flowLogs, resourceCrn);
}
use of com.sequenceiq.flow.domain.FlowLog in project cloudbreak by hortonworks.
the class FlowService method hasFinishedFlow.
private boolean hasFinishedFlow(String marker, String flowChainId, List<FlowChainLog> flowChainLogs, List<FlowLog> flowLogs) {
boolean hasFinishedFlowLog = false;
for (FlowLog flowLog : flowLogs) {
String currentState = flowLog.getCurrentState();
if (failHandledEvents.contains(flowLog.getNextEvent()) || (currentState != null && CANCELLED_TERMINATED_STATES.contains(currentState))) {
LOGGER.info("{} {} marked as completed on {} flow log", marker, flowChainId, flowLog.minimizedString());
return true;
} else if (FlowConstants.INIT_STATE.equals(currentState)) {
boolean hasEventInQueue = flowChainLogService.hasEventInFlowChainQueue(flowChainLogs);
LOGGER.info("{} {} state. Finished {}, hasEventInQueue {}", marker, flowChainId, hasFinishedFlowLog, hasEventInQueue);
return hasFinishedFlowLog && !hasEventInQueue;
} else if (FlowConstants.FINISHED_STATE.equals(currentState)) {
hasFinishedFlowLog = true;
} else if (!hasFinishedFlowLog) {
return false;
}
}
LOGGER.info("{} {} marked as not completed", marker, flowChainId);
return false;
}
Aggregations