onlineHelp: 'chapter_zfs',
- initComponent : function() {
+ width: 800,
+
+ initComponent: function() {
var me = this;
if (!me.nodename) {
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) {
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: [
{
['raid10', 'RAID10'],
['raidz', 'RAIDZ'],
['raidz2', 'RAIDZ2'],
- ['raidz3', 'RAIDZ3']
- ]
+ ['raidz3', 'RAIDZ3'],
+ ],
},
{
xtype: 'proxmoxKVComboBox',
['gzip', 'gzip'],
['lz4', 'lz4'],
['lzjb', 'lzjb'],
- ['zle', 'zle']
- ]
+ ['zle', 'zle'],
+ ],
},
{
xtype: 'proxmoxintegerfield',
minValue: 9,
maxValue: 16,
value: '12',
- name: 'ashift'
- }
+ name: 'ashift',
+ },
],
columnB: [
{
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,
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: [
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();
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) {
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', {
{
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'),
renderer: function(value) {
return value.toFixed(2).toString() + 'x';
},
- dataIndex: 'dedup'
- }
+ dataIndex: 'dedup',
+ },
],
rootVisible: false,
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'),
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,
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();
},
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;
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();
- }
+ },
});