]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/ScheduleSimulator.js
ui: guest import: add value-dependent warning for live-import
[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 viewModel: {
7 data: {
8 simulatedOnce: false,
9 },
10 formulas: {
11 gridEmptyText: get => get('simulatedOnce') ? Proxmox.Utils.NoneText : gettext('No simulation done'),
12 },
13 },
14
15 controller: {
16 xclass: 'Ext.app.ViewController',
17 close: function() {
18 this.getView().close();
19 },
20 simulate: function() {
21 let me = this;
22 let schedule = me.lookup('schedule').getValue();
23 if (!schedule) {
24 return;
25 }
26 let iterations = me.lookup('iterations').getValue() || 10;
27 Proxmox.Utils.API2Request({
28 url: '/cluster/jobs/schedule-analyze',
29 method: 'GET',
30 params: {
31 schedule,
32 iterations,
33 },
34 failure: response => {
35 me.getViewModel().set('simulatedOnce', true);
36 me.lookup('grid').getStore().setData([]);
37 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
38 },
39 success: function(response) {
40 let schedules = response.result.data;
41 me.lookup('grid').getStore().setData(schedules);
42 me.getViewModel().set('simulatedOnce', true);
43 },
44 });
45 },
46
47 scheduleChanged: function(field, value) {
48 this.lookup('simulateBtn').setDisabled(!value);
49 },
50
51 renderDate: function(value) {
52 let date = new Date(value*1000);
53 return date.toLocaleDateString();
54 },
55
56 renderTime: function(value) {
57 let date = new Date(value*1000);
58 return date.toLocaleTimeString();
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',
90 reference: 'iterations',
91 fieldLabel: gettext('Iterations'),
92 minValue: 1,
93 maxValue: 100,
94 value: 10,
95 },
96 {
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 ],
112 },
113 ],
114
115 column2: [
116 {
117 xtype: 'grid',
118 reference: 'grid',
119 bind: {
120 emptyText: '{gridEmptyText}',
121 },
122 scrollable: true,
123 height: 300,
124 columns: [
125 {
126 text: gettext('Date'),
127 renderer: 'renderDate',
128 dataIndex: 'timestamp',
129 flex: 1,
130 },
131 {
132 text: gettext('Time'),
133 renderer: 'renderTime',
134 dataIndex: 'timestamp',
135 align: 'right',
136 flex: 1,
137 },
138 ],
139 store: {
140 fields: ['timestamp'],
141 data: [],
142 sorter: 'timestamp',
143 },
144 },
145 ],
146 },
147 ],
148
149 buttons: [
150 {
151 text: gettext('Done'),
152 handler: 'close',
153 },
154 ],
155 });