Search in sources :

Example 1 with RegisteredPipeline

use of pipelite.RegisteredPipeline in project pipelite by enasequence.

the class RetryService method retry.

/**
 * Retries a failed process.
 *
 * @param pipelineName the pipeline name
 * @param processId the processId
 * @throws PipeliteProcessRetryException if the process can't be retried
 */
public void retry(String pipelineName, String processId) {
    processService.isRetryProcess(pipelineName, processId);
    boolean isRetrySchedule = scheduleService.isRetrySchedule(pipelineName, processId);
    RegisteredPipeline registeredPipeline = registeredPipelineService.getRegisteredPipeline(pipelineName);
    Process process = ProcessFactory.create(processId, registeredPipeline);
    // Retry stages
    for (Stage stage : process.getStages()) {
        stage.setStageEntity(getSavedStage(pipelineName, processId, stage.getStageName()));
        if (DependencyResolver.isPermanentlyFailedStage(stage)) {
            stage.getStageEntity().resetExecution();
            stageService.saveStage(stage);
        }
    }
    // Retry process
    process.setProcessEntity(getSavedProcess(pipelineName, processId));
    processService.startExecution(process.getProcessEntity());
    // Retry schedule
    if (isRetrySchedule) {
        ScheduleRunner scheduler = runnerService.getScheduleRunner();
        if (scheduler == null) {
            throw new PipeliteProcessRetryException(pipelineName, processId, "missing scheduler");
        }
        scheduler.retrySchedule(pipelineName, processId);
    }
}
Also used : ScheduleRunner(pipelite.runner.schedule.ScheduleRunner) PipeliteProcessRetryException(pipelite.exception.PipeliteProcessRetryException) Stage(pipelite.stage.Stage) RegisteredPipeline(pipelite.RegisteredPipeline) Process(pipelite.process.Process)

Example 2 with RegisteredPipeline

use of pipelite.RegisteredPipeline in project pipelite by enasequence.

the class RegisteredPipelineService method registerPipeline.

public void registerPipeline(RegisteredPipeline registeredPipeline) {
    String pipelineName = registeredPipeline.pipelineName();
    if (pipelineName == null || pipelineName.trim().isEmpty()) {
        throw new PipeliteException("Missing pipeline name");
    }
    if (registeredPipelineMap.containsKey(pipelineName)) {
        throw new PipeliteException("Non-unique pipeline name: " + pipelineName);
    }
    if (registeredPipeline instanceof Schedule) {
        Schedule schedule = (Schedule) registeredPipeline;
        String cron = schedule.configurePipeline().cron();
        if (cron == null) {
            throw new PipeliteException("Missing cron expression for pipeline schedule: " + pipelineName);
        }
        if (!CronUtils.validate(cron)) {
            throw new PipeliteException("Invalid cron expression '" + cron + "' for pipeline schedule: " + pipelineName);
        }
    } else if (registeredPipeline instanceof Pipeline) {
        Pipeline pipeline = (Pipeline) registeredPipeline;
        int pipelineParallelism = pipeline.configurePipeline().pipelineParallelism();
        if (pipelineParallelism < 1) {
            throw new PipeliteException("Invalid pipeline parallelism '" + pipelineParallelism + "' for pipeline: " + pipelineName);
        }
    }
    registeredPipelineMap.put(pipelineName, registeredPipeline);
}
Also used : Schedule(pipelite.Schedule) PipeliteException(pipelite.exception.PipeliteException) RegisteredPipeline(pipelite.RegisteredPipeline) Pipeline(pipelite.Pipeline)

Example 3 with RegisteredPipeline

use of pipelite.RegisteredPipeline in project pipelite by enasequence.

the class StageController method stages.

@GetMapping("/{pipelineName}/{processId}")
@ResponseStatus(HttpStatus.OK)
@Operation(description = "Process stages")
@ApiResponses(value = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "500", description = "Internal Server error") })
public List<StageInfo> stages(@PathVariable(value = "pipelineName") String pipelineName, @PathVariable(value = "processId") String processId) {
    List<StageInfo> list = new ArrayList<>();
    AtomicReference<Process> process = new AtomicReference<>();
    try {
        RegisteredPipeline registeredPipeline = registeredPipelineService.getRegisteredPipeline(pipelineName);
        ProcessBuilder processBuilder = new ProcessBuilder(processId);
        registeredPipeline.configureProcess(processBuilder);
        process.set(processBuilder.build());
    } catch (Exception ex) {
        log.atSevere().withCause(ex).log(ex.getMessage());
    }
    stageService.getSavedStages(pipelineName, processId).forEach(stageEntity -> list.add(getStage(stageEntity, process.get())));
    return list;
}
Also used : StageInfo(pipelite.controller.api.info.StageInfo) ProcessBuilder(pipelite.process.builder.ProcessBuilder) ArrayList(java.util.ArrayList) Process(pipelite.process.Process) AtomicReference(java.util.concurrent.atomic.AtomicReference) RegisteredPipeline(pipelite.RegisteredPipeline) Operation(io.swagger.v3.oas.annotations.Operation) ApiResponses(io.swagger.v3.oas.annotations.responses.ApiResponses)

Aggregations

RegisteredPipeline (pipelite.RegisteredPipeline)3 Process (pipelite.process.Process)2 Operation (io.swagger.v3.oas.annotations.Operation)1 ApiResponses (io.swagger.v3.oas.annotations.responses.ApiResponses)1 ArrayList (java.util.ArrayList)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Pipeline (pipelite.Pipeline)1 Schedule (pipelite.Schedule)1 StageInfo (pipelite.controller.api.info.StageInfo)1 PipeliteException (pipelite.exception.PipeliteException)1 PipeliteProcessRetryException (pipelite.exception.PipeliteProcessRetryException)1 ProcessBuilder (pipelite.process.builder.ProcessBuilder)1 ScheduleRunner (pipelite.runner.schedule.ScheduleRunner)1 Stage (pipelite.stage.Stage)1