]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/node/ZFS.js
ui: eslint: enforce "no-extra-parens" rule
[pve-manager.git] / www / manager6 / node / ZFS.js
index c28e20c929eb783ad10505dff3335cc3039f5cdf..b54fb4e7392a34b9c1a6946466fe8e2824318237 100644 (file)
@@ -8,7 +8,9 @@ Ext.define('PVE.node.CreateZFS', {
 
     onlineHelp: 'chapter_zfs',
 
-    initComponent : function() {
+    width: 800,
+
+    initComponent: function() {
         var me = this;
 
        if (!me.nodename) {
@@ -22,10 +24,10 @@ Ext.define('PVE.node.CreateZFS', {
            var disks = grid.getSelection();
 
            var val = [];
-           disks.sort(function(a,b) {
+           disks.sort(function(a, b) {
                var aorder = a.get('order') || 0;
                var border = b.get('order') || 0;
-               return (aorder - border);
+               return aorder - border;
            });
 
            disks.forEach(function(disk) {
@@ -49,20 +51,20 @@ Ext.define('PVE.node.CreateZFS', {
                            xtype: 'textfield',
                            hidden: true,
                            name: 'devices',
-                           allowBlank: false
+                           allowBlank: false,
                        },
                        {
                            xtype: 'proxmoxtextfield',
                            name: 'name',
                            fieldLabel: gettext('Name'),
-                           allowBlank: false
+                           allowBlank: false,
                        },
                        {
                            xtype: 'proxmoxcheckbox',
                            name: 'add_storage',
                            fieldLabel: gettext('Add Storage'),
-                           value: '1'
-                       }
+                           value: '1',
+                       },
                    ],
                    column2: [
                        {
@@ -76,8 +78,8 @@ Ext.define('PVE.node.CreateZFS', {
                                ['raid10', 'RAID10'],
                                ['raidz', 'RAIDZ'],
                                ['raidz2', 'RAIDZ2'],
-                               ['raidz3', 'RAIDZ3']
-                           ]
+                               ['raidz3', 'RAIDZ3'],
+                           ],
                        },
                        {
                            xtype: 'proxmoxKVComboBox',
@@ -90,8 +92,8 @@ Ext.define('PVE.node.CreateZFS', {
                                ['gzip', 'gzip'],
                                ['lz4', 'lz4'],
                                ['lzjb', 'lzjb'],
-                               ['zle', 'zle']
-                           ]
+                               ['zle', 'zle'],
+                           ],
                        },
                        {
                            xtype: 'proxmoxintegerfield',
@@ -99,8 +101,8 @@ Ext.define('PVE.node.CreateZFS', {
                            minValue: 9,
                            maxValue: 16,
                            value: '12',
-                           name: 'ashift'
-                       }
+                           name: 'ashift',
+                       },
                    ],
                    columnB: [
                        {
@@ -110,34 +112,42 @@ Ext.define('PVE.node.CreateZFS', {
                            itemId: 'disklist',
                            selModel: 'checkboxmodel',
                            listeners: {
-                               selectionchange: update_disklist
+                               selectionchange: update_disklist,
                            },
                            store: {
                                proxy: {
                                    type: 'proxmox',
-                                   url: '/api2/json/nodes/' + me.nodename + '/disks/list?type=unused'
-                               }
+                                   url: '/api2/json/nodes/' + me.nodename + '/disks/list?type=unused',
+                               },
                            },
                            columns: [
                                {
                                    text: gettext('Device'),
                                    dataIndex: 'devpath',
-                                   flex: 1
+                                   flex: 2,
+                               },
+                               {
+                                   text: gettext('Model'),
+                                   dataIndex: 'model',
+                                   flex: 2,
                                },
                                {
                                    text: gettext('Serial'),
-                                   dataIndex: 'serial'
+                                   dataIndex: 'serial',
+                                   flex: 2,
                                },
                                {
                                    text: gettext('Size'),
                                    dataIndex: 'size',
-                                   renderer: PVE.Utils.render_size
+                                   renderer: PVE.Utils.render_size,
+                                   flex: 1,
                                },
                                {
                                    header: gettext('Order'),
                                    xtype: 'widgetcolumn',
                                    dataIndex: 'order',
                                    sortable: true,
+                                   flex: 1,
                                    widget: {
                                        xtype: 'proxmoxintegerfield',
                                        minValue: 1,
@@ -147,26 +157,33 @@ Ext.define('PVE.node.CreateZFS', {
                                                var record = numberfield.getWidgetRecord();
                                                record.set('order', value);
                                                update_disklist(record);
-                                           }
-                                       }
-                                   }
-
-                               }
-                           ]
-                       }
-                   ]
-               }
-           ]
+                                           },
+                                       },
+                                   },
+                               },
+                           ],
+                       },
+                   ],
+               },
+               {
+                   xtype: 'displayfield',
+                   padding: '5 0 0 0',
+                   userCls: 'pmx-hint',
+                   value: 'Note: ZFS is not compatible with disks backed by a hardware ' +
+                          'RAID controller. For details see ' +
+                          '<a target="_blank" href="' + Proxmox.Utils.get_help_link('chapter_zfs') + '">the reference documentation</a>.',
+               },
+           ],
        });
 
         me.callParent();
        me.down('#disklist').getStore().load();
