]>
Commit | Line | Data |
---|---|---|
2ea501ff DC |
1 | Ext.define('PBS.admin.ZFSList', { |
2 | extend: 'Ext.grid.Panel', | |
3 | xtype: 'pbsZFSList', | |
4 | ||
5 | stateful: true, | |
6 | stateId: 'grid-node-zfs', | |
7 | ||
8 | controller: { | |
9 | xclass: 'Ext.app.ViewController', | |
10 | ||
11 | openCreateWindow: function() { | |
12 | let me = this; | |
13 | Ext.create('PBS.window.CreateZFS', { | |
14 | nodename: me.nodename, | |
15 | listeners: { | |
16 | destroy: function() { me.reload(); }, | |
8acd4d9a | 17 | }, |
2ea501ff DC |
18 | }).show(); |
19 | }, | |
20 | ||
21 | openDetailWindow: function() { | |
22 | let me = this; | |
23 | let view = me.getView(); | |
24 | let selection = view.getSelection(); | |
25 | if (!selection || selection.length < 1) return; | |
26 | ||
27 | let rec = selection[0]; | |
28 | let zpool = rec.get('name'); | |
29 | ||
30 | Ext.create('Proxmox.window.ZFSDetail', { | |
31 | zpool, | |
32 | nodename: view.nodename, | |
33 | }).show(); | |
34 | }, | |
35 | ||
36 | reload: function() { | |
37 | let me = this; | |
38 | let view = me.getView(); | |
39 | let store = view.getStore(); | |
40 | store.load(); | |
41 | store.sort(); | |
42 | }, | |
43 | ||
44 | init: function(view) { | |
45 | let me = this; | |
46 | ||
47 | if (!view.nodename) { | |
48 | throw "no nodename given"; | |
49 | } | |
50 | ||
51 | let url = `/api2/json/nodes/${view.nodename}/disks/zfs`; | |
8acd4d9a | 52 | view.getStore().getProxy().setUrl(url); |
2ea501ff DC |
53 | |
54 | Proxmox.Utils.monStoreErrors(view, view.getStore(), true); | |
55 | ||
56 | me.reload(); | |
57 | }, | |
58 | }, | |
59 | ||
60 | columns: [ | |
61 | { | |
62 | text: gettext('Name'), | |
63 | dataIndex: 'name', | |
8acd4d9a | 64 | flex: 1, |
2ea501ff DC |
65 | }, |
66 | { | |
67 | header: gettext('Size'), | |
68 | renderer: Proxmox.Utils.format_size, | |
8acd4d9a | 69 | dataIndex: 'size', |
2ea501ff DC |
70 | }, |
71 | { | |
72 | header: gettext('Free'), | |
73 | renderer: Proxmox.Utils.format_size, | |
8acd4d9a | 74 | dataIndex: 'free', |
2ea501ff DC |
75 | }, |
76 | { | |
77 | header: gettext('Allocated'), | |
78 | renderer: Proxmox.Utils.format_size, | |
8acd4d9a | 79 | dataIndex: 'alloc', |
2ea501ff DC |
80 | }, |
81 | { | |
82 | header: gettext('Fragmentation'), | |
83 | renderer: function(value) { | |
84 | return value.toString() + '%'; | |
85 | }, | |
8acd4d9a | 86 | dataIndex: 'frag', |
2ea501ff DC |
87 | }, |
88 | { | |
89 | header: gettext('Health'), | |
90 | renderer: Proxmox.Utils.render_zfs_health, | |
8acd4d9a | 91 | dataIndex: 'health', |
2ea501ff DC |
92 | }, |
93 | { | |
94 | header: gettext('Deduplication'), | |
95 | hidden: true, | |
96 | renderer: function(value) { | |
97 | return value.toFixed(2).toString() + 'x'; | |
98 | }, | |
8acd4d9a TL |
99 | dataIndex: 'dedup', |
100 | }, | |
2ea501ff DC |
101 | ], |
102 | ||
103 | rootVisible: false, | |
104 | useArrows: true, | |
105 | ||
106 | tbar: [ | |
107 | { | |
108 | text: gettext('Reload'), | |
109 | iconCls: 'fa fa-refresh', | |
110 | handler: 'reload', | |
111 | }, | |
112 | { | |
113 | text: gettext('Create') + ': ZFS', | |
114 | handler: 'openCreateWindow', | |
115 | }, | |
116 | { | |
117 | text: gettext('Detail'), | |
118 | xtype: 'proxmoxButton', | |
119 | disabled: true, | |
6f711c17 | 120 | handler: 'openDetailWindow', |
8acd4d9a | 121 | }, |
2ea501ff DC |
122 | ], |
123 | ||
124 | listeners: { | |
125 | itemdblclick: 'openDetailWindow', | |
126 | }, | |
127 | ||
128 | store: { | |
129 | fields: ['name', 'size', 'free', 'alloc', 'dedup', 'frag', 'health'], | |
130 | proxy: { | |
131 | type: 'proxmox', | |
132 | }, | |
8acd4d9a | 133 | sorters: 'name', |
2ea501ff DC |
134 | }, |
135 | }); | |
136 |