From bde489e51c3080a14b545ed8087491e15ef4599e Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 25 Jun 2020 13:59:32 +0200 Subject: [PATCH] add window/ZFSDetail inspired by pve's detail window, which used two sub components (ZFSStatus, ZFSDevices; which were never used elsewhere) combined into one self-contained window Signed-off-by: Dominik Csapak --- src/Makefile | 1 + src/window/ZFSDetail.js | 152 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 src/window/ZFSDetail.js diff --git a/src/Makefile b/src/Makefile index f4f8bf5..12dda30 100644 --- a/src/Makefile +++ b/src/Makefile @@ -46,6 +46,7 @@ JSSRC= \ window/TaskViewer.js \ window/LanguageEdit.js \ window/DiskSmart.js \ + window/ZFSDetail.js \ node/APT.js \ node/NetworkEdit.js \ node/NetworkView.js \ diff --git a/src/window/ZFSDetail.js b/src/window/ZFSDetail.js new file mode 100644 index 0000000..8eb6a87 --- /dev/null +++ b/src/window/ZFSDetail.js @@ -0,0 +1,152 @@ +Ext.define('Proxmox.window.ZFSDetail', { + extend: 'Ext.window.Window', + alias: 'widget.pmxZFSDetail', + mixins: ['Proxmox.Mixin.CBind'], + + cbindData: function(initialConfig) { + let me = this; + me.url = `/nodes/${me.nodename}/disks/zfs/${encodeURIComponent(me.zpool)}`; + return { + zpoolUri: `/api2/json/${me.url}`, + title: `${gettext('Status')}: ${me.zpool}`, + }; + }, + + controller: { + xclass: 'Ext.app.ViewController', + + reload: function() { + let me = this; + let view = me.getView(); + me.lookup('status').reload(); + + Proxmox.Utils.API2Request({ + url: `/api2/extjs/${view.url}`, + waitMsgTarget: view, + method: 'GET', + failure: function(response, opts) { + Proxmox.Utils.setErrorMask(view, response.htmlStatus); + }, + success: function(response, opts) { + let devices = me.lookup('devices'); + devices.getSelectionModel().deselectAll(); + devices.setRootNode(response.result.data); + devices.expandAll(); + }, + }); + }, + + init: function(view) { + let me = this; + Proxmox.Utils.monStoreErrors(me, me.lookup('status').getStore().rstore); + me.reload(); + }, + }, + + modal: true, + width: 800, + height: 400, + resizable: true, + cbind: { + title: '{title}', + }, + + layout: { + type: 'vbox', + align: 'stretch', + }, + defaults: { + layout: 'fit', + border: false, + }, + + tbar: [ + { + text: gettext('Reload'), + iconCls: 'fa fa-refresh', + handler: 'reload', + }, + ], + + items: [ + { + xtype: 'proxmoxObjectGrid', + reference: 'status', + flex: 0, + cbind: { + url: '{zpoolUri}', + nodename: '{nodename}', + }, + rows: { + scan: { + header: gettext('Scan'), + }, + status: { + header: gettext('Status'), + }, + action: { + header: gettext('Action'), + }, + errors: { + header: gettext('Errors'), + }, + }, + }, + { + xtype: 'treepanel', + reference: 'devices', + title: gettext('Devices'), + stateful: true, + stateId: 'grid-node-zfsstatus', + rootVisible: true, + fields: ['name', 'status', + { + type: 'string', + name: 'iconCls', + calculate: function(data) { + var txt = 'fa x-fa-tree fa-'; + if (data.leaf) { + return txt + 'hdd-o'; + } + return undefined; + }, + }, + ], + sorters: 'name', + flex: 1, + cbind: { + zpool: '{zpoolUri}', + nodename: '{nodename}', + }, + columns: [ + { + xtype: 'treecolumn', + text: gettext('Name'), + dataIndex: 'name', + flex: 1, + }, + { + text: gettext('Health'), + renderer: Proxmox.Utils.render_zfs_health, + dataIndex: 'state', + }, + { + text: 'READ', + dataIndex: 'read', + }, + { + text: 'WRITE', + dataIndex: 'write', + }, + { + text: 'CKSUM', + dataIndex: 'cksum', + }, + { + text: gettext('Message'), + dataIndex: 'msg', + }, + ], + }, + ], +}); -- 2.39.2