mirror of
https://github.com/fabioformosa/quartz-manager.git
synced 2026-05-14 22:00:30 +09:00
#52 added the trigger name to the trigger form
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
export * from './scheduler-config.component';
|
|
||||||
@@ -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>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
.small{
|
|
||||||
font-size: 0.8em;
|
|
||||||
}
|
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
export class SimpleTriggerCommand {
|
export class SimpleTriggerCommand {
|
||||||
|
triggerName: string;
|
||||||
startDate: Date;
|
startDate: Date;
|
||||||
endDate: Date;
|
endDate: Date;
|
||||||
repeatCount: number;
|
repeatCount: number;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user