[pbs-devel] [PATCH proxmox-backup 5/5] ui: tape/DriveStatus: use the drive state to determine a status-load

Dominik Csapak d.csapak at proxmox.com
Tue Mar 2 12:19:40 CET 2021


since the status api call blocks the drive, it only makes sense to do
when the drive is idle.

so do not reload on activate, but when the drive changes the first
time from busy to idle

also disable the reload button when the drive is busy

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 www/tape/DriveStatus.js | 42 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 38 insertions(+), 4 deletions(-)

diff --git a/www/tape/DriveStatus.js b/www/tape/DriveStatus.js
index c9e9ea02..481f8b0d 100644
--- a/www/tape/DriveStatus.js
+++ b/www/tape/DriveStatus.js
@@ -18,6 +18,8 @@ Ext.define('PBS.TapeManagement.DriveStatus', {
     viewModel: {
 	data: {
 	    online: false,
+	    busy: true,
+	    loaded: false,
 	},
     },
 
@@ -38,6 +40,33 @@ Ext.define('PBS.TapeManagement.DriveStatus', {
 	    vm.set('online', online);
 	},
 
+	onStateLoad: function(store) {
+	    let me = this;
+	    let view = me.getView();
+	    let vm = me.getViewModel();
+	    let driveRecord = store.findRecord('name', view.drive, 0, false, true, true);
+	    let busy = !!driveRecord.data.state;
+	    vm.set('busy', busy);
+	    let statusgrid = me.lookup('statusgrid');
+	    if (!vm.get('loaded')) {
+		if (busy) {
+		    // have to use a timeout so that the component can be rendered first
+		    // otherwise the 'mask' call errors out
+		    setTimeout(function() {
+			statusgrid.mask(gettext('Drive is busy'));
+		    }, 10);
+		} else {
+		    // have to use a timeout so that the component can be rendered first
+		    // otherwise the 'mask' call errors out
+		    setTimeout(function() {
+			statusgrid.unmask();
+		    }, 10);
+		    me.reload();
+		    vm.set('loaded', true);
+		}
+	    }
+	},
+
 	labelMedia: function() {
 	    let me = this;
 	    Ext.create('PBS.TapeManagement.LabelMediaWindow', {
@@ -84,18 +113,23 @@ Ext.define('PBS.TapeManagement.DriveStatus', {
 	init: function(view) {
 	    let me = this;
 	    me.mon(me.lookup('statusgrid').getStore().rstore, 'load', 'onLoad');
+	    let tapeStore = Ext.ComponentQuery.query('navigationtree')[0].tapestore;
+	    me.mon(tapeStore, 'load', 'onStateLoad');
+	    if (tapeStore.isLoaded()) {
+		me.onStateLoad(tapeStore);
+	    }
 	},
     },
 
-    listeners: {
-	activate: 'reload',
-    },
-
     tbar: [
 	{
 	    xtype: 'proxmoxButton',
 	    handler: 'reload',
 	    text: gettext('Reload'),
+	    disabled: true,
+	    bind: {
+		disabled: '{busy}',
+	    },
 	},
 	'-',
 	{
-- 
2.20.1






More information about the pbs-devel mailing list