-    }
+    },
 });
 
-Ext.define('PVE.node.ZFSStatus', {
+Ext.define('PVE.node.ZFSDevices', {
     extend: 'Ext.tree.Panel',
-    xtype: 'pveZFSStatus',
+    xtype: 'pveZFSDevices',
     stateful: true,
     stateId: 'grid-node-zfsstatus',
     columns: [
@@ -174,32 +191,33 @@ Ext.define('PVE.node.ZFSStatus', {
            xtype: 'treecolumn',
            text: gettext('Name'),
            dataIndex: 'name',
-           flex: 1
+           flex: 1,
        },
        {
            text: gettext('Health'),
            renderer: PVE.Utils.render_zfs_health,
-           dataIndex: 'state'
+           dataIndex: 'state',
+       },
+       {
+           text: 'READ',
+           dataIndex: 'read',
+       },
+       {
+           text: 'WRITE',
+           dataIndex: 'write',
+       },
+       {
+           text: 'CKSUM',
+           dataIndex: 'cksum',
        },
        {
            text: gettext('Message'),
-           dataIndex: 'msg'
-       }
+           dataIndex: 'msg',
+       },
     ],
 
     rootVisible: true,
 
-    tbar: [
-       {
-           text: gettext('Reload'),
-           iconCls: 'fa fa-refresh',
-           handler: function() {
-               var me = this.up('panel');
-               me.reload();
-           }
-       }
-    ],
-
     reload: function() {
        var me = this;
        var sm = me.getSelectionModel();
@@ -214,19 +232,11 @@ Ext.define('PVE.node.ZFSStatus', {
                sm.deselectAll();
                me.setRootNode(response.result.data);
                me.expandAll();
-           }
+           },
        });
     },
 
-    listeners: {
-       activate: function() {
-           var me = this;
-           me.reload();
-       }
-    },
-
     initComponent: function() {
-        /*jslint confusion: true */
         var me = this;
 
        if (!me.nodename) {
@@ -250,16 +260,55 @@ Ext.define('PVE.node.ZFSStatus', {
                        if (data.leaf) {
                            return txt + 'hdd-o';
                        }
-                   }
-               }
+                   },
+               },
            ],
-           sorters: 'name'
+           sorters: 'name',
        });
 
        me.callParent();
 
        me.reload();
