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