[pbs-devel] [PATCH proxmox-backup 1/5] ui: tape: add DriveStatus panel
Dominik Csapak
d.csapak at proxmox.com
Mon Mar 1 12:22:39 CET 2021
not used yet
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
www/Makefile | 1 +
www/tape/DriveStatus.js | 212 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 213 insertions(+)
create mode 100644 www/tape/DriveStatus.js
diff --git a/www/Makefile b/www/Makefile
index 11858f98..53981aa4 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -29,6 +29,7 @@ TAPE_UI_FILES= \
tape/ChangerConfig.js \
tape/ChangerStatus.js \
tape/DriveConfig.js \
+ tape/DriveStatus.js \
tape/EncryptionKeys.js \
tape/PoolConfig.js \
tape/TapeInventory.js \
diff --git a/www/tape/DriveStatus.js b/www/tape/DriveStatus.js
new file mode 100644
index 00000000..0035dc22
--- /dev/null
+++ b/www/tape/DriveStatus.js
@@ -0,0 +1,212 @@
+Ext.define('PBS.TapeManagement.DriveStatus', {
+ extend: 'Ext.panel.Panel',
+ alias: 'widget.pbsDriveStatus',
+ mixins: ['Proxmox.Mixin.CBind'],
+
+ cbindData: function(config) {
+ let me = this;
+ me.setTitle(`${gettext('Drive')}: ${me.drive}`);
+ return {
+ driveStatusUrl: `/api2/json/tape/drive/${me.drive}/status`,
+ };
+ },
+
+ scrollable: true,
+
+ bodyPadding: 5,
+
+ controller: {
+ xclass: 'Ext.app.ViewController',
+
+ reload: function() {
+ let me = this;
+ me.lookup('statusgrid').rstore.load();
+ },
+ },
+
+ listeners: {
+ activate: 'reload',
+ },
+
+ tbar: [
+ {
+ xtype: 'proxmoxButton',
+ handler: 'reload',
+ text: gettext('Reload'),
+ },
+ ],
+
+ items: [
+ {
+ xtype: 'container',
+ layout: {
+ type: 'hbox',
+ align: 'stretch',
+ },
+ defaults: {
+ padding: 5,
+ flex: 1,
+ },
+ items: [
+ {
+ xtype: 'pbsDriveInfoPanel',
+ cbind: {
+ drive: '{drive}',
+ },
+ },
+ {
+ xtype: 'pbsDriveStatusGrid',
+ reference: 'statusgrid',
+ cbind: {
+ url: '{driveStatusUrl}',
+ },
+ },
+ ],
+ },
+ ],
+});
+
+Ext.define('PBS.TapeManagement.DriveStatusGrid', {
+ extend: 'Proxmox.grid.ObjectGrid',
+ alias: 'widget.pbsDriveStatusGrid',
+
+ title: gettext('Status'),
+
+ rows: {
+ 'blocksize': {
+ required: true,
+ header: gettext('Blocksize'),
+ renderer: function(value) {
+ if (!value) {
+ return gettext('Dynamic');
+ }
+ return `${gettext('Fixed')} - ${Proxmox.Utils.format_size(value)}`;
+ },
+ },
+ 'options': {
+ required: true,
+ header: gettext('Options'),
+ defaultValue: '',
+ },
+ 'status': {
+ required: true,
+ header: gettext('Status'),
+ },
+ 'density': {
+ header: gettext('Tape Density'),
+ },
+ 'manufactured': {
+ header: gettext('Tape Manufacture Date'),
+ renderer: function(value) {
+ if (value) {
+ return new Date(value*1000);
+ }
+ return "";
+ },
+ },
+ 'bytes-read': {
+ header: gettext('Tape Read'),
+ renderer: Proxmox.Utils.format_size,
+ },
+ 'bytes-written': {
+ header: gettext('Tape Written'),
+ renderer: Proxmox.Utils.format_size,
+ },
+ },
+});
+
+Ext.define('PBS.TapeManagement.DriveInfoPanel', {
+ extend: 'Ext.panel.Panel',
+ alias: 'widget.pbsDriveInfoPanel',
+
+ title: gettext('Information'),
+
+ defaults: {
+ printBar: false,
+ padding: 5,
+ },
+ bodyPadding: 15,
+
+ viewModel: {
+ data: {},
+ },
+
+ items: [
+ {
+ xtype: 'pmxInfoWidget',
+ title: gettext('Name'),
+ bind: {
+ data: {
+ text: '{name}',
+ },
+ },
+ },
+ {
+ xtype: 'pmxInfoWidget',
+ title: gettext('Vendor'),
+ bind: {
+ data: {
+ text: '{vendor}',
+ },
+ },
+ },
+ {
+ xtype: 'pmxInfoWidget',
+ title: gettext('Model'),
+ bind: {
+ data: {
+ text: '{model}',
+ },
+ },
+ },
+ {
+ xtype: 'pmxInfoWidget',
+ title: gettext('Serial'),
+ bind: {
+ data: {
+ text: '{serial}',
+ },
+ },
+ },
+ {
+ xtype: 'pmxInfoWidget',
+ title: gettext('Path'),
+ bind: {
+ data: {
+ text: '{path}',
+ },
+ },
+ },
+ ],
+
+ updateData: function(record) {
+ let me = this;
+ if (!record) {
+ return;
+ }
+
+ let vm = me.getViewModel();
+ for (const [key, value] of Object.entries(record.data)) {
+ vm.set(key, value);
+ }
+ },
+
+ initComponent: function() {
+ let me = this;
+ if (!me.drive) {
+ throw "no drive given";
+ }
+
+ let tapeStore = Ext.ComponentQuery.query('navigationtree')[0].tapestore;
+ me.mon(tapeStore, 'load', function() {
+ let driveRecord = tapeStore.findRecord('name', me.drive, 0, false, true, true);
+ me.updateData(driveRecord);
+ });
+ if (!tapeStore.isLoading) {
+ let driveRecord = tapeStore.findRecord('name', me.drive, 0, false, true, true);
+ me.updateData(driveRecord);
+ }
+
+ me.callParent();
+ },
+});
--
2.20.1
More information about the pbs-devel
mailing list