]> git.proxmox.com Git - pve-manager.git/commitdiff
ui: dc/Backup: add schedule simulator button
authorDominik Csapak <d.csapak@proxmox.com>
Thu, 11 Nov 2021 11:07:08 +0000 (12:07 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 11 Nov 2021 17:35:52 +0000 (18:35 +0100)
so that a user can simply simulate the schedule

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
www/manager6/Makefile
www/manager6/dc/Backup.js
www/manager6/window/ScheduleSimulator.js [new file with mode: 0644]

index e8323b69dd386136a4b07fb81b8d0ebd07a0d676..e6e01bd1ebd3dc150d47880395a796dafb06eb77 100644 (file)
@@ -112,6 +112,7 @@ JSSRC=                                                      \
        window/StartupEdit.js                           \
        window/DownloadUrlToStorage.js                  \
        window/UploadToStorage.js                       \
+       window/ScheduleSimulator.js                     \
        window/Wizard.js                                \
        ha/Fencing.js                                   \
        ha/GroupEdit.js                                 \
index c25a127e27405bfa42d4187517c8d251ca1b1453..316008178d69464b41f723ceee0c22d3c9968293 100644 (file)
@@ -701,6 +701,21 @@ Ext.define('PVE.dc.BackupView', {
                edit_btn,
                detail_btn,
                '-',
+               {
+                   xtype: 'proxmoxButton',
+                   selModel: null,
+                   text: gettext('Simulate Schedule'),
+                   handler: () => {
+                       let record = sm.getSelection()[0];
+                       let schedule;
+                       if (record) {
+                           schedule = record.data.schedule;
+                       }
+                       Ext.create('PVE.window.ScheduleSimulator', {
+                           schedule,
+                       }).show();
+                   },
+               },
                run_btn,
                '->',
                noBackupJobWarning,
diff --git a/www/manager6/window/ScheduleSimulator.js b/www/manager6/window/ScheduleSimulator.js
new file mode 100644 (file)
index 0000000..14b3210
--- /dev/null
@@ -0,0 +1,118 @@
+Ext.define('PVE.window.ScheduleSimulator', {
+    extend: 'Ext.window.Window',
+
+    title: gettext('Simulate Schedule'),
+
+    controller: {
+       xclass: 'Ext.app.ViewController',
+       close: function() { this.getView().close(); },
+       simulate: function() {
+           let me = this;
+           let schedule = me.lookup('schedule').getValue();
+           if (!schedule) {
+               return;
+           }
+           let number = me.lookup('number').getValue() || 10;
+           Proxmox.Utils.API2Request({
+               url: '/cluster/jobs/schedule-analyze',
+               method: 'GET',
+               params: {
+                   schedule,
+                   number,
+               },
+               failure: function(response, opts) {
+                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+               },
+               success: function(response) {
+                   let schedules = response.result.data;
+                   me.lookup('grid').getStore().setData(schedules);
+               },
+           });
+       },
+
+       scheduleChanged: function(field, value) {
+           this.lookup('simulateBtn').setDisabled(!value);
+       },
+
+       renderTimestamp: function(value) {
+           let date = new Date(value*1000);
+           return date.toLocaleString();
+       },
+
+       init: function(view) {
+           let me = this;
+           if (view.schedule) {
+               me.lookup('schedule').setValue(view.schedule);
+           }
+       },
+    },
+
+    bodyPadding: 10,
+    modal: true,
+    resizable: false,
+    width: 600,
+
+    layout: 'fit',
+
+    items: [
+       {
+           xtype: 'inputpanel',
+           column1: [
+               {
+                   xtype: 'pveCalendarEvent',
+                   reference: 'schedule',
+                   fieldLabel: gettext('Schedule'),
+                   listeners: {
+                       change: 'scheduleChanged',
+                   },
+               },
+               {
+                   xtype: 'proxmoxintegerfield',
+                   minValue: 1,
+                   maxValue: 100,
+                   value: 10,
+                   reference: 'number',
+                   fieldLabel: gettext('Number'),
+               },
+               {
+                   xtype: 'button',
+                   reference: 'simulateBtn',
+                   text: gettext('Simulate'),
+                   handler: 'simulate',
+                   align: 'right',
+                   disabled: true,
+               },
+           ],
+
+           column2: [
+               {
+                   xtype: 'grid',
+                   reference: 'grid',
+                   emptyText: Proxmox.Utils.NoneText,
+                   scrollable: true,
+                   height: 300,
+                   columns: [
+                       {
+                           text: gettext('Local Time'),
+                           renderer: 'renderTimestamp',
+                           dataIndex: 'timestamp',
+                           flex: 1,
+                       },
+                   ],
+                   store: {
+                       fields: ['timestamp'],
+                       data: [],
+                       sorter: 'timestamp',
+                   },
+               },
+           ],
+       },
+    ],
+
+    buttons: [
+       {
+           text: gettext('OK'),
+           handler: 'close',
+       },
+    ],
+});