@memberjunction/ng-dashboards 2.106.0 → 2.107.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/Scheduling/components/scheduling-health.component.d.ts +30 -0
  2. package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
  3. package/dist/Scheduling/components/scheduling-health.component.js +316 -0
  4. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
  5. package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
  6. package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
  7. package/dist/Scheduling/components/scheduling-history.component.js +378 -0
  8. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
  9. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +48 -0
  10. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -0
  11. package/dist/Scheduling/components/scheduling-jobs.component.js +372 -0
  12. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -0
  13. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
  14. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
  15. package/dist/Scheduling/components/scheduling-monitoring.component.js +489 -0
  16. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
  17. package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
  18. package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
  19. package/dist/Scheduling/components/scheduling-types.component.js +166 -0
  20. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
  21. package/dist/Scheduling/scheduling-dashboard.component.d.ts +52 -0
  22. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -0
  23. package/dist/Scheduling/scheduling-dashboard.component.js +256 -0
  24. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -0
  25. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +102 -0
  26. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -0
  27. package/dist/Scheduling/services/scheduling-instrumentation.service.js +406 -0
  28. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -0
  29. package/dist/module.d.ts +25 -19
  30. package/dist/module.d.ts.map +1 -1
  31. package/dist/module.js +32 -6
  32. package/dist/module.js.map +1 -1
  33. package/dist/public-api.d.ts +1 -0
  34. package/dist/public-api.d.ts.map +1 -1
  35. package/dist/public-api.js +3 -0
  36. package/dist/public-api.js.map +1 -1
  37. package/package.json +9 -9
