From cecd30309f23cb998774b05b8bd74ebb11ac8d22 Mon Sep 17 00:00:00 2001 From: Fabio Formosa Date: Thu, 6 Oct 2022 01:13:33 +0200 Subject: [PATCH] #63 replaced some "any" with actual type and conformed the log notifier to the progress notifier --- .../progress-panel.component.ts | 9 ++- .../src/app/model/SocketEndpoint.model.ts | 7 ++- .../app/model/trigger-fired-bundle.model.ts | 10 ++++ .../src/app/services/websocket.service.ts | 32 +++++++---- .../aspects/ProgressNotifier.java | 17 ------ .../aspects/WebSocketProgressNotifier.java | 54 ------------------ .../configuration/WebsocketConfig.java | 54 +++++++++--------- .../jobs/AbstractLoggingJob.java | 56 ------------------- .../jobs/AbstractQuartzManagerJob.java | 48 ++++++++++++++++ .../quartzmanager/services/JobService.java | 10 ++-- .../websockets/WebSocketLogsNotifier.java | 20 +++++++ .../websockets/WebSocketProgressNotifier.java | 50 +++++++++++++++++ .../websockets/WebhookSender.java | 14 +++++ .../quartzmanager/jobs/SampleJob.java | 2 +- .../samplepackage/SampleExtraJob.java | 4 +- .../quartzmanager/jobs/myjobs/SampleJob.java | 4 +- .../jobs/tests/MisfireTestJob.java | 6 +- 17 files changed, 211 insertions(+), 186 deletions(-) create mode 100644 quartz-manager-frontend/src/app/model/trigger-fired-bundle.model.ts delete mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java delete mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java delete mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractQuartzManagerJob.java create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketLogsNotifier.java create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketProgressNotifier.java create mode 100644 quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebhookSender.java diff --git a/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.ts b/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.ts index 0e3ef54..0d50777 100644 --- a/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.ts +++ b/quartz-manager-frontend/src/app/components/progress-panel/progress-panel.component.ts @@ -1,7 +1,8 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core' -import { ProgressWebsocketService } from '../../services'; +import {ProgressWebsocketService, QuartzManagerWebsocketMessage} from '../../services'; import { Observable } from 'rxjs'; +import TriggerFiredBundle from '../../model/trigger-fired-bundle.model'; // import {Message} from '@stomp/stompjs'; // import { Subscription } from 'rxjs/Subscription'; @@ -19,7 +20,7 @@ import { Observable } from 'rxjs'; }) export class ProgressPanelComponent implements OnInit { - progress = {}; + progress: TriggerFiredBundle = new TriggerFiredBundle(); percentageStr: string; // // Stream of messages @@ -31,15 +32,13 @@ export class ProgressPanelComponent implements OnInit { // public mq: Array = []; - // private socketSubscription - constructor( private progressWebsocketService: ProgressWebsocketService, // private _stompService: StompService, // private serverSocket : ServerSocket ) { } - onNewProgressMsg = (receivedMsg) => { + onNewProgressMsg = (receivedMsg: QuartzManagerWebsocketMessage) => { if (receivedMsg.type === 'SUCCESS') { const newStatus = receivedMsg.message; this.progress = newStatus; diff --git a/quartz-manager-frontend/src/app/model/SocketEndpoint.model.ts b/quartz-manager-frontend/src/app/model/SocketEndpoint.model.ts index 12b36aa..5679114 100644 --- a/quartz-manager-frontend/src/app/model/SocketEndpoint.model.ts +++ b/quartz-manager-frontend/src/app/model/SocketEndpoint.model.ts @@ -1,4 +1,7 @@ +import SockJS from 'sockjs-client'; +import Stomp from 'stompjs'; + export class SocketEndpoint { - client: any - stomp: any + client: SockJS; + stomp: Stomp; } diff --git a/quartz-manager-frontend/src/app/model/trigger-fired-bundle.model.ts b/quartz-manager-frontend/src/app/model/trigger-fired-bundle.model.ts new file mode 100644 index 0000000..85a82d5 --- /dev/null +++ b/quartz-manager-frontend/src/app/model/trigger-fired-bundle.model.ts @@ -0,0 +1,10 @@ +export default class TriggerFiredBundle { + timesTriggered: number; + repeatCount: number; + finalFireTime: string; + nextFireTime: string; + previousFireTime: string; + jobKey: string; + jobClass: string; + percentage: number; +} diff --git a/quartz-manager-frontend/src/app/services/websocket.service.ts b/quartz-manager-frontend/src/app/services/websocket.service.ts index 3615b51..599f936 100644 --- a/quartz-manager-frontend/src/app/services/websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/websocket.service.ts @@ -1,4 +1,4 @@ -import {Observable} from 'rxjs'; +import {Observable, Subscriber} from 'rxjs'; import {SocketEndpoint} from '../model/SocketEndpoint.model' @@ -6,6 +6,18 @@ import Stomp from 'stompjs'; import SockJS from 'sockjs-client'; import {SocketOption} from '../model/SocketOption.model'; +interface WebsocketSubscriber { + index: number, + observer: Subscriber +} + +export interface QuartzManagerWebsocketMessage { + type: string; + message: any; + headers: any; + self: boolean; +} + export class WebsocketService { _options: SocketOption; @@ -13,7 +25,7 @@ export class WebsocketService { _socket: SocketEndpoint = new SocketEndpoint(); observableStompConnection: Observable; - subscribers: Array = []; + subscribers: Array = []; subscriberIndex = 0; _messageIds: Array = []; @@ -37,24 +49,20 @@ export class WebsocketService { }); } - addToSubscribers = (subscriber) => { + private addToSubscribers = (subscriber) => { this.subscribers.push(subscriber); } - removeFromSubscribers = (index) => { - if (index > this.subscribers.length) { - // tslint:disable-next-line:max-line-length - throw new Error(`Unexpected error removing subscriber from websocket, because index ${index} is greater than subscriber length ${this.subscribers.length}`); - } - this.subscribers.splice(index, 1); + private removeFromSubscribers = (index) => { + this.subscribers = this.subscribers.filter(subscriber => subscriber.index !== index); } getObservable = () => { return this.observableStompConnection; }; - getMessage = function (data) { - const out: any = {}; + getMessage = function (data): QuartzManagerWebsocketMessage { + const out: QuartzManagerWebsocketMessage = {}; out.type = 'SUCCESS'; out.message = JSON.parse(data.body); out.headers = {}; @@ -115,7 +123,7 @@ export class WebsocketService { let socketUrl = this._options.socketUrl; if (this._options.getAccessToken()) { - socketUrl += `?access_token=${this._options.getAccessToken()}` + socketUrl += `?access_token=${this._options.getAccessToken()}`; } this._socket.client = new SockJS(socketUrl); diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java deleted file mode 100644 index 242cfd3..0000000 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/ProgressNotifier.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.fabioformosa.quartzmanager.aspects; - -import org.quartz.JobExecutionContext; -import org.quartz.SchedulerException; - -/** - * - * Notify the progress of the trigger to all consumers - * - * @author Fabio Formosa - * - */ -public interface ProgressNotifier { - - void send(JobExecutionContext jobExecutionContext) throws SchedulerException; - -} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java deleted file mode 100644 index 2260cdb..0000000 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/aspects/WebSocketProgressNotifier.java +++ /dev/null @@ -1,54 +0,0 @@ -package it.fabioformosa.quartzmanager.aspects; - -import it.fabioformosa.quartzmanager.dto.TriggerFiredBundleDTO; -import org.quartz.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.messaging.simp.SimpMessageSendingOperations; -import org.springframework.stereotype.Component; - -/** - * - * Notify the progress of the trigger through websocket - * - * @author Fabio Formosa - * - */ -//@Aspect -@Component -public class WebSocketProgressNotifier implements ProgressNotifier { - - @Autowired - private SimpMessageSendingOperations messagingTemplate; - - //@AfterReturning("execution(* logAndSend(..))") - // @Override - // public void updateProgress(JoinPoint joinPoint) { - // log.info("PROGRESS UPDATE!!!"); - // } - - @Override - public void send(JobExecutionContext jobExecutionContext) throws SchedulerException { - TriggerFiredBundleDTO triggerFiredBundleDTO = new TriggerFiredBundleDTO(); - - Trigger trigger = jobExecutionContext.getTrigger(); - triggerFiredBundleDTO.setFinalFireTime(trigger.getFinalFireTime()); - triggerFiredBundleDTO.setNextFireTime(trigger.getNextFireTime()); - triggerFiredBundleDTO.setPreviousFireTime(trigger.getPreviousFireTime()); - - if (trigger instanceof SimpleTrigger) { - SimpleTrigger simpleTrigger = (SimpleTrigger) trigger; - triggerFiredBundleDTO.setRepeatCount(simpleTrigger.getRepeatCount() + 1); - triggerFiredBundleDTO.setTimesTriggered(simpleTrigger.getTimesTriggered()); - } else if (trigger instanceof DailyTimeIntervalTrigger) { - DailyTimeIntervalTrigger dailyTrigger = (DailyTimeIntervalTrigger) trigger; - triggerFiredBundleDTO.setRepeatCount(dailyTrigger.getRepeatCount() + 1); - } - - JobDetail jobDetail = jobExecutionContext.getJobDetail(); - triggerFiredBundleDTO.setJobKey(jobDetail.getKey().getName()); - triggerFiredBundleDTO.setJobClass(trigger.getClass().getSimpleName()); - - messagingTemplate.convertAndSend("/topic/progress", triggerFiredBundleDTO); - } - -} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/WebsocketConfig.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/WebsocketConfig.java index 47f5d07..7844c92 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/WebsocketConfig.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/configuration/WebsocketConfig.java @@ -1,27 +1,27 @@ -package it.fabioformosa.quartzmanager.configuration; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; - -@Configuration -@ComponentScan(basePackages = {"it.fabioformosa.quartzmanager.aspects"}) -@EnableWebSocketMessageBroker -public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer { - - @Override - public void configureMessageBroker(MessageBrokerRegistry config) { - config.enableSimpleBroker("/topic"); - config.setApplicationDestinationPrefixes("/job"); - } - - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/quartz-manager/logs").setAllowedOrigins("/**").withSockJS(); - registry.addEndpoint("/quartz-manager/progress").setAllowedOrigins("/**").withSockJS(); - } - -} +package it.fabioformosa.quartzmanager.configuration; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; + +@Configuration +@ComponentScan(basePackages = {"it.fabioformosa.quartzmanager.websockets"}) +@EnableWebSocketMessageBroker +public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer { + + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + config.enableSimpleBroker("/topic"); + config.setApplicationDestinationPrefixes("/job"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/quartz-manager/logs").setAllowedOrigins("/**").withSockJS(); + registry.addEndpoint("/quartz-manager/progress").setAllowedOrigins("/**").withSockJS(); + } + +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java deleted file mode 100644 index b2bf316..0000000 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractLoggingJob.java +++ /dev/null @@ -1,56 +0,0 @@ -package it.fabioformosa.quartzmanager.jobs; - -import it.fabioformosa.quartzmanager.aspects.ProgressNotifier; -import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.SchedulerException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.messaging.simp.SimpMessageSendingOperations; - -import javax.annotation.Resource; - -/** - * Extends this class to create a job that produces LogRecord to be displayed - * into the GUI panel - * - * @author Fabio.Formosa - * - */ -public abstract class AbstractLoggingJob implements Job { - - private static final Logger log = LoggerFactory.getLogger(AbstractLoggingJob.class); - - @Autowired - private SimpMessageSendingOperations messagingTemplate; - - @Resource - private ProgressNotifier progressNotifier; - - /** - * - * @param jobExecutionContext - * @return final log - */ - public abstract LogRecord doIt(JobExecutionContext jobExecutionContext); - - @Override - public final void execute(JobExecutionContext jobExecutionContext) { - try { - LogRecord logMsg = doIt(jobExecutionContext); - logAndSend(logMsg); - progressNotifier.send(jobExecutionContext); - } catch (SchedulerException e) { - log.error("Error updating progress " + e.getMessage()); - } - } - - public void logAndSend(LogRecord logRecord) { - log.info(logRecord.getMessage()); - logRecord.setThreadName(Thread.currentThread().getName()); - messagingTemplate.convertAndSend("/topic/logs", logRecord); - } - -} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractQuartzManagerJob.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractQuartzManagerJob.java new file mode 100644 index 0000000..4ca06f9 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/jobs/AbstractQuartzManagerJob.java @@ -0,0 +1,48 @@ +package it.fabioformosa.quartzmanager.jobs; + +import it.fabioformosa.quartzmanager.dto.TriggerFiredBundleDTO; +import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; +import it.fabioformosa.quartzmanager.websockets.WebSocketProgressNotifier; +import it.fabioformosa.quartzmanager.websockets.WebhookSender; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; + +/** + * Extends this class to create a job that produces LogRecord to be displayed + * into the GUI panel + * + * @author Fabio.Formosa + */ +public abstract class AbstractQuartzManagerJob implements Job { + + private static final Logger log = LoggerFactory.getLogger(AbstractQuartzManagerJob.class); + + @Resource + private WebhookSender webSocketProgressNotifier; + + @Resource + private WebhookSender webSocketLogsNotifier; + + /** + * @param jobExecutionContext + * @return final log + */ + public abstract LogRecord doIt(JobExecutionContext jobExecutionContext); + + @Override + public final void execute(JobExecutionContext jobExecutionContext) { + LogRecord logMsg = doIt(jobExecutionContext); + log.info(logMsg.getMessage()); + + logMsg.setThreadName(Thread.currentThread().getName()); + webSocketLogsNotifier.send(logMsg); + + TriggerFiredBundleDTO triggerFiredBundleDTO = WebSocketProgressNotifier.buildTriggerFiredBundle(jobExecutionContext); + webSocketProgressNotifier.send(triggerFiredBundleDTO); + } + +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/JobService.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/JobService.java index 6769018..fa954da 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/JobService.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/services/JobService.java @@ -1,6 +1,6 @@ package it.fabioformosa.quartzmanager.services; -import it.fabioformosa.quartzmanager.jobs.AbstractLoggingJob; +import it.fabioformosa.quartzmanager.jobs.AbstractQuartzManagerJob; import lombok.Getter; import org.apache.commons.lang3.StringUtils; import org.reflections.Reflections; @@ -15,7 +15,7 @@ import java.util.stream.Collectors; public class JobService { @Getter - private List> jobClasses = new ArrayList<>(); + private List> jobClasses = new ArrayList<>(); private List jobClassPackages = new ArrayList<>(); @@ -30,14 +30,14 @@ public class JobService { @PostConstruct public void initJobClassList() { - List> foundJobClasses = jobClassPackages.stream().flatMap(jobClassPackage -> findJobClassesInPackage(jobClassPackage).stream()).collect(Collectors.toList()); + List> foundJobClasses = jobClassPackages.stream().flatMap(jobClassPackage -> findJobClassesInPackage(jobClassPackage).stream()).collect(Collectors.toList()); if (foundJobClasses.size() > 0) this.jobClasses.addAll(foundJobClasses); } - private static Set> findJobClassesInPackage(String packageStr) { + private static Set> findJobClassesInPackage(String packageStr) { Reflections reflections = new Reflections(packageStr); - return reflections.getSubTypesOf(AbstractLoggingJob.class); + return reflections.getSubTypesOf(AbstractQuartzManagerJob.class); } } diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketLogsNotifier.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketLogsNotifier.java new file mode 100644 index 0000000..81c34e2 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketLogsNotifier.java @@ -0,0 +1,20 @@ +package it.fabioformosa.quartzmanager.websockets; + +import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.stereotype.Component; + +@Component +public class WebSocketLogsNotifier implements WebhookSender { + + public static final String TOPIC_LOGS = "/topic/logs"; + + @Autowired + private SimpMessageSendingOperations messagingTemplate; + + @Override + public void send(LogRecord logRecord) { + messagingTemplate.convertAndSend(TOPIC_LOGS, logRecord); + } +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketProgressNotifier.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketProgressNotifier.java new file mode 100644 index 0000000..c68cce9 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebSocketProgressNotifier.java @@ -0,0 +1,50 @@ +package it.fabioformosa.quartzmanager.websockets; + +import it.fabioformosa.quartzmanager.dto.TriggerFiredBundleDTO; +import org.quartz.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.stereotype.Component; + +/** + * Notify the progress of the trigger through websocket + * + * @author Fabio Formosa + */ +@Component +public class WebSocketProgressNotifier implements WebhookSender { + + public static final String TOPIC_PROGRESS = "/topic/progress"; + + @Autowired + private SimpMessageSendingOperations messagingTemplate; + + @Override + public void send(TriggerFiredBundleDTO triggerFiredBundleDTO) { + messagingTemplate.convertAndSend(TOPIC_PROGRESS, triggerFiredBundleDTO); + } + + public static TriggerFiredBundleDTO buildTriggerFiredBundle(JobExecutionContext jobExecutionContext) { + TriggerFiredBundleDTO triggerFiredBundleDTO = new TriggerFiredBundleDTO(); + + Trigger trigger = jobExecutionContext.getTrigger(); + triggerFiredBundleDTO.setFinalFireTime(trigger.getFinalFireTime()); + triggerFiredBundleDTO.setNextFireTime(trigger.getNextFireTime()); + triggerFiredBundleDTO.setPreviousFireTime(trigger.getPreviousFireTime()); + + if (trigger instanceof SimpleTrigger) { + SimpleTrigger simpleTrigger = (SimpleTrigger) trigger; + triggerFiredBundleDTO.setRepeatCount(simpleTrigger.getRepeatCount() + 1); + triggerFiredBundleDTO.setTimesTriggered(simpleTrigger.getTimesTriggered()); + } else if (trigger instanceof DailyTimeIntervalTrigger) { + DailyTimeIntervalTrigger dailyTrigger = (DailyTimeIntervalTrigger) trigger; + triggerFiredBundleDTO.setRepeatCount(dailyTrigger.getRepeatCount() + 1); + } + + JobDetail jobDetail = jobExecutionContext.getJobDetail(); + triggerFiredBundleDTO.setJobKey(jobDetail.getKey().getName()); + triggerFiredBundleDTO.setJobClass(trigger.getClass().getSimpleName()); + return triggerFiredBundleDTO; + } + +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebhookSender.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebhookSender.java new file mode 100644 index 0000000..7920460 --- /dev/null +++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/websockets/WebhookSender.java @@ -0,0 +1,14 @@ +package it.fabioformosa.quartzmanager.websockets; + +/** + * + * Notify the progress of the trigger to all consumers + * + * @author Fabio Formosa + * + */ +public interface WebhookSender { + + void send(T message); + +} diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/jobs/SampleJob.java b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/jobs/SampleJob.java index f8fb8d3..4b61c71 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/jobs/SampleJob.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/jobs/SampleJob.java @@ -4,7 +4,7 @@ import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord.LogType; import org.quartz.JobExecutionContext; -public class SampleJob extends AbstractLoggingJob { +public class SampleJob extends AbstractQuartzManagerJob { @Override public LogRecord doIt(JobExecutionContext jobExecutionContext) { diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/samplepackage/SampleExtraJob.java b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/samplepackage/SampleExtraJob.java index 41283bd..4061f6a 100644 --- a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/samplepackage/SampleExtraJob.java +++ b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/samplepackage/SampleExtraJob.java @@ -1,11 +1,11 @@ package it.fabioformosa.samplepackage; -import it.fabioformosa.quartzmanager.jobs.AbstractLoggingJob; +import it.fabioformosa.quartzmanager.jobs.AbstractQuartzManagerJob; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord.LogType; import org.quartz.JobExecutionContext; -public class SampleExtraJob extends AbstractLoggingJob { +public class SampleExtraJob extends AbstractQuartzManagerJob { @Override public LogRecord doIt(JobExecutionContext jobExecutionContext) { diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java index b4606aa..11ebf92 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/myjobs/SampleJob.java @@ -2,12 +2,12 @@ package it.fabioformosa.quartzmanager.jobs.myjobs; import org.quartz.JobExecutionContext; -import it.fabioformosa.quartzmanager.jobs.AbstractLoggingJob; +import it.fabioformosa.quartzmanager.jobs.AbstractQuartzManagerJob; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord.LogType; -public class SampleJob extends AbstractLoggingJob { +public class SampleJob extends AbstractQuartzManagerJob { @Override public LogRecord doIt(JobExecutionContext jobExecutionContext) { return new LogRecord(LogType.INFO, "Hello World!"); diff --git a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java index 88c30b9..dc63db2 100644 --- a/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java +++ b/quartz-manager-parent/quartz-manager-web-showcase/src/main/java/it/fabioformosa/quartzmanager/jobs/tests/MisfireTestJob.java @@ -4,18 +4,18 @@ import org.quartz.JobExecutionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import it.fabioformosa.quartzmanager.jobs.AbstractLoggingJob; +import it.fabioformosa.quartzmanager.jobs.AbstractQuartzManagerJob; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord; import it.fabioformosa.quartzmanager.jobs.entities.LogRecord.LogType; /** * This job can be used to test the misfire policy. It pretends to be a long * processing job (sleeping for a while) - * + * * @author Fabio.Formosa * */ -public class MisfireTestJob extends AbstractLoggingJob { +public class MisfireTestJob extends AbstractQuartzManagerJob { private Logger log = LoggerFactory.getLogger(MisfireTestJob.class);