]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/ZFS.js
1 Ext
.define('PVE.node.CreateZFS', {
2 extend
: 'Proxmox.window.Edit',
9 onlineHelp
: 'chapter_zfs',
11 initComponent : function() {
15 throw "no node name specified";
20 var update_disklist = function() {
21 var grid
= me
.down('#disklist');
22 var disks
= grid
.getSelection();
25 disks
.sort(function(a
,b
) {
26 var aorder
= a
.get('order') || 0;
27 var border
= b
.get('order') || 0;
28 return (aorder
- border
);
31 disks
.forEach(function(disk
) {
32 val
.push(disk
.get('devpath'));
35 me
.down('field[name=devices]').setValue(val
.join(','));
39 url
: '/nodes/' + me
.nodename
+ '/disks/zfs',
44 onGetValues: function(values
) {
55 xtype
: 'proxmoxtextfield',
57 fieldLabel
: gettext('Name'),
61 xtype
: 'proxmoxcheckbox',
63 fieldLabel
: gettext('Add Storage'),
69 xtype
: 'proxmoxKVComboBox',
70 fieldLabel
: gettext('RAID Level'),
74 ['single', gettext('Single Disk')],
83 xtype
: 'proxmoxKVComboBox',
84 fieldLabel
: gettext('Compression'),
97 xtype
: 'proxmoxintegerfield',
98 fieldLabel
: gettext('ashift'),
109 emptyText
: gettext('No Disks unused'),
111 selModel
: 'checkboxmodel',
113 selectionchange
: update_disklist
118 url
: '/api2/json/nodes/' + me
.nodename
+ '/disks/list?type=unused'
123 text
: gettext('Device'),
124 dataIndex
: 'devpath',
128 text
: gettext('Serial'),
132 text
: gettext('Size'),
134 renderer
: PVE
.Utils
.render_size
137 header
: gettext('Order'),
138 xtype
: 'widgetcolumn',
142 xtype
: 'proxmoxintegerfield',
146 change: function(numberfield
, value
, old_value
) {
147 var record
= numberfield
.getWidgetRecord();
148 record
.set('order', value
);
149 update_disklist(record
);
162 me
.down('#disklist').getStore().load();
166 Ext
.define('PVE.node.ZFSDevices', {
167 extend
: 'Ext.tree.Panel',
168 xtype
: 'pveZFSDevices',
170 stateId
: 'grid-node-zfsstatus',
174 text
: gettext('Name'),
179 text
: gettext('Health'),
180 renderer
: PVE
.Utils
.render_zfs_health
,
184 text
: gettext('READ'),
188 text
: gettext('WRITE'),
192 text
: gettext('CKSUM'),
196 text
: gettext('Message'),
205 var sm
= me
.getSelectionModel();
206 Proxmox
.Utils
.API2Request({
207 url
: "/nodes/" + me
.nodename
+ "/disks/zfs/" + me
.zpool
,
210 failure: function(response
, opts
) {
211 Proxmox
.Utils
.setErrorMask(me
, response
.htmlStatus
);
213 success: function(response
, opts
) {
215 me
.setRootNode(response
.result
.data
);
221 initComponent: function() {
222 /*jslint confusion: true */
226 throw "no node name specified";
230 throw "no zpool specified";
233 var sm
= Ext
.create('Ext.selection.TreeModel', {});
237 fields
: ['name', 'status',
241 calculate: function(data
) {
242 var txt
= 'fa x-fa-tree fa-';
244 return txt
+ 'hdd-o';
258 Ext
.define('PVE.node.ZFSStatus', {
259 extend
: 'Proxmox.grid.ObjectGrid',
260 xtype
: 'pveZFSStatus',
264 initComponent: function() {
265 /*jslint confusion: true */
269 throw "no node name specified";
273 throw "no zpool specified";
276 me
.url
= "/api2/extjs/nodes/" + me
.nodename
+ "/disks/zfs/" + me
.zpool
;
280 header
: gettext('Scan')
283 header
: gettext('Status')
286 header
: gettext('Action')
289 header
: gettext('Errors')
298 Ext
.define('PVE.node.ZFSList', {
299 extend
: 'Ext.grid.Panel',
303 stateId
: 'grid-node-zfs',
306 text
: gettext('Name'),
311 header
: gettext('Size'),
312 renderer
: Proxmox
.Utils
.format_size
,
316 header
: gettext('Free'),
317 renderer
: Proxmox
.Utils
.format_size
,
321 header
: gettext('Allocated'),
322 renderer
: Proxmox
.Utils
.format_size
,
326 header
: gettext('Fragmentation'),
327 renderer: function(value
) {
328 return value
.toString() + '%';
333 header
: gettext('Health'),
334 renderer
: PVE
.Utils
.render_zfs_health
,
338 header
: gettext('Deduplication'),
340 renderer: function(value
) {
341 return value
.toFixed(2).toString() + 'x';
352 text
: gettext('Reload'),
353 iconCls
: 'fa fa-refresh',
354 handler: function() {
355 var me
= this.up('panel');
360 text
: gettext('Create') + ': ZFS',
361 handler: function() {
362 var me
= this.up('panel');
363 var win
= Ext
.create('PVE.node.CreateZFS', {
364 nodename
: me
.nodename
366 win
.on('destroy', function() { me
.reload(); });
370 text
: gettext('Detail'),
373 handler: function() {
374 var me
= this.up('panel');
375 var selection
= me
.getSelection();
376 if (selection
.length
< 1) {
379 me
.show_detail(selection
[0].get('name'));
384 show_detail: function(zpool
) {
387 var devicetree
= Ext
.create('PVE.node.ZFSDevices', {
388 title
: gettext('Devices'),
389 nodename
: me
.nodename
,
393 var detailsgrid
= Ext
.create('PVE.node.ZFSStatus', {
395 nodename
: me
.nodename
,
399 var win
= Ext
.create('Ext.window.Window', {
405 title
: gettext('Status') + ': ' + zpool
,
409 items
: [detailsgrid
, devicetree
],
411 text
: gettext('Reload'),
412 iconCls
: 'fa fa-refresh',
413 handler: function() {
416 detailsgrid
.reload();
423 set_button_status: function() {
425 var selection
= me
.getSelection();
426 me
.down('#detailbtn').setDisabled(selection
.length
=== 0);
436 activate: function() {
440 selectionchange: function() {
441 this.set_button_status();
443 itemdblclick: function(grid
, record
) {
445 me
.show_detail(record
.get('name'));
449 initComponent: function() {
450 /*jslint confusion: true */
453 me
.nodename
= me
.pveSelNode
.data
.node
;
455 throw "no node name specified";
460 fields
: ['name', 'size', 'free', 'alloc', 'dedup', 'frag', 'health'],
463 url
: "/api2/json/nodes/" + me
.nodename
+ '/disks/zfs'
471 Proxmox
.Utils
.monStoreErrors(me
, me
.getStore(), true);