From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 20D311FF173 for ; Mon, 25 Nov 2024 14:00:40 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 12FDC12FD5; Mon, 25 Nov 2024 14:00:39 +0100 (CET) Message-ID: <417cbdb8-90c0-4004-ab9e-e3e610485242@proxmox.com> Date: Mon, 25 Nov 2024 14:00:04 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: Proxmox Backup Server development discussion , Hannes Laimer References: <20241122144713.299130-1-h.laimer@proxmox.com> <20241122144713.299130-16-h.laimer@proxmox.com> Content-Language: en-US From: Dominik Csapak In-Reply-To: <20241122144713.299130-16-h.laimer@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.014 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox-backup v14 15/26] ui: add (un)mount button to summary X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" this patch removes the 'connection summary' from the overview, because... On 11/22/24 15:47, Hannes Laimer wrote: > And only try to load datastore information if the datastore is > available. > > Signed-off-by: Hannes Laimer > --- > changes since v13: > * stop statusStore update on first failed request, start again on mount > > www/datastore/Summary.js | 94 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 92 insertions(+), 2 deletions(-) > > diff --git a/www/datastore/Summary.js b/www/datastore/Summary.js > index a932b4e01..2d79a7951 100644 > --- a/www/datastore/Summary.js > +++ b/www/datastore/Summary.js > @@ -309,7 +309,84 @@ Ext.define('PBS.DataStoreSummary', { > model: 'pve-rrd-datastore', > }); > > - me.callParent(); > + me.statusStore = Ext.create('Proxmox.data.ObjectStore', { > + url: `/api2/json/admin/datastore/${me.datastore}/status`, > + interval: 1000, > + }); > + > + let unmountBtn = Ext.create('Ext.Button', { > + text: gettext('Unmount'), > + hidden: true, > + handler: () => { > + Proxmox.Utils.API2Request({ > + url: `/admin/datastore/${me.datastore}/unmount`, > + method: 'POST', > + failure: function(response) { > + Ext.Msg.alert(gettext('Error'), response.htmlStatus); > + }, > + success: function(response, options) { > + Ext.create('Proxmox.window.TaskViewer', { > + upid: response.result.data, > + }).show(); > + }, > + }); > + }, > + }); > + > + let mountBtn = Ext.create('Ext.Button', { > + text: gettext('Mount'), > + hidden: true, > + handler: () => { > + Proxmox.Utils.API2Request({ > + url: `/admin/datastore/${me.datastore}/mount`, > + method: 'POST', > + failure: function(response) { > + Ext.Msg.alert(gettext('Error'), response.htmlStatus); > + }, > + success: function(response, options) { > + me.statusStore.startUpdate(); > + Ext.create('Proxmox.window.TaskViewer', { > + upid: response.result.data, > + }).show(); > + }, > + }); > + }, > + }); > + > + Ext.apply(me, { > + tbar: [unmountBtn, mountBtn, '->', { xtype: 'proxmoxRRDTypeSelector' }], > + }); you define a few buttons and overwrite the 'tbar' config, here, but forgot to add the 'connection summary' again. please don't do it this way, but rather put the buttons to the remaining tbar config above. since you don't actually need any info from the initComponent (AFAICS) this should not be a problem you should be able to add a 'referenceHolder' property on the view to be able to use 'reference' and 'lookup' to get to the components in the listener below If it's really not possible to get to the tbar, please remove the original 'tbar' definition at least, since it'll not be used anyway. > + > + me.mon(me.statusStore, 'load', (s, records, success) => { > + if (!success) { > + me.statusStore.stopUpdate(); > + me.down('pbsDataStoreInfo').fireEvent('deactivate'); > + Proxmox.Utils.API2Request({ > + url: `/config/datastore/${me.datastore}`, > + success: response => { > + let mode = response.result.data['maintenance-mode']; > + let [type, _message] = PBS.Utils.parseMaintenanceMode(mode); > + if (!response.result.data['backing-device']) { > + return; > + } > + if (!type || type === 'read-only') { > + unmountBtn.setDisabled(true); > + mountBtn.setDisabled(false); > + } else if (type === 'unmount') { > + unmountBtn.setDisabled(true); > + mountBtn.setDisabled(true); > + } else { > + unmountBtn.setDisabled(false); > + mountBtn.setDisabled(false); > + } > + }, > + }); > + } else { > + me.down('pbsDataStoreInfo').fireEvent('activate'); > + unmountBtn.setDisabled(false); > + mountBtn.setDisabled(true); > + } > + }); i'm not completely sure about that, but i think one should call 'me.mon' only after the callParents call. I may be mistaken though. (you should be able to move the code below that, since it'll trigger only after the initcomponent anyway) > > let sp = Ext.state.Manager.getProvider(); > me.mon(sp, 'statechange', function(provider, key, value) { > @@ -322,11 +399,17 @@ Ext.define('PBS.DataStoreSummary', { > Proxmox.Utils.updateColumns(me); > }); > > + me.callParent(); > + > Proxmox.Utils.API2Request({ > url: `/config/datastore/${me.datastore}`, > waitMsgTarget: me.down('pbsDataStoreInfo'), > success: function(response) { > - let path = Ext.htmlEncode(response.result.data.path); > + let data = response.result.data; > + let path = Ext.htmlEncode(data.path); > + const removable = Object.prototype.hasOwnProperty.call(data, "backing-device"); i mean it works, but our usual way to code that would be something like: let removable = !!data['backing-device']; is there a special reason for calling the hasOwnProperty method? > + unmountBtn.setHidden(!removable); > + mountBtn.setHidden(!removable); > me.down('pbsDataStoreInfo').setTitle(`${me.datastore} (${path})`); > me.down('pbsDataStoreNotes').setNotes(response.result.data.comment); > }, > @@ -344,6 +427,13 @@ Ext.define('PBS.DataStoreSummary', { > let hasIoTicks = records?.some((rec) => rec?.data?.io_ticks !== undefined); > me.down('#ioDelayChart').setVisible(!success || hasIoTicks); > }, undefined, { single: true }); > + me.on('afterrender', () => { > + me.statusStore.startUpdate(); > + }); > + > + me.on('destroy', () => { > + me.statusStore.stopUpdate(); > + }); any special reason to put this here instead of the activate/deactivate/destroy handlers above, were we also handle the rrdstore? > > me.query('proxmoxRRDChart').forEach((chart) => { > chart.setStore(me.rrdstore); _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel