#52 added the trigger name to the trigger form

This commit is contained in:
Fabio Formosa
2022-09-03 15:50:34 +02:00
parent 21f3f7dca2
commit 9638667368
12 changed files with 26 additions and 175 deletions

View File

@@ -39,7 +39,6 @@ import {
HeaderComponent, HeaderComponent,
FooterComponent, FooterComponent,
GithubComponent, GithubComponent,
SchedulerConfigComponent,
SchedulerControlComponent, SchedulerControlComponent,
LogsPanelComponent, LogsPanelComponent,
ProgressPanelComponent, ProgressPanelComponent,
@@ -111,7 +110,6 @@ export function jwtOptionsFactory(apiService: ApiService) {
LoginComponent, LoginComponent,
NotFoundComponent, NotFoundComponent,
AccountMenuComponent, AccountMenuComponent,
SchedulerConfigComponent,
SimpleTriggerConfigComponent, SimpleTriggerConfigComponent,
SchedulerControlComponent, SchedulerControlComponent,
LogsPanelComponent, LogsPanelComponent,

View File

@@ -2,7 +2,6 @@ export * from './header';
export * from './github'; export * from './github';
export * from './footer'; export * from './footer';
export * from './logs-panel'; export * from './logs-panel';
export * from './scheduler-config';
export * from './scheduler-control'; export * from './scheduler-control';
export * from './progress-panel'; export * from './progress-panel';
export * from './trigger-list'; export * from './trigger-list';

View File

@@ -1 +0,0 @@
export * from './scheduler-config.component';

View File

@@ -1,68 +0,0 @@
<mat-card>
<mat-card-header>
<mat-card-title><b>SCHEDULER CONFIG</b></mat-card-title>
</mat-card-header>
<!-- ADD BUTTON -->
<mat-card-content *ngIf="!existsATriggerInProgress() && !enabledTriggerForm">
<button mat-fab color="primary">
<mat-icon (click)="enableTriggerForm()">add</mat-icon>
</button>
</mat-card-content>
<!-- TRIGGER DETAILS -->
<mat-card-content *ngIf="existsATriggerInProgress() || enabledTriggerForm">
<div fxLayout="column">
<form name="configForm" fxFlex="1 1 100%" #configForm="ngForm">
<div>
<mat-form-field [appearance]="enabledTriggerForm ? 'standard': 'none'">
<mat-label>Freq [Num per day]</mat-label>
<input [readonly]="!enabledTriggerForm"
matInput placeholder="Freq [Num per day]" name="triggerPerDay" type="number"
[(ngModel)]="config.triggerPerDay"
>
</mat-form-field>
</div>
<div>
<mat-form-field [appearance]="enabledTriggerForm ? 'standard': 'none'">
<mat-label>Max Occurrences</mat-label>
<input [readonly]="!enabledTriggerForm"
matInput placeholder="Max Occurrences" name="maxCount" type="number"
[(ngModel)]="config.maxCount"
>
</mat-form-field>
</div>
<br>
<div>
<h5>Misfire Policy</h5>
<div>RESCHEDULE NEXT WITH REMAINING COUNT</div>
<div class="small">
In case of misfire event, the trigger is re-scheduled to the next scheduled time after 'now' with the repeat count set to what it would be, if it had not missed any firings.
<br/>
<strong>Warning:</strong> This policy could cause the Trigger to go directly to the 'COMPLETE' state if all fire-times where missed.
</div>
</div>
<br>
<button mat-raised-button
type="button"
*ngIf="enabledTriggerForm"
(click)="cancelConfigForm()">
Cancel
</button>
<button mat-raised-button
type="button" color="primary"
*ngIf="enabledTriggerForm"
(click)="submitConfig()">
Submit
</button>
<button mat-raised-button type="button"
*ngIf="!enabledTriggerForm"
(click)="enabledTriggerForm = true">
Reschedule
</button>
</form>
</div>
</mat-card-content>
</mat-card>

View File

@@ -1,72 +0,0 @@
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { SchedulerService } from '../../services';
import { SchedulerConfig } from '../../model/schedulerConfig.model'
import {Scheduler} from '../../model/scheduler.model';
/**
* DEPRECATED! Not more used
*/
@Component({
selector: 'qrzmng-scheduler-config',
templateUrl: './scheduler-config.component.html',
styleUrls: ['./scheduler-config.component.scss']
})
export class SchedulerConfigComponent implements OnInit {
config: SchedulerConfig = new SchedulerConfig()
configBackup: SchedulerConfig = new SchedulerConfig()
scheduler: Scheduler;
triggerLoading = true;
enabledTriggerForm = false;
private fetchedTriggers = false;
private triggerInProgress = false;
constructor(
private schedulerService: SchedulerService
) { }
ngOnInit() {
this.triggerLoading = true;
this._getScheduler();
this.retrieveConfig();
}
retrieveConfig = () => {
this.schedulerService.getConfig()
.subscribe(res => {
this.config = new SchedulerConfig(res.triggerPerDay, res.maxCount, res.timesTriggered)
this.configBackup = res
this.triggerLoading = false;
this.triggerInProgress = res.timesTriggered < res.maxCount;
})
}
private _getScheduler() {
this.schedulerService.getScheduler()
.subscribe( res => {
this.scheduler = <Scheduler>res;
this.fetchedTriggers = this.scheduler.triggerKeys.length > 0
})
}
existsATriggerInProgress = (): boolean => this.fetchedTriggers && this.triggerInProgress;
cancelConfigForm = () => this.enabledTriggerForm = false;
submitConfig = () => {
const schedulerServiceCall = this.existsATriggerInProgress() ? this.schedulerService.updateConfig : this.schedulerService.saveConfig;
schedulerServiceCall(this.config)
.subscribe(res => {
this.configBackup = this.config;
this.enabledTriggerForm = false;
this.fetchedTriggers = true;
this.triggerInProgress = true;
}, error => {
this.config = this.configBackup;
});
};
enableTriggerForm = () => this.enabledTriggerForm = true;
}

View File

@@ -7,6 +7,16 @@
<div fxLayout="column"> <div fxLayout="column">
<form name="configForm" fxFlex="1 1 100%" #configForm="ngForm"> <form name="configForm" fxFlex="1 1 100%" #configForm="ngForm">
<div>
<mat-form-field [appearance]="enabledTriggerForm ? 'standard': 'none'">
<mat-label>Trigger Name</mat-label>
<input [readonly]="!enabledTriggerForm"
matInput placeholder="Repeat Interval [in mills]" name="triggerName"
[(ngModel)]="simpleTriggerForm.triggerName">
</mat-form-field>
</div>
<div> <div>
<mat-form-field [appearance]="enabledTriggerForm ? 'standard': 'none'"> <mat-form-field [appearance]="enabledTriggerForm ? 'standard': 'none'">
<mat-label>Start Date (optional)</mat-label> <mat-label>Start Date (optional)</mat-label>

View File

@@ -94,6 +94,7 @@ export class SimpleTriggerConfigComponent implements OnInit {
private _fromTriggerToForm = (simpleTrigger: SimpleTrigger): SimpleTriggerForm => { private _fromTriggerToForm = (simpleTrigger: SimpleTrigger): SimpleTriggerForm => {
const command = new SimpleTriggerForm(); const command = new SimpleTriggerForm();
command.triggerName = simpleTrigger.triggerKeyDTO.name;
command.repeatCount = simpleTrigger.repeatCount; command.repeatCount = simpleTrigger.repeatCount;
command.repeatInterval = simpleTrigger.repeatInterval; command.repeatInterval = simpleTrigger.repeatInterval;
command.startDate = moment(simpleTrigger.startTime); command.startDate = moment(simpleTrigger.startTime);
@@ -103,6 +104,7 @@ export class SimpleTriggerConfigComponent implements OnInit {
private _fromFormToCommand = (simpleTriggerForm: SimpleTriggerForm): SimpleTriggerCommand => { private _fromFormToCommand = (simpleTriggerForm: SimpleTriggerForm): SimpleTriggerCommand => {
const simpleTriggerCommand = new SimpleTriggerCommand(); const simpleTriggerCommand = new SimpleTriggerCommand();
simpleTriggerCommand.triggerName = simpleTriggerForm.triggerName;
simpleTriggerCommand.repeatCount = simpleTriggerForm.repeatCount; simpleTriggerCommand.repeatCount = simpleTriggerForm.repeatCount;
simpleTriggerCommand.repeatInterval = simpleTriggerForm.repeatInterval; simpleTriggerCommand.repeatInterval = simpleTriggerForm.repeatInterval;
simpleTriggerCommand.startDate = simpleTriggerForm.startDate.toDate(); simpleTriggerCommand.startDate = simpleTriggerForm.startDate.toDate();

View File

@@ -10,11 +10,7 @@
<mat-nav-list style="overflow-y: auto; position: absolute; left: 0; right: 0; top: 0; bottom: 0; overflow: auto; height: calc(100% - 3em)"> <mat-nav-list style="overflow-y: auto; position: absolute; left: 0; right: 0; top: 0; bottom: 0; overflow: auto; height: calc(100% - 3em)">
<mat-list-item *ngFor="let triggerKey of getTriggerKeyList()" class="triggerItemList" <mat-list-item *ngFor="let triggerKey of getTriggerKeyList()" class="triggerItemList"
[ngClass]="{'selectedTrigger': triggerKey.name == selectedTrigger.name}"> [ngClass]="{'selectedTrigger': triggerKey.name == selectedTrigger.name}">
<!-- <a matLine href="...">{{ triggerKey.name }}</a>-->
<a matLine>{{ triggerKey.name }}</a> <a matLine>{{ triggerKey.name }}</a>
<!-- <button mat-icon-button (click)="showInfo(link)">-->
<!-- <mat-icon>info</mat-icon>-->
<!-- </button>-->
</mat-list-item> </mat-list-item>
</mat-nav-list> </mat-nav-list>
</mat-card-content> </mat-card-content>

View File

@@ -1,4 +1,5 @@
export class SimpleTriggerCommand { export class SimpleTriggerCommand {
triggerName: string;
startDate: Date; startDate: Date;
endDate: Date; endDate: Date;
repeatCount: number; repeatCount: number;

View File

@@ -1,6 +1,7 @@
import {Moment} from 'moment/moment'; import {Moment} from 'moment/moment';
export class SimpleTriggerForm { export class SimpleTriggerForm {
triggerName: string;
startDate: Moment; startDate: Moment;
endDate: Moment; endDate: Moment;
repeatCount: number; repeatCount: number;

View File

@@ -7,62 +7,50 @@ import {SimpleTriggerCommand} from '../model/simple-trigger.command';
import {SchedulerConfig} from '../model/schedulerConfig.model'; import {SchedulerConfig} from '../model/schedulerConfig.model';
import {Scheduler} from '../model/scheduler.model'; import {Scheduler} from '../model/scheduler.model';
const CONTEXT_PATH = '/quartz-manager';
@Injectable() @Injectable()
export class SchedulerService { export class SchedulerService {
constructor( constructor(
private apiService: ApiService private apiService: ApiService
) { } ) { }
startScheduler = (): Observable<void> => { startScheduler = (): Observable<void> => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/run') return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/run`);
} }
stopScheduler = (): Observable<void> => { stopScheduler = (): Observable<void> => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/stop') return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/stop`);
} }
pauseScheduler = (): Observable<void> => { pauseScheduler = (): Observable<void> => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/pause') return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/pause`);
} }
resumeScheduler = (): Observable<void> => { resumeScheduler = (): Observable<void> => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/resume') return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/resume`);
} }
getStatus = () => { getStatus = () => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/status') return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/status`);
} }
getScheduler = (): Observable<Scheduler> => { getScheduler = (): Observable<Scheduler> => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler') return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler`);
}
// deprecated
getConfig = () => {
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/config')
} }
getSimpleTriggerConfig = (triggerName: string): Observable<Trigger> => { getSimpleTriggerConfig = (triggerName: string): Observable<Trigger> => {
return this.apiService.get(getBaseUrl() + `/quartz-manager/simple-triggers/${triggerName}`); return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/simple-triggers/${triggerName}`);
}
// deprecated
saveConfig = (config: Object) => {
return this.apiService.post(getBaseUrl() + '/quartz-manager/triggers/mytrigger', config)
} }
saveSimpleTriggerConfig = (config: SimpleTriggerCommand) => { saveSimpleTriggerConfig = (config: SimpleTriggerCommand) => {
return this.apiService.post(getBaseUrl() + '/quartz-manager/simple-triggers/my-simple-trigger', config) return this.apiService.post(getBaseUrl() + `${CONTEXT_PATH}/simple-triggers/${config.triggerName}`, config)
}
// deprecated
updateConfig = (config: SchedulerConfig) => {
return this.apiService.put(getBaseUrl() + '/quartz-manager/triggers/mytrigger', config)
} }
updateSimpleTriggerConfig = (config: SimpleTriggerCommand) => { updateSimpleTriggerConfig = (config: SimpleTriggerCommand) => {
return this.apiService.put(getBaseUrl() + '/quartz-manager/simple-triggers/my-simple-trigger', config) return this.apiService.put(getBaseUrl() + `${CONTEXT_PATH}/simple-triggers/${config.triggerName}`, config)
} }