]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/ScheduleSimulator.js
f124b0e9bca400afbc8729766592eee940211ce1
[pve-manager.git] / www / manager6 / window / ScheduleSimulator.js
1 Ext.define('PVE.window.ScheduleSimulator', {
2 extend: 'Ext.window.Window',
3
4 title: gettext('Job Schedule Simulator'),
5
6 controller: {
7 xclass: 'Ext.app.ViewController',
8 close: function() {
9 this.getView().close();
10 },
11 simulate: function() {
12 let me = this;
13 let schedule = me.lookup('schedule').getValue();
14 if (!schedule) {
15 return;
16 }
17 let iterations = me.lookup('iterations').getValue() || 10;
18 Proxmox.Utils.API2Request({
19 url: '/cluster/jobs/schedule-analyze',
20 method: 'GET',
21 params: {
22 schedule,
23 iterations,
24 },
25 failure: response => Ext.Msg.alert(gettext('Error'), response.htmlStatus),
26 success: function(response) {
27 let schedules = response.result.data;
28 me.lookup('grid').getStore().setData(schedules);
29 },
30 });
31 },
32
33 scheduleChanged: function(field, value) {
34 this.lookup('simulateBtn').setDisabled(!value);
35 },
36
37 renderDate: function(value) {
38 let date = new Date(value*1000);
39 return date.toLocaleDateString();
40 },
41
42 renderTime: function(value) {
43 let date = new Date(value*1000);
44 return date.toLocaleTimeString();
45 },
46
47 init: function(view) {
48 let me = this;
49 if (view.schedule) {
50 me.lookup('schedule').setValue(view.schedule);
51 }
52 },
53 },
54
55 bodyPadding: 10,
56 modal: true,
57 resizable: false,
58 width: 600,
59
60 layout: 'fit',
61
62 items: [
63 {
64 xtype: 'inputpanel',
65 column1: [
66 {
67 xtype: 'pveCalendarEvent',
68 reference: 'schedule',
69 fieldLabel: gettext('Schedule'),
70 listeners: {
71 change: 'scheduleChanged',
72 },
73 },
74 {
75 xtype: 'proxmoxintegerfield',
76 reference: 'iterations',
77 fieldLabel: gettext('Iterations'),
78 minValue: 1,
79 maxValue: 100,
80 value: 10,
81 },
82 {
83 xtype: 'container',
84 layout: 'hbox',
85 items: [
86 {
87 xtype: 'box',
88 flex: 1,
89 },
90 {
91 xtype: 'button',
92 reference: 'simulateBtn',
93 text: gettext('Simulate'),
94 handler: 'simulate',
95 disabled: true,
96 },
97 ],
98 },
99 ],
100
101 column2: [
102 {
103 xtype: 'grid',
104 reference: 'grid',
105 emptyText: Proxmox.Utils.NoneText,
106 scrollable: true,
107 height: 300,
108 columns: [
109 {
110 text: gettext('Date'),
111 renderer: 'renderDate',
112 dataIndex: 'timestamp',
113 flex: 1,
114 },
115 {
116 text: gettext('Time'),
117 renderer: 'renderTime',
118 dataIndex: 'timestamp',
119 align: 'right',
120 flex: 1,
121 },
122 ],
123 store: {
124 fields: ['timestamp'],
125 data: [],
126 sorter: 'timestamp',
127 },
128 },
129 ],
130 },
131 ],
132
133 buttons: [
134 {
135 text: gettext('Done'),
136 handler: 'close',
137 },
138 ],
139 });