use of org.kie.kogito.jobs.service.model.job.JobDetails in project kogito-apps by kiegroup.
the class HttpJobExecutor method execute.
@Override
public CompletionStage<JobDetails> execute(CompletionStage<JobDetails> futureJob) {
return futureJob.thenCompose(job -> {
// Using just POST method for now
String callbackEndpoint = Optional.ofNullable(job.getRecipient()).filter(HTTPRecipient.class::isInstance).map(HTTPRecipient.class::cast).map(HTTPRecipient::getEndpoint).orElse("");
String limit = Optional.ofNullable(job.getTrigger()).filter(IntervalTrigger.class::isInstance).map(interval -> getRepeatableJobCountDown(job)).map(String::valueOf).orElse(null);
final HTTPRequestCallback callback = HTTPRequestCallback.builder().url(callbackEndpoint).method(HTTPRequestCallback.HTTPMethod.POST).addQueryParam("limit", limit).build();
return ReactiveStreams.fromPublisher(executeCallback(callback).convert().toPublisher()).map(response -> JobExecutionResponse.builder().message(response.statusMessage()).code(getResponseCode(response)).now().jobId(job.getId()).build()).flatMap(this::handleResponse).findFirst().run().thenApply(response -> response.map(r -> job).orElse(null)).exceptionally(ex -> {
LOGGER.error("Generic error executing job {}", job, ex);
jobStreams.publishJobError(JobExecutionResponse.builder().message(ex.getMessage()).now().jobId(job.getId()).build());
return job;
});
});
}
use of org.kie.kogito.jobs.service.model.job.JobDetails in project kogito-apps by kiegroup.
the class JobResource method patch.
@PATCH
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public CompletionStage<ScheduledJob> patch(@PathParam("id") String id, @RequestBody Job job) {
LOGGER.debug("REST patch update {}", job);
JobDetails jobToBeMerged = ScheduledJobAdapter.to(ScheduledJobBuilder.from(job));
// validating allowed patch attributes
if (Objects.nonNull(jobToBeMerged.getPayload()) || StringUtils.isNotEmpty(jobToBeMerged.getId()) || StringUtils.isNotEmpty(jobToBeMerged.getScheduledId()) || StringUtils.isNotEmpty(jobToBeMerged.getCorrelationId()) || (Objects.nonNull(jobToBeMerged.getExecutionCounter()) && jobToBeMerged.getExecutionCounter() > 0) || Objects.nonNull(jobToBeMerged.getPriority()) || (Objects.nonNull(jobToBeMerged.getRetries()) && jobToBeMerged.getRetries() > 0) || Objects.nonNull(jobToBeMerged.getRecipient()) || Objects.nonNull(jobToBeMerged.getStatus())) {
throw new IllegalArgumentException("Patch an only be applied to the Job scheduling trigger attributes");
}
return scheduler.reschedule(id, jobToBeMerged.getTrigger()).map(ScheduledJobAdapter::of).findFirst().run().thenApply(j -> j.orElseThrow(() -> new NotFoundException("Failed to reschedule job " + job)));
}
use of org.kie.kogito.jobs.service.model.job.JobDetails in project kogito-apps by kiegroup.
the class HttpJobExecutorTest method testExecutePeriodic.
@Test
void testExecutePeriodic(@Mock HttpRequest<Buffer> request, @Mock MultiMap params) {
JobDetails scheduledJob = JobDetails.builder().id(JOB_ID).recipient(new Recipient.HTTPRecipient(ENDPOINT)).trigger(ScheduledJobAdapter.intervalTrigger(DateUtil.now(), 10, 1)).executionCounter(1).build();
Map queryParams = assertExecuteAndReturnQueryParams(request, params, scheduledJob, false);
assertThat(queryParams).hasSize(1).containsEntry("limit", "8");
}
use of org.kie.kogito.jobs.service.model.job.JobDetails in project kogito-apps by kiegroup.
the class ReactiveMessagingEventConsumerTest method onCancelJobWithExistingJobSuccessful.
@Test
void onCancelJobWithExistingJobSuccessful() {
JobDetails jobDetails = JobDetails.builder().id(JOB_ID).build();
prepareCancelJobWithExistingJob(jobDetails);
executeSuccessfulCancelJob();
}
use of org.kie.kogito.jobs.service.model.job.JobDetails in project kogito-apps by kiegroup.
the class ReactiveMessagingEventConsumerTest method onCreateProcessInstanceJobExistingNonScheduledSuccessful.
private void onCreateProcessInstanceJobExistingNonScheduledSuccessful(JobStatus nonScheduledStatus) {
JobDetails existingJob = JobDetails.builder().id(JOB_ID).status(nonScheduledStatus).build();
prepareCreateProcessInstanceJobWithExistingJobResult(existingJob);
executeSuccessfulNonScheduledJobExecution();
}
Aggregations