@@ -0,0 +1,378 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
3
+ import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../services/scheduling-instrumentation.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@progress/kendo-angular-dropdowns";
8
+ import * as i4 from "@progress/kendo-angular-inputs";
9
+ import * as i5 from "@progress/kendo-angular-buttons";
10
+ const _forTrack0 = ($index, $item) => $item.id;
11
+ function SchedulingHistoryComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelement(0, "i", 14);
13
+ } }
14
+ function SchedulingHistoryComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "div", 10);
16
+ i0.ɵɵelement(1, "i", 15);
17
+ i0.ɵɵelementStart(2, "p");
18
+ i0.ɵɵtext(3, "Loading execution history...");
19
+ i0.ɵɵelementEnd()();
20
+ } }
21
+ function SchedulingHistoryComponent_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
22
+ i0.ɵɵelementStart(0, "div", 18)(1, "div", 23);
23
+ i0.ɵɵelement(2, "div", 24)(3, "div", 25);
24
+ i0.ɵɵelementEnd();
25
+ i0.ɵɵelementStart(4, "div", 26);
26
+ i0.ɵɵtext(5);
27
+ i0.ɵɵpipe(6, "date");
28
+ i0.ɵɵelementEnd()();
29
+ } if (rf & 2) {
30
+ const point_r1 = ctx.$implicit;
31
+ i0.ɵɵadvance(2);
32
+ i0.ɵɵstyleProp("height", point_r1.successes * 5, "px");
33
+ i0.ɵɵproperty("title", "Successes: " + point_r1.successes);
34
+ i0.ɵɵadvance();
35
+ i0.ɵɵstyleProp("height", point_r1.failures * 5, "px");
36
+ i0.ɵɵproperty("title", "Failures: " + point_r1.failures);
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(6, 7, point_r1.timestamp, "short"), " ");
39
+ } }
40
+ function SchedulingHistoryComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelementStart(0, "div", 11)(1, "h3");
42
+ i0.ɵɵelement(2, "i", 16);
43
+ i0.ɵɵtext(3, " Execution Trends");
44
+ i0.ɵɵelementEnd();
45
+ i0.ɵɵelementStart(4, "div", 17);
46
+ i0.ɵɵrepeaterCreate(5, SchedulingHistoryComponent_Conditional_14_For_6_Template, 7, 10, "div", 18, i0.ɵɵrepeaterTrackByIndex);
47
+ i0.ɵɵelementEnd();
48
+ i0.ɵɵelementStart(7, "div", 19)(8, "div", 20);
49
+ i0.ɵɵelement(9, "div", 21);
50
+ i0.ɵɵelementStart(10, "span");
51
+ i0.ɵɵtext(11, "Successful");
52
+ i0.ɵɵelementEnd()();
53
+ i0.ɵɵelementStart(12, "div", 20);
54
+ i0.ɵɵelement(13, "div", 22);
55
+ i0.ɵɵelementStart(14, "span");
56
+ i0.ɵɵtext(15, "Failed");
57
+ i0.ɵɵelementEnd()()()();
58
+ } if (rf & 2) {
59
+ const ctx_r1 = i0.ɵɵnextContext();
60
+ i0.ɵɵadvance(5);
61
+ i0.ɵɵrepeater(ctx_r1.trends);
62
+ } }
63
+ function SchedulingHistoryComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "div", 12);
65
+ i0.ɵɵelement(1, "i", 27);
66
+ i0.ɵɵelementStart(2, "p");
67
+ i0.ɵɵtext(3, "No execution history found");
68
+ i0.ɵɵelementEnd()();
69
+ } }
70
+ function SchedulingHistoryComponent_Conditional_16_For_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "span", 31);
72
+ i0.ɵɵtext(1);
73
+ i0.ɵɵelementEnd();
74
+ } if (rf & 2) {
75
+ const exec_r3 = i0.ɵɵnextContext().$implicit;
76
+ i0.ɵɵproperty("title", exec_r3.errorMessage);
77
+ i0.ɵɵadvance();
78
+ i0.ɵɵtextInterpolate2(" ", exec_r3.errorMessage.substring(0, 50), "", exec_r3.errorMessage.length > 50 ? "..." : "", " ");
79
+ } }
80
+ function SchedulingHistoryComponent_Conditional_16_For_18_Conditional_15_Template(rf, ctx) { if (rf & 1) {
81
+ i0.ɵɵelementStart(0, "span", 32);
82
+ i0.ɵɵtext(1, "-");
83
+ i0.ɵɵelementEnd();
84
+ } }
85
+ function SchedulingHistoryComponent_Conditional_16_For_18_Template(rf, ctx) { if (rf & 1) {
86
+ i0.ɵɵelementStart(0, "tr")(1, "td")(2, "span", 29);
87
+ i0.ɵɵelement(3, "i", 30);
88
+ i0.ɵɵtext(4);
89
+ i0.ɵɵelementEnd()();
90
+ i0.ɵɵelementStart(5, "td");
91
+ i0.ɵɵtext(6);
92
+ i0.ɵɵelementEnd();
93
+ i0.ɵɵelementStart(7, "td");
94
+ i0.ɵɵtext(8);
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(9, "td");
97
+ i0.ɵɵtext(10);
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵelementStart(11, "td");
100
+ i0.ɵɵtext(12);
101
+ i0.ɵɵelementEnd();
102
+ i0.ɵɵelementStart(13, "td");
103
+ i0.ɵɵtemplate(14, SchedulingHistoryComponent_Conditional_16_For_18_Conditional_14_Template, 2, 3, "span", 31)(15, SchedulingHistoryComponent_Conditional_16_For_18_Conditional_15_Template, 2, 0, "span", 32);
104
+ i0.ɵɵelementEnd()();
105
+ } if (rf & 2) {
106
+ const exec_r3 = ctx.$implicit;
107
+ const ctx_r1 = i0.ɵɵnextContext(2);
108
+ i0.ɵɵadvance(2);
109
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusClass(exec_r3.status));
110
+ i0.ɵɵadvance();
111
+ i0.ɵɵproperty("ngClass", ctx_r1.getStatusIcon(exec_r3.status));
112
+ i0.ɵɵadvance();
113
+ i0.ɵɵtextInterpolate1(" ", exec_r3.status, " ");
114
+ i0.ɵɵadvance(2);
115
+ i0.ɵɵtextInterpolate(exec_r3.jobName);
116
+ i0.ɵɵadvance(2);
117
+ i0.ɵɵtextInterpolate(exec_r3.jobType);
118
+ i0.ɵɵadvance(2);
119
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(exec_r3.startedAt));
120
+ i0.ɵɵadvance(2);
121
+ i0.ɵɵtextInterpolate(ctx_r1.formatDuration(exec_r3.duration));
122
+ i0.ɵɵadvance(2);
123
+ i0.ɵɵconditional(exec_r3.errorMessage ? 14 : 15);
124
+ } }
125
+ function SchedulingHistoryComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
126
+ i0.ɵɵelementStart(0, "div", 13)(1, "table", 28)(2, "thead")(3, "tr")(4, "th");
127
+ i0.ɵɵtext(5, "Status");
128
+ i0.ɵɵelementEnd();
129
+ i0.ɵɵelementStart(6, "th");
130
+ i0.ɵɵtext(7, "Job Name");
131
+ i0.ɵɵelementEnd();
132
+ i0.ɵɵelementStart(8, "th");
133
+ i0.ɵɵtext(9, "Type");
134
+ i0.ɵɵelementEnd();
135
+ i0.ɵɵelementStart(10, "th");
136
+ i0.ɵɵtext(11, "Started");
137
+ i0.ɵɵelementEnd();
138
+ i0.ɵɵelementStart(12, "th");
139
+ i0.ɵɵtext(13, "Duration");
140
+ i0.ɵɵelementEnd();
141
+ i0.ɵɵelementStart(14, "th");
142
+ i0.ɵɵtext(15, "Error");
143
+ i0.ɵɵelementEnd()()();
144
+ i0.ɵɵelementStart(16, "tbody");
145
+ i0.ɵɵrepeaterCreate(17, SchedulingHistoryComponent_Conditional_16_For_18_Template, 16, 8, "tr", null, _forTrack0);
146
+ i0.ɵɵelementEnd()()();
147
+ } if (rf & 2) {
148
+ const ctx_r1 = i0.ɵɵnextContext();
149
+ i0.ɵɵadvance(17);
150
+ i0.ɵɵrepeater(ctx_r1.filteredExecutions);
151
+ } }
152
+ export class SchedulingHistoryComponent {
153
+ schedulingService;
154
+ cdr;
155
+ initialState;
156
+ stateChange = new EventEmitter();
157
+ executions = [];
158
+ filteredExecutions = [];
159
+ trends = [];
160
+ isLoading = false;
161
+ dateRange = {
162
+ start: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
163
+ end: new Date()
164
+ };
165
+ searchTerm$ = new BehaviorSubject('');
166
+ statusFilter$ = new BehaviorSubject('all');
167
+ statusOptions = [
168
+ { text: 'All Statuses', value: 'all' },
169
+ { text: 'Running', value: 'Running' },
170
+ { text: 'Completed', value: 'Completed' },
171
+ { text: 'Failed', value: 'Failed' },
172
+ { text: 'Cancelled', value: 'Cancelled' },
173
+ { text: 'Timeout', value: 'Timeout' }
174
+ ];
175
+ timeRangeOptions = [
176
+ { text: 'Last 24 Hours', value: 1 },
177
+ { text: 'Last 7 Days', value: 7 },
178
+ { text: 'Last 30 Days', value: 30 },
179
+ { text: 'Last 90 Days', value: 90 }
180
+ ];
181
+ destroy$ = new Subject();
182
+ constructor(schedulingService, cdr) {
183
+ this.schedulingService = schedulingService;
184
+ this.cdr = cdr;
185
+ }
186
+ ngOnInit() {
187
+ this.loadState();
188
+ this.setupFilters();
189
+ this.loadData();
190
+ }
191
+ ngOnDestroy() {
192
+ this.destroy$.next();
193
+ this.destroy$.complete();
194
+ }
195
+ loadState() {
196
+ if (this.initialState) {
197
+ if (this.initialState.searchTerm)
198
+ this.searchTerm$.next(this.initialState.searchTerm);
199
+ if (this.initialState.statusFilter)
200
+ this.statusFilter$.next(this.initialState.statusFilter);
201
+ if (this.initialState.dateRange) {
202
+ this.dateRange = {
203
+ start: new Date(this.initialState.dateRange.start),
204
+ end: new Date(this.initialState.dateRange.end)
205
+ };
206
+ }
207
+ }
208
+ }
209
+ setupFilters() {
210
+ combineLatest([
211
+ this.searchTerm$.pipe(debounceTime(300), distinctUntilChanged()),
212
+ this.statusFilter$.pipe(distinctUntilChanged())
213
+ ])
214
+ .pipe(takeUntil(this.destroy$))
215
+ .subscribe(() => {
216
+ this.applyFilters();
217
+ this.emitStateChange();
218
+ });
219
+ }
220
+ loadData() {
221
+ this.isLoading = true;
222
+ this.schedulingService.executionHistory$
223
+ .pipe(takeUntil(this.destroy$))
224
+ .subscribe({
225
+ next: (executions) => {
226
+ this.executions = executions;
227
+ this.applyFilters();
228
+ this.isLoading = false;
229
+ this.cdr.markForCheck();
230
+ },
231
+ error: (error) => {
232
+ console.error('Error loading execution history:', error);
233
+ this.isLoading = false;
234
+ this.cdr.markForCheck();
235
+ }
236
+ });
237
+ this.schedulingService.executionTrends$
238
+ .pipe(takeUntil(this.destroy$))
239
+ .subscribe({
240
+ next: (trends) => {
241
+ this.trends = trends;
242
+ this.cdr.markForCheck();
243
+ },
244
+ error: (error) => {
245
+ console.error('Error loading trends:', error);
246
+ this.cdr.markForCheck();
247
+ }
248
+ });
249
+ }
250
+ applyFilters() {
251
+ let filtered = [...this.executions];
252
+ const searchTerm = this.searchTerm$.value.toLowerCase();
253
+ if (searchTerm) {
254
+ filtered = filtered.filter(exec => exec.jobName.toLowerCase().includes(searchTerm) ||
255
+ exec.jobType.toLowerCase().includes(searchTerm) ||
256
+ (exec.errorMessage && exec.errorMessage.toLowerCase().includes(searchTerm)));
257
+ }
258
+ const statusFilter = this.statusFilter$.value;
259
+ if (statusFilter !== 'all') {
260
+ filtered = filtered.filter(exec => exec.status === statusFilter);
261
+ }
262
+ this.filteredExecutions = filtered;
263
+ this.cdr.markForCheck();
264
+ }
265
+ onSearchChange(value) {
266
+ this.searchTerm$.next(value);
267
+ }
268
+ onStatusFilterChange(value) {
269
+ this.statusFilter$.next(value);
270
+ }
271
+ onTimeRangeChange(days) {
272
+ const end = new Date();
273
+ const start = new Date(end.getTime() - days * 24 * 60 * 60 * 1000);
274
+ this.dateRange = { start, end };
275
+ this.schedulingService.setDateRange(start, end);
276
+ this.emitStateChange();
277
+ }
278
+ onRefresh() {
279
+ this.schedulingService.refresh();
280
+ }
281
+ getStatusClass(status) {
282
+ switch (status) {
283
+ case 'Running': return 'status-running';
284
+ case 'Completed': return 'status-success';
285
+ case 'Failed': return 'status-error';
286
+ case 'Cancelled': return 'status-warning';
287
+ case 'Timeout': return 'status-warning';
288
+ default: return 'status-info';
289
+ }
290
+ }
291
+ getStatusIcon(status) {
292
+ switch (status) {
293
+ case 'Running': return 'fa-spinner fa-spin';
294
+ case 'Completed': return 'fa-check-circle';
295
+ case 'Failed': return 'fa-exclamation-circle';
296
+ case 'Cancelled': return 'fa-ban';
297
+ case 'Timeout': return 'fa-clock';
298
+ default: return 'fa-question-circle';
299
+ }
300
+ }
301
+ formatDuration(ms) {
302
+ if (!ms)
303
+ return 'N/A';
304
+ const seconds = Math.floor(ms / 1000);
305
+ if (seconds < 60)
306
+ return `${seconds}s`;
307
+ const minutes = Math.floor(seconds / 60);
308
+ if (minutes < 60)
309
+ return `${minutes}m ${seconds % 60}s`;
310
+ const hours = Math.floor(minutes / 60);
311
+ return `${hours}h ${minutes % 60}m`;
312
+ }
313
+ formatDate(date) {
314
+ return new Date(date).toLocaleString();
315
+ }
316
+ emitStateChange() {
317
+ const state = {
318
+ searchTerm: this.searchTerm$.value,
319
+ statusFilter: this.statusFilter$.value,
320
+ dateRange: this.dateRange
321
+ };
322
+ this.stateChange.emit(state);
323
+ }
324
+ static ɵfac = function SchedulingHistoryComponent_Factory(t) { return new (t || SchedulingHistoryComponent)(i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
325
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingHistoryComponent, selectors: [["app-scheduling-history"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, decls: 17, vars: 16, consts: [[1, "scheduling-history"], [1, "history-header"], [1, "filters-row"], [1, "search-container"], ["placeholder", "Search executions...", 3, "valueChange", "value"], ["kendoTextBoxPrefixTemplate", ""], ["textField", "text", "valueField", "value", 3, "valueChange", "data", "valuePrimitive", "value"], ["kendoButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], [1, "results-count"], [1, "loading-overlay"], [1, "trends-chart-container"], [1, "empty-state"], [1, "execution-list"], [1, "fa-solid", "fa-search"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "fa-solid", "fa-chart-line"], [1, "simple-chart"], [1, "chart-bar-group"], [1, "chart-legend"], [1, "legend-item"], [1, "legend-color", "success"], [1, "legend-color", "error"], [1, "chart-bars"], [1, "chart-bar", "success", 3, "title"], [1, "chart-bar", "error", 3, "title"], [1, "chart-label"], [1, "fa-solid", "fa-inbox"], [1, "execution-table"], [1, "status-badge", 3, "ngClass"], [1, "fa-solid", 3, "ngClass"], [1, "error-message", 3, "title"], [1, "no-error"]], template: function SchedulingHistoryComponent_Template(rf, ctx) { if (rf & 1) {
326
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "kendo-textbox", 4);
327
+ i0.ɵɵlistener("valueChange", function SchedulingHistoryComponent_Template_kendo_textbox_valueChange_4_listener($event) { return ctx.onSearchChange($event); });
328
+ i0.ɵɵtemplate(5, SchedulingHistoryComponent_ng_template_5_Template, 1, 0, "ng-template", 5);
329
+ i0.ɵɵelementEnd()();
330
+ i0.ɵɵelementStart(6, "kendo-dropdownlist", 6);
331
+ i0.ɵɵlistener("valueChange", function SchedulingHistoryComponent_Template_kendo_dropdownlist_valueChange_6_listener($event) { return ctx.onStatusFilterChange($event); });
332
+ i0.ɵɵelementEnd();
333
+ i0.ɵɵelementStart(7, "kendo-dropdownlist", 6);
334
+ i0.ɵɵlistener("valueChange", function SchedulingHistoryComponent_Template_kendo_dropdownlist_valueChange_7_listener($event) { return ctx.onTimeRangeChange($event); });
335
+ i0.ɵɵelementEnd();
336
+ i0.ɵɵelementStart(8, "button", 7);
337
+ i0.ɵɵlistener("click", function SchedulingHistoryComponent_Template_button_click_8_listener() { return ctx.onRefresh(); });
338
+ i0.ɵɵelement(9, "i", 8);
339
+ i0.ɵɵtext(10, " Refresh ");
340
+ i0.ɵɵelementEnd()();
341
+ i0.ɵɵelementStart(11, "div", 9);
342
+ i0.ɵɵtext(12);
343
+ i0.ɵɵelementEnd()();
344
+ i0.ɵɵtemplate(13, SchedulingHistoryComponent_Conditional_13_Template, 4, 0, "div", 10)(14, SchedulingHistoryComponent_Conditional_14_Template, 16, 0, "div", 11)(15, SchedulingHistoryComponent_Conditional_15_Template, 4, 0, "div", 12)(16, SchedulingHistoryComponent_Conditional_16_Template, 19, 0, "div", 13);
345
+ i0.ɵɵelementEnd();
346
+ } if (rf & 2) {
347
+ i0.ɵɵadvance(4);
348
+ i0.ɵɵproperty("value", ctx.searchTerm$.value);
349
+ i0.ɵɵadvance(2);
350
+ i0.ɵɵproperty("data", ctx.statusOptions)("valuePrimitive", true)("value", ctx.statusFilter$.value);
351
+ i0.ɵɵadvance();
352
+ i0.ɵɵproperty("data", ctx.timeRangeOptions)("valuePrimitive", true)("value", 7);
353
+ i0.ɵɵadvance();
354
+ i0.ɵɵproperty("disabled", ctx.isLoading);
355
+ i0.ɵɵadvance();
356
+ i0.ɵɵclassProp("fa-spin", ctx.isLoading);
357
+ i0.ɵɵadvance(3);
358
+ i0.ɵɵtextInterpolate2(" Showing ", ctx.filteredExecutions.length, " of ", ctx.executions.length, " executions ");
359
+ i0.ɵɵadvance();
360
+ i0.ɵɵconditional(ctx.isLoading && ctx.executions.length === 0 ? 13 : -1);
361
+ i0.ɵɵadvance();
362
+ i0.ɵɵconditional(!ctx.isLoading && ctx.trends.length > 0 ? 14 : -1);
363
+ i0.ɵɵadvance();
364
+ i0.ɵɵconditional(!ctx.isLoading && ctx.filteredExecutions.length === 0 ? 15 : -1);
365
+ i0.ɵɵadvance();
366
+ i0.ɵɵconditional(ctx.filteredExecutions.length > 0 ? 16 : -1);
367
+ } }, dependencies: [i2.NgClass, i3.DropDownListComponent, i4.TextBoxComponent, i4.TextBoxPrefixTemplateDirective, i5.ButtonComponent, i2.DatePipe], styles: [".scheduling-history[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.history-header[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.filters-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: center;\n\n .search-container {\n flex: 1;\n min-width: 250px;\n }\n}\n\n.results-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n}\n\n.loading-overlay[_ngcontent-%COMP%], \n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px;\n color: #6c757d;\n\n i {\n margin-bottom: 16px;\n font-size: 48px;\n opacity: 0.3;\n }\n\n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.trends-chart-container[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n\n h3 {\n margin: 0 0 20px 0;\n font-size: 16px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 8px;\n\n i {\n color: #0078d4;\n }\n }\n}\n\n.simple-chart[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: flex-end;\n height: 200px;\n padding: 20px 0;\n border-bottom: 2px solid #dee2e6;\n overflow-x: auto;\n}\n\n.chart-bar-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n min-width: 60px;\n}\n\n.chart-bars[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n align-items: flex-end;\n height: 150px;\n}\n\n.chart-bar[_ngcontent-%COMP%] {\n width: 20px;\n min-height: 2px;\n border-radius: 4px 4px 0 0;\n transition: all 0.3s;\n\n &.success {\n background: linear-gradient(180deg, #86d16f 0%, #107c10 100%);\n }\n\n &.error {\n background: linear-gradient(180deg, #f8a5a8 0%, #d13438 100%);\n }\n\n &:hover {\n opacity: 0.8;\n }\n}\n\n.chart-label[_ngcontent-%COMP%] {\n font-size: 10px;\n color: #6c757d;\n writing-mode: vertical-rl;\n text-orientation: mixed;\n white-space: nowrap;\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-top: 16px;\n justify-content: center;\n}\n\n.legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n\n .legend-color {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n\n &.success {\n background: #107c10;\n }\n\n &.error {\n background: #d13438;\n }\n }\n}\n\n.execution-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n overflow: auto;\n flex: 1;\n}\n\n.execution-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n\n thead {\n background: #f8f9fa;\n position: sticky;\n top: 0;\n z-index: 1;\n\n th {\n padding: 12px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n }\n }\n\n tbody {\n tr {\n border-bottom: 1px solid #dee2e6;\n transition: background 0.2s;\n\n &:hover {\n background: #f8f9fa;\n }\n\n td {\n padding: 12px;\n font-size: 13px;\n }\n }\n }\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n\n &.status-running {\n background: #cfe2ff;\n color: #0d6efd;\n }\n\n &.status-success {\n background: #d1e7dd;\n color: #0f5132;\n }\n\n &.status-error {\n background: #f8d7da;\n color: #842029;\n }\n\n &.status-warning {\n background: #fff3cd;\n color: #664d03;\n }\n\n &.status-info {\n background: #cff4fc;\n color: #055160;\n }\n}\n\n.error-message[_ngcontent-%COMP%] {\n color: #d13438;\n font-size: 12px;\n font-family: 'Courier New', monospace;\n}\n\n.no-error[_ngcontent-%COMP%] {\n color: #6c757d;\n}"] });
368
+ }
369
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingHistoryComponent, [{
370
+ type: Component,
371
+ args: [{ selector: 'app-scheduling-history', template: "<div class=\"scheduling-history\">\n <div class=\"history-header\">\n <div class=\"filters-row\">\n <div class=\"search-container\">\n <kendo-textbox\n placeholder=\"Search executions...\"\n [value]=\"searchTerm$.value\"\n (valueChange)=\"onSearchChange($event)\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n\n <kendo-dropdownlist\n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [value]=\"statusFilter$.value\"\n (valueChange)=\"onStatusFilterChange($event)\">\n </kendo-dropdownlist>\n\n <kendo-dropdownlist\n [data]=\"timeRangeOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n [value]=\"7\"\n (valueChange)=\"onTimeRangeChange($event)\">\n </kendo-dropdownlist>\n\n <button kendoButton (click)=\"onRefresh()\" [disabled]=\"isLoading\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n\n <div class=\"results-count\">\n Showing {{ filteredExecutions.length }} of {{ executions.length }} executions\n </div>\n </div>\n\n @if (isLoading && executions.length === 0) {\n <div class=\"loading-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n <p>Loading execution history...</p>\n </div>\n }\n\n @if (!isLoading && trends.length > 0) {\n <div class=\"trends-chart-container\">\n <h3><i class=\"fa-solid fa-chart-line\"></i> Execution Trends</h3>\n <div class=\"simple-chart\">\n @for (point of trends; track $index) {\n <div class=\"chart-bar-group\">\n <div class=\"chart-bars\">\n <div\n class=\"chart-bar success\"\n [style.height.px]=\"point.successes * 5\"\n [title]=\"'Successes: ' + point.successes\">\n </div>\n <div\n class=\"chart-bar error\"\n [style.height.px]=\"point.failures * 5\"\n [title]=\"'Failures: ' + point.failures\">\n </div>\n </div>\n <div class=\"chart-label\">\n {{ point.timestamp | date: 'short' }}\n </div>\n </div>\n }\n </div>\n <div class=\"chart-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color success\"></div>\n <span>Successful</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color error\"></div>\n <span>Failed</span>\n </div>\n </div>\n </div>\n }\n\n @if (!isLoading && filteredExecutions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No execution history found</p>\n </div>\n }\n\n @if (filteredExecutions.length > 0) {\n <div class=\"execution-list\">\n <table class=\"execution-table\">\n <thead>\n <tr>\n <th>Status</th>\n <th>Job Name</th>\n <th>Type</th>\n <th>Started</th>\n <th>Duration</th>\n <th>Error</th>\n </tr>\n </thead>\n <tbody>\n @for (exec of filteredExecutions; track exec.id) {\n <tr>\n <td>\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(exec.status)\">\n <i class=\"fa-solid\" [ngClass]=\"getStatusIcon(exec.status)\"></i>\n {{ exec.status }}\n </span>\n </td>\n <td>{{ exec.jobName }}</td>\n <td>{{ exec.jobType }}</td>\n <td>{{ formatDate(exec.startedAt) }}</td>\n <td>{{ formatDuration(exec.duration) }}</td>\n <td>\n @if (exec.errorMessage) {\n <span class=\"error-message\" [title]=\"exec.errorMessage\">\n {{ exec.errorMessage.substring(0, 50) }}{{ exec.errorMessage.length > 50 ? '...' : '' }}\n </span>\n } @else {\n <span class=\"no-error\">-</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n</div>\n", styles: [".scheduling-history {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.history-header {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.filters-row {\n display: flex;\n gap: 12px;\n align-items: center;\n\n .search-container {\n flex: 1;\n min-width: 250px;\n }\n}\n\n.results-count {\n font-size: 13px;\n color: #6c757d;\n}\n\n.loading-overlay,\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px;\n color: #6c757d;\n\n i {\n margin-bottom: 16px;\n font-size: 48px;\n opacity: 0.3;\n }\n\n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.trends-chart-container {\n background: white;\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n\n h3 {\n margin: 0 0 20px 0;\n font-size: 16px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 8px;\n\n i {\n color: #0078d4;\n }\n }\n}\n\n.simple-chart {\n display: flex;\n gap: 8px;\n align-items: flex-end;\n height: 200px;\n padding: 20px 0;\n border-bottom: 2px solid #dee2e6;\n overflow-x: auto;\n}\n\n.chart-bar-group {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n min-width: 60px;\n}\n\n.chart-bars {\n display: flex;\n gap: 4px;\n align-items: flex-end;\n height: 150px;\n}\n\n.chart-bar {\n width: 20px;\n min-height: 2px;\n border-radius: 4px 4px 0 0;\n transition: all 0.3s;\n\n &.success {\n background: linear-gradient(180deg, #86d16f 0%, #107c10 100%);\n }\n\n &.error {\n background: linear-gradient(180deg, #f8a5a8 0%, #d13438 100%);\n }\n\n &:hover {\n opacity: 0.8;\n }\n}\n\n.chart-label {\n font-size: 10px;\n color: #6c757d;\n writing-mode: vertical-rl;\n text-orientation: mixed;\n white-space: nowrap;\n}\n\n.chart-legend {\n display: flex;\n gap: 20px;\n margin-top: 16px;\n justify-content: center;\n}\n\n.legend-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n\n .legend-color {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n\n &.success {\n background: #107c10;\n }\n\n &.error {\n background: #d13438;\n }\n }\n}\n\n.execution-list {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n overflow: auto;\n flex: 1;\n}\n\n.execution-table {\n width: 100%;\n border-collapse: collapse;\n\n thead {\n background: #f8f9fa;\n position: sticky;\n top: 0;\n z-index: 1;\n\n th {\n padding: 12px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n }\n }\n\n tbody {\n tr {\n border-bottom: 1px solid #dee2e6;\n transition: background 0.2s;\n\n &:hover {\n background: #f8f9fa;\n }\n\n td {\n padding: 12px;\n font-size: 13px;\n }\n }\n }\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n\n &.status-running {\n background: #cfe2ff;\n color: #0d6efd;\n }\n\n &.status-success {\n background: #d1e7dd;\n color: #0f5132;\n }\n\n &.status-error {\n background: #f8d7da;\n color: #842029;\n }\n\n &.status-warning {\n background: #fff3cd;\n color: #664d03;\n }\n\n &.status-info {\n background: #cff4fc;\n color: #055160;\n }\n}\n\n.error-message {\n color: #d13438;\n font-size: 12px;\n font-family: 'Courier New', monospace;\n}\n\n.no-error {\n color: #6c757d;\n}\n"] }]
372
+ }], () => [{ type: i1.SchedulingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
373
+ type: Input
374
+ }], stateChange: [{
375
+ type: Output
376
+ }] }); })();
377
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingHistoryComponent, { className: "SchedulingHistoryComponent", filePath: "src/Scheduling/components/scheduling-history.component.ts", lineNumber: 11 }); })();
378
+ //# sourceMappingURL=scheduling-history.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-history.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-history.component.ts","../../../src/Scheduling/components/scheduling-history.component.html"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { SchedulingInstrumentationService, JobStatistics } from '../services/scheduling-instrumentation.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class SchedulingJobsComponent implements OnInit, OnDestroy {
6
+ private schedulingService;
7
+ private cdr;
8
+ initialState: any;
9
+ stateChange: EventEmitter<any>;
10
+ jobs: JobStatistics[];
11
+ filteredJobs: JobStatistics[];
12
+ isLoading: boolean;
13
+ searchTerm$: BehaviorSubject<string>;
14
+ statusFilter$: BehaviorSubject<string>;
15
+ typeFilter$: BehaviorSubject<string>;
16
+ statusOptions: {
17
+ text: string;
18
+ value: string;
19
+ }[];
20
+ typeOptions: Array<{
21
+ text: string;
22
+ value: string;
23
+ }>;
24
+ private destroy$;
25
+ constructor(schedulingService: SchedulingInstrumentationService, cdr: ChangeDetectorRef);
26
+ ngOnInit(): void;
27
+ ngOnDestroy(): void;
28
+ private loadState;
29
+ private setupFilters;
30
+ private loadData;
31
+ private updateTypeOptions;
32
+ private applyFilters;
33
+ onSearchChange(value: string): void;
34
+ onStatusFilterChange(value: string): void;
35
+ onTypeFilterChange(value: string): void;
36
+ onRefresh(): void;
37
+ getStatusColor(status: string): 'base' | 'info' | 'success' | 'warning' | 'error' | 'none';
38
+ getStatusIcon(status: string): string;
39
+ formatPercentage(value: number): string;
40
+ formatDate(date?: Date): string;
41
+ onPauseJob(jobId: string): Promise<void>;
42
+ onResumeJob(jobId: string): Promise<void>;
43
+ onExecuteJob(jobId: string): Promise<void>;
44
+ private emitStateChange;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<SchedulingJobsComponent, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<SchedulingJobsComponent, "app-scheduling-jobs", never, { "initialState": { "alias": "initialState"; "required": false; }; }, { "stateChange": "stateChange"; }, never, never, false, never>;
47
+ }
48
+ //# sourceMappingURL=scheduling-jobs.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-jobs.component.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-jobs.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAiB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAW,eAAe,EAAiB,MAAM,MAAM,CAAC;AAE/D,OAAO,EAAE,gCAAgC,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;;AAEjH,qBAKa,uBAAwB,YAAW,MAAM,EAAE,SAAS;IA4B7D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IA5BJ,YAAY,EAAE,GAAG,CAAC;IACjB,WAAW,oBAA2B;IAEzC,IAAI,EAAE,aAAa,EAAE,CAAM;IAC3B,YAAY,EAAE,aAAa,EAAE,CAAM;IACnC,SAAS,UAAS;IAElB,WAAW,0BAAmC;IAC9C,aAAa,0BAAsC;IACnD,WAAW,0BAAsC;IAEjD,aAAa;;;QAOlB;IAEK,WAAW,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAEtD;IAEF,OAAO,CAAC,QAAQ,CAAuB;gBAG7B,iBAAiB,EAAE,gCAAgC,EACnD,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,YAAY;IAyBb,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,SAAS,IAAI,IAAI;IAIjB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM;IAW1F,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWrC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM;IAKzB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,OAAO,CAAC,eAAe;yCA1LZ,uBAAuB;2CAAvB,uBAAuB;CAkMnC"}