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,
|
||||
FooterComponent,
|
||||
GithubComponent,
|
||||
SchedulerConfigComponent,
|
||||
SchedulerControlComponent,
|
||||
LogsPanelComponent,
|
||||
ProgressPanelComponent,
|
||||
@@ -111,7 +110,6 @@ export function jwtOptionsFactory(apiService: ApiService) {
|
||||
LoginComponent,
|
||||
NotFoundComponent,
|
||||
AccountMenuComponent,
|
||||
SchedulerConfigComponent,
|
||||
SimpleTriggerConfigComponent,
|
||||
SchedulerControlComponent,
|
||||
LogsPanelComponent,
|
||||
|
||||
@@ -2,7 +2,6 @@ export * from './header';
|
||||
export * from './github';
|
||||
export * from './footer';
|
||||
export * from './logs-panel';
|
||||
export * from './scheduler-config';
|
||||
export * from './scheduler-control';
|
||||
export * from './progress-panel';
|
||||
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">
|
||||
<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>
|
||||
<mat-form-field [appearance]="enabledTriggerForm ? 'standard': 'none'">
|
||||
<mat-label>Start Date (optional)</mat-label>
|
||||
|
||||
@@ -94,6 +94,7 @@ export class SimpleTriggerConfigComponent implements OnInit {
|
||||
|
||||
private _fromTriggerToForm = (simpleTrigger: SimpleTrigger): SimpleTriggerForm => {
|
||||
const command = new SimpleTriggerForm();
|
||||
command.triggerName = simpleTrigger.triggerKeyDTO.name;
|
||||
command.repeatCount = simpleTrigger.repeatCount;
|
||||
command.repeatInterval = simpleTrigger.repeatInterval;
|
||||
command.startDate = moment(simpleTrigger.startTime);
|
||||
@@ -103,6 +104,7 @@ export class SimpleTriggerConfigComponent implements OnInit {
|
||||
|
||||
private _fromFormToCommand = (simpleTriggerForm: SimpleTriggerForm): SimpleTriggerCommand => {
|
||||
const simpleTriggerCommand = new SimpleTriggerCommand();
|
||||
simpleTriggerCommand.triggerName = simpleTriggerForm.triggerName;
|
||||
simpleTriggerCommand.repeatCount = simpleTriggerForm.repeatCount;
|
||||
simpleTriggerCommand.repeatInterval = simpleTriggerForm.repeatInterval;
|
||||
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-list-item *ngFor="let triggerKey of getTriggerKeyList()" class="triggerItemList"
|
||||
[ngClass]="{'selectedTrigger': triggerKey.name == selectedTrigger.name}">
|
||||
<!-- <a matLine href="...">{{ 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-nav-list>
|
||||
</mat-card-content>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
export class SimpleTriggerCommand {
|
||||
triggerName: string;
|
||||
startDate: Date;
|
||||
endDate: Date;
|
||||
repeatCount: number;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {Moment} from 'moment/moment';
|
||||
|
||||
export class SimpleTriggerForm {
|
||||
triggerName: string;
|
||||
startDate: Moment;
|
||||
endDate: Moment;
|
||||
repeatCount: number;
|
||||
|
||||
@@ -7,62 +7,50 @@ import {SimpleTriggerCommand} from '../model/simple-trigger.command';
|
||||
import {SchedulerConfig} from '../model/schedulerConfig.model';
|
||||
import {Scheduler} from '../model/scheduler.model';
|
||||
|
||||
const CONTEXT_PATH = '/quartz-manager';
|
||||
|
||||
@Injectable()
|
||||
export class SchedulerService {
|
||||
|
||||
|
||||
constructor(
|
||||
private apiService: ApiService
|
||||
) { }
|
||||
|
||||
startScheduler = (): Observable<void> => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/run')
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/run`);
|
||||
}
|
||||
|
||||
stopScheduler = (): Observable<void> => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/stop')
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/stop`);
|
||||
}
|
||||
|
||||
pauseScheduler = (): Observable<void> => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/pause')
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/pause`);
|
||||
}
|
||||
|
||||
resumeScheduler = (): Observable<void> => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/resume')
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/resume`);
|
||||
}
|
||||
|
||||
getStatus = () => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/status')
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler/status`);
|
||||
}
|
||||
|
||||
getScheduler = (): Observable<Scheduler> => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler')
|
||||
}
|
||||
|
||||
// deprecated
|
||||
getConfig = () => {
|
||||
return this.apiService.get(getBaseUrl() + '/quartz-manager/scheduler/config')
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/scheduler`);
|
||||
}
|
||||
|
||||
getSimpleTriggerConfig = (triggerName: string): Observable<Trigger> => {
|
||||
return this.apiService.get(getBaseUrl() + `/quartz-manager/simple-triggers/${triggerName}`);
|
||||
}
|
||||
|
||||
// deprecated
|
||||
saveConfig = (config: Object) => {
|
||||
return this.apiService.post(getBaseUrl() + '/quartz-manager/triggers/mytrigger', config)
|
||||
return this.apiService.get(getBaseUrl() + `${CONTEXT_PATH}/simple-triggers/${triggerName}`);
|
||||
}
|
||||
|
||||
saveSimpleTriggerConfig = (config: SimpleTriggerCommand) => {
|
||||
return this.apiService.post(getBaseUrl() + '/quartz-manager/simple-triggers/my-simple-trigger', config)
|
||||
}
|
||||
|
||||
// deprecated
|
||||
updateConfig = (config: SchedulerConfig) => {
|
||||
return this.apiService.put(getBaseUrl() + '/quartz-manager/triggers/mytrigger', config)
|
||||
return this.apiService.post(getBaseUrl() + `${CONTEXT_PATH}/simple-triggers/${config.triggerName}`, config)
|
||||
}
|
||||
|
||||
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