]> git.proxmox.com Git - proxmox-backup.git/commitdiff
ui: tape/BackupJobs: add CRUD functions
authorDominik Csapak <d.csapak@proxmox.com>
Tue, 23 Feb 2021 10:58:01 +0000 (11:58 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 23 Feb 2021 12:18:10 +0000 (13:18 +0100)
similar to the other jobs grids (add/edit/remove etc.)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
www/Makefile
www/tape/BackupJobs.js
www/tape/window/TapeBackupJob.js [new file with mode: 0644]

index 9f9b46aad913a5d89370809162112d916765e6d6..11858f98b444793bd8cb1df8dbed481a7cbabd59 100644 (file)
@@ -23,6 +23,7 @@ TAPE_UI_FILES=                                                \
        tape/window/LabelMedia.js                       \
        tape/window/PoolEdit.js                         \
        tape/window/TapeBackup.js                       \
+       tape/window/TapeBackupJob.js                    \
        tape/window/TapeRestore.js                      \
        tape/BackupOverview.js                          \
        tape/ChangerConfig.js                           \
index 7c23864f9b5c66463209384e68879d8b253043f2..2532fb389a9c4ca736800b709d65b8106435aeaa 100644 (file)
@@ -34,6 +34,75 @@ Ext.define('PBS.config.TapeBackupJobView', {
     controller: {
        xclass: 'Ext.app.ViewController',
 
+       addJob: function() {
+           let me = this;
+           Ext.create('PBS.TapeManagement.BackupJobEdit', {
+               autoShow: true,
+               listeners: {
+                   destroy: function() {
+                       me.reload();
+                   },
+               },
+           }).show();
+       },
+
+       editJob: function() {
+           let me = this;
+           let view = me.getView();
+           let selection = view.getSelection();
+           if (!selection || selection.length < 1) {
+               return;
+           }
+
+           Ext.create('PBS.TapeManagement.BackupJobEdit', {
+               id: selection[0].data.id,
+               autoShow: true,
+               listeners: {
+                   destroy: function() {
+                       me.reload();
+                   },
+               },
+           }).show();
+       },
+
+       openTaskLog: function() {
+           let me = this;
+           let view = me.getView();
+           let selection = view.getSelection();
+           if (selection.length < 1) return;
+
+           let upid = selection[0].data['last-run-upid'];
+           if (!upid) return;
+
+           Ext.create('Proxmox.window.TaskViewer', {
+               upid,
+           }).show();
+       },
+
+       runJob: function() {
+           let me = this;
+           let view = me.getView();
+           let selection = view.getSelection();
+           if (selection.length < 1) return;
+
+           let id = selection[0].data.id;
+           Proxmox.Utils.API2Request({
+               method: 'POST',
+               url: `/tape/backup/${id}`,
+               success: function(response, opt) {
+                   Ext.create('Proxmox.window.TaskViewer', {
+                       upid: response.result.data,
+                       taskDone: function(success) {
+                           me.reload();
+                       },
+                   }).show();
+               },
+               failure: function(response, opt) {
+                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+               },
+           });
+       },
+
        startStore: function() { this.getView().getStore().rstore.startUpdate(); },
 
        stopStore: function() { this.getView().getStore().rstore.stopUpdate(); },
@@ -48,7 +117,7 @@ Ext.define('PBS.config.TapeBackupJobView', {
     listeners: {
        activate: 'startStore',
        deactivate: 'stopStore',
-       //itemdblclick: 'editSyncJob',
+       itemdblclick: 'editJob',
     },
 
     store: {
@@ -68,6 +137,41 @@ Ext.define('PBS.config.TapeBackupJobView', {
        trackOver: false,
     },
 
+    tbar: [
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Add'),
+           selModel: false,
+           handler: 'addJob',
+       },
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Edit'),
+           handler: 'editJob',
+           disabled: true,
+       },
+       {
+           xtype: 'proxmoxStdRemoveButton',
+           baseurl: '/config/tape-backup-job/',
+           confirmMsg: gettext('Remove entry?'),
+           callback: 'reload',
+       },
+       '-',
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Show Log'),
+           handler: 'openTaskLog',
+           enableFn: (rec) => !!rec.data['last-run-upid'],
+           disabled: true,
+       },
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Run now'),
+           handler: 'runJob',
+           disabled: true,
+       },
+    ],
+
     columns: [
        {
            header: gettext('Job ID'),
diff --git a/www/tape/window/TapeBackupJob.js b/www/tape/window/TapeBackupJob.js
new file mode 100644 (file)
index 0000000..9902a45
--- /dev/null
@@ -0,0 +1,82 @@
+Ext.define('PBS.TapeManagement.BackupJobEdit', {
+    extend: 'Proxmox.window.Edit',
+    alias: 'widget.pbsTapeBackupJobEdit',
+    mixins: ['Proxmox.Mixin.CBind'],
+
+    userid: undefined,
+
+    isAdd: true,
+
+    subject: gettext('Tape Backup Job'),
+
+    fieldDefaults: { labelWidth: 120 },
+
+    cbindData: function(initialConfig) {
+       let me = this;
+
+       let baseurl = '/api2/extjs/config/tape-backup-job';
+       let id = initialConfig.id;
+
+       me.isCreate = !id;
+       me.url = id ? `${baseurl}/${id}` : baseurl;
+       me.method = id ? 'PUT' : 'POST';
+       me.autoLoad = !!id;
+       me.scheduleValue = id ? null : 'daily';
+       me.authid = id ? null : Proxmox.UserName;
+       me.editDatastore = me.datastore === undefined && me.isCreate;
+       return { };
+    },
+
+    items: {
+       xtype: 'inputpanel',
+       onGetValues: function(values) {
+           let me = this;
+
+           if (!values.id && me.up('pbsTapeBackupJobEdit').isCreate) {
+               values.id = 's-' + Ext.data.identifier.Uuid.Global.generate().slice(0, 13);
+           }
+           return values;
+       },
+       column1: [
+           {
+               xtype: 'pbsDataStoreSelector',
+               fieldLabel: gettext('Local Datastore'),
+               name: 'store',
+           },
+           {
+               xtype: 'pbsMediaPoolSelector',
+               fieldLabel: gettext('Media Pool'),
+               name: 'pool',
+           },
+           {
+               xtype: 'pbsDriveSelector',
+               fieldLabel: gettext('Drive'),
+               name: 'drive',
+           },
+       ],
+
+       column2: [
+           {
+               fieldLabel: gettext('Schedule'),
+               xtype: 'pbsCalendarEvent',
+               name: 'schedule',
+               emptyText: gettext('none (disabled)'),
+               cbind: {
+                   deleteEmpty: '{!isCreate}',
+                   value: '{scheduleValue}',
+               },
+           },
+       ],
+
+       columnB: [
+           {
+               fieldLabel: gettext('Comment'),
+               xtype: 'proxmoxtextfield',
+               name: 'comment',
+               cbind: {
+                   deleteEmpty: '{!isCreate}',
+               },
+           },
+       ],
+    },
+});