-    }
+    },
+});
+
+Ext.define('PVE.node.ZFSStatus', {
+    extend: 'Proxmox.grid.ObjectGrid',
+    xtype: 'pveZFSStatus',
+    layout: 'fit',
+    border: false,
+
+    initComponent: function() {
+        var me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       if (!me.zpool) {
+           throw "no zpool specified";
+       }
+
+       me.url = "/api2/extjs/nodes/" + me.nodename + "/disks/zfs/" + me.zpool;
+
+       me.rows = {
+           scan: {
+               header: gettext('Scan'),
+           },
+           status: {
+               header: gettext('Status'),
+           },
+           action: {
+               header: gettext('Action'),
+           },
+           errors: {
+               header: gettext('Errors'),
+           },
+       };
+
+       me.callParent();
+       me.reload();
+    },
 });
 
 Ext.define('PVE.node.ZFSList', {
@@ -272,34 +321,34 @@ Ext.define('PVE.node.ZFSList', {
        {
            text: gettext('Name'),
            dataIndex: 'name',
-           flex: 1
+           flex: 1,
        },
        {
            header: gettext('Size'),
            renderer: Proxmox.Utils.format_size,
-           dataIndex: 'size'
+           dataIndex: 'size',
        },
        {
            header: gettext('Free'),
            renderer: Proxmox.Utils.format_size,
-           dataIndex: 'free'
+           dataIndex: 'free',
        },
        {
            header: gettext('Allocated'),
            renderer: Proxmox.Utils.format_size,
-           dataIndex: 'alloc'
+           dataIndex: 'alloc',
        },
        {
            header: gettext('Fragmentation'),
            renderer: function(value) {
                return value.toString() + '%';
            },
-           dataIndex: 'frag'
+           dataIndex: 'frag',
        },
        {
            header: gettext('Health'),
            renderer: PVE.Utils.render_zfs_health,
-           dataIndex: 'health'
+           dataIndex: 'health',
        },
        {
            header: gettext('Deduplication'),
@@ -307,8 +356,8 @@ Ext.define('PVE.node.ZFSList', {
            renderer: function(value) {
                return value.toFixed(2).toString() + 'x';
            },
-           dataIndex: 'dedup'
-       }
+           dataIndex: 'dedup',
+       },
     ],
 
     rootVisible: false,
@@ -321,17 +370,17 @@ Ext.define('PVE.node.ZFSList', {
            handler: function() {
                var me = this.up('panel');
                me.reload();
-           }
+           },
        },
        {
            text: gettext('Create') + ': ZFS',
            handler: function() {
                var me = this.up('panel');
                var win = Ext.create('PVE.node.CreateZFS', {
-                   nodename: me.nodename
+                   nodename: me.nodename,
                }).show();
                win.on('destroy', function() { me.reload(); });
-           }
+           },
        },
        {
            text: gettext('Detail'),
@@ -344,12 +393,28 @@ Ext.define('PVE.node.ZFSList', {
                    return;
                }
                me.show_detail(selection[0].get('name'));
-           }
-       }
+           },
+       },
     ],
 
     show_detail: function(zpool) {
        var me = this;
+
+       var detailsgrid = Ext.create('PVE.node.ZFSStatus', {
+           layout: 'fit',
+           nodename: me.nodename,
+           flex: 0,
+           zpool: zpool,
+       });
+
+       var devicetree = Ext.create('PVE.node.ZFSDevices', {
+           title: gettext('Devices'),
+           nodename: me.nodename,
+           flex: 1,
+           zpool: zpool,
+       });
+
+
        var win = Ext.create('Ext.window.Window', {
            modal: true,
            width: 800,
@@ -357,13 +422,23 @@ Ext.define('PVE.node.ZFSList', {
            resizable: true,
            layout: 'fit',
            title: gettext('Status') + ': ' + zpool,
-           items: [
-               {
-                   xtype: 'pveZFSStatus',
-                   nodename: me.nodename,
-                   zpool: zpool
-               }
-           ]
+           items: [{
+               xtype: 'panel',
+               region: 'center',
+               layout: {
+                   type: 'vbox',
+                   align: 'stretch',
+               },
+               items: [detailsgrid, devicetree],
+               tbar: [{
+                   text: gettext('Reload'),
+                   iconCls: 'fa fa-refresh',
+                   handler: function() {
+                       devicetree.reload();
+                       detailsgrid.reload();
+                   },
+               }],
+           }],
        }).show();
     },
 
@@ -390,11 +465,10 @@ Ext.define('PVE.node.ZFSList', {
        itemdblclick: function(grid, record) {
            var me = this;
            me.show_detail(record.get('name'));
-       }
+       },
     },
 
     initComponent: function() {
-        /*jslint confusion: true */
         var me = this;
 
        me.nodename = me.pveSelNode.data.node;
@@ -407,16 +481,16 @@ Ext.define('PVE.node.ZFSList', {
                fields: ['name', 'size', 'free', 'alloc', 'dedup', 'frag', 'health'],
                proxy: {
                    type: 'proxmox',
-                   url: "/api2/json/nodes/" + me.nodename + '/disks/zfs'
+                   url: "/api2/json/nodes/" + me.nodename + '/disks/zfs',
                },
-               sorters: 'name'
-           }
+               sorters: 'name',
+           },
        });
 
        me.callParent();
 
        Proxmox.Utils.monStoreErrors(me, me.getStore(), true);
        me.reload();
-    }
+    },
 });