diff --git a/quartz-manager-frontend/src/app/components/logs-panel/logs-panel.component.ts b/quartz-manager-frontend/src/app/components/logs-panel/logs-panel.component.ts
index d630987..069747b 100644
--- a/quartz-manager-frontend/src/app/components/logs-panel/logs-panel.component.ts
+++ b/quartz-manager-frontend/src/app/components/logs-panel/logs-panel.component.ts
@@ -2,10 +2,12 @@ import {Component, OnInit, Input, Output, EventEmitter, OnDestroy} from '@angula
import {LogsWebsocketService, ApiService, getBaseUrl, CONTEXT_PATH, QuartzManagerWebsocketMessage} from '../../services';
import {Observable} from 'rxjs';
-import {RxStompService, } from '../../services/rx-stomp.service';
+import {RxStompService,} from '../../services/rx-stomp.service';
import {RxStompConfig} from '@stomp/rx-stomp/esm6/rx-stomp-config';
import {LogsRxWebsocketService} from '../../services/logs.rx-websocket.service';
import {map} from 'rxjs/operators';
+import {Trigger} from '../../model/trigger.model';
+import {TriggerKey} from '../../model/triggerKey.model';
@Component({
@@ -21,6 +23,8 @@ export class LogsPanelComponent implements OnInit, OnDestroy {
topicSubscription;
+ private selectedTriggerKey: TriggerKey;
+
constructor(
// private logsWebsocketService: LogsWebsocketService,
private logsRxWebsocketService: LogsRxWebsocketService,
@@ -28,6 +32,14 @@ export class LogsPanelComponent implements OnInit, OnDestroy {
) {
}
+ @Input()
+ set triggerKey(triggerKey: TriggerKey) {
+ this.selectedTriggerKey = {...triggerKey} as TriggerKey;
+ if (this.selectedTriggerKey && this.selectedTriggerKey.name) {
+ this._subscribeToTheTopic(this.selectedTriggerKey);
+ }
+ }
+
ngOnInit() {
// const obs = this.logsWebsocketService.getObservable()
// obs.subscribe({
@@ -37,17 +49,34 @@ export class LogsPanelComponent implements OnInit, OnDestroy {
// }
// });
- this.topicSubscription = this.logsRxWebsocketService.watch('/topic/logs')
+ // this.topicSubscription = this.logsRxWebsocketService.watch('/topic/logs')
+ // .pipe(map(msg => JSON.parse(msg.body)))
+ // .subscribe(this._showNewLog, (err) => {
+ // console.log(err);
+ // // TODO in case of 401
+ // // this.apiService.get('/quartz-manager/session/refresh');
+ // });
+ }
+
+ private _subscribeToTheTopic = (triggerKey: TriggerKey) => {
+ if (this.topicSubscription) {
+ this.topicSubscription.unsubscribe();
+ }
+ this.topicSubscription = this.logsRxWebsocketService.watch(`/topic/logs/${triggerKey.name}`)
.pipe(map(msg => JSON.parse(msg.body)))
.subscribe(this._showNewLog, (err) => {
console.log(err);
// TODO in case of 401
// this.apiService.get('/quartz-manager/session/refresh');
});
- }
+ };
ngOnDestroy() {
+ if (this.topicSubscription) {
+ this.topicSubscription.unsubscribe();
+ }
this.topicSubscription.unsubscribe();
+ this.topicSubscription = null;
}
// onNewLogMsg = (receivedMsg) => {
diff --git a/quartz-manager-frontend/src/app/components/simple-trigger-config/simple-trigger-config.component.ts b/quartz-manager-frontend/src/app/components/simple-trigger-config/simple-trigger-config.component.ts
index 1b643ae..15bd6db 100644
--- a/quartz-manager-frontend/src/app/components/simple-trigger-config/simple-trigger-config.component.ts
+++ b/quartz-manager-frontend/src/app/components/simple-trigger-config/simple-trigger-config.component.ts
@@ -73,8 +73,10 @@ export class SimpleTriggerConfigComponent implements OnInit {
@Input()
set triggerKey(triggerKey: TriggerKey) {
- this.selectedTriggerKey = {...triggerKey} as TriggerKey;
- this.fetchSelectedTrigger();
+ if (!this.selectedTriggerKey || this.selectedTriggerKey.name !== triggerKey.name){
+ this.selectedTriggerKey = {...triggerKey} as TriggerKey;
+ this.fetchSelectedTrigger();
+ }
}
diff --git a/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts
index 9e98f91..14e784c 100644
--- a/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts
+++ b/quartz-manager-frontend/src/app/components/trigger-list/trigger-list.component.ts
@@ -90,7 +90,7 @@ export class TriggerListComponent implements OnInit {
onNewTrigger(newTrigger: SimpleTrigger) {
this.newTriggers = [newTrigger, ...this.newTriggers];
- this.selectedTrigger = newTrigger.triggerKeyDTO;
+ this.selectTrigger(newTrigger.triggerKeyDTO);
}
}
diff --git a/quartz-manager-frontend/src/app/views/manager/manager.component.html b/quartz-manager-frontend/src/app/views/manager/manager.component.html
index 05b11c9..c03d20c 100644
--- a/quartz-manager-frontend/src/app/views/manager/manager.component.html
+++ b/quartz-manager-frontend/src/app/views/manager/manager.component.html
@@ -30,7 +30,10 @@
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/jobs/AbstractQuartzManagerJob.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/jobs/AbstractQuartzManagerJob.java
index 609ee8d..20d6c90 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/jobs/AbstractQuartzManagerJob.java
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/jobs/AbstractQuartzManagerJob.java
@@ -38,11 +38,13 @@ public abstract class AbstractQuartzManagerJob implements Job {
LogRecord logMsg = doIt(jobExecutionContext);
log.info(logMsg.getMessage());
+ String triggerName = jobExecutionContext.getTrigger().getKey().getName();
+
logMsg.setThreadName(Thread.currentThread().getName());
- webSocketLogsNotifier.send(logMsg);
+ webSocketLogsNotifier.send(triggerName, logMsg);
TriggerFiredBundleDTO triggerFiredBundleDTO = WebSocketProgressNotifier.buildTriggerFiredBundle(jobExecutionContext);
- webSocketProgressNotifier.send(triggerFiredBundleDTO);
+ webSocketProgressNotifier.send(triggerName, triggerFiredBundleDTO);
}
}
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketLogsNotifier.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketLogsNotifier.java
index 9ced563..9cdbfb7 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketLogsNotifier.java
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketLogsNotifier.java
@@ -14,7 +14,7 @@ public class WebSocketLogsNotifier implements WebhookSender {
private SimpMessageSendingOperations messagingTemplate;
@Override
- public void send(LogRecord logRecord) {
- messagingTemplate.convertAndSend(TOPIC_LOGS, logRecord);
+ public void send(String triggerName, LogRecord logRecord) {
+ messagingTemplate.convertAndSend(TOPIC_LOGS + "/" + triggerName, logRecord);
}
}
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketProgressNotifier.java b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketProgressNotifier.java
index 7eeba6d..281d744 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketProgressNotifier.java
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/main/java/it/fabioformosa/quartzmanager/api/websockets/WebSocketProgressNotifier.java
@@ -20,7 +20,7 @@ public class WebSocketProgressNotifier implements WebhookSender {
- void send(T message);
+ void send(String triggerName, T message);
}
diff --git a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/jobs/SampleJobTest.java b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/jobs/SampleJobTest.java
index f56bd0d..f233979 100644
--- a/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/jobs/SampleJobTest.java
+++ b/quartz-manager-parent/quartz-manager-starter-api/src/test/java/it/fabioformosa/quartzmanager/api/jobs/SampleJobTest.java
@@ -32,6 +32,7 @@ class SampleJobTest {
@Test
void givenASampleJob_whenTheJobIsExecuted_thenTheWebhookSendersAreCalled() {
JobExecutionContext jobExecutionContext = Mockito.mock(JobExecutionContext.class);
+ String triggerName = "test-trigger";
ScheduleBuilder schedulerBuilder = SimpleScheduleBuilder.simpleSchedule()
.withRepeatCount(5)
@@ -40,6 +41,7 @@ class SampleJobTest {
.newJob(SampleJob.class).withIdentity(JobKey.jobKey("test-job"))
.build();
Trigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity(triggerName)
.forJob(jobDetail)
.withSchedule(schedulerBuilder)
.build();
@@ -47,14 +49,14 @@ class SampleJobTest {
Mockito.when(jobExecutionContext.getJobDetail()).thenReturn(jobDetail);
sampleJob.execute(jobExecutionContext);
- Mockito.verify(webSocketLogsNotifier).send(argThat(actualLogRecord -> {
+ Mockito.verify(webSocketLogsNotifier).send(triggerName, argThat(actualLogRecord -> {
Assertions.assertThat(actualLogRecord.getMessage()).isEqualTo("Hello!");
Assertions.assertThat(actualLogRecord.getType()).isEqualTo(LogRecord.LogType.INFO);
Assertions.assertThat(actualLogRecord.getDate()).isNotNull();
Assertions.assertThat(actualLogRecord.getThreadName()).isNotNull();
return true;
}));
- Mockito.verify(webSocketProgressNotifier).send(argThat(triggerFiredBundleDTO -> {
+ Mockito.verify(webSocketProgressNotifier).send(triggerName, argThat(triggerFiredBundleDTO -> {
Assertions.assertThat(triggerFiredBundleDTO.getJobKey()).isEqualTo("test-job");
Assertions.assertThat(triggerFiredBundleDTO.getRepeatCount()).isEqualTo(6);
Assertions.assertThat(triggerFiredBundleDTO.getJobClass()).isEqualTo(SampleJob.class.getName());