]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/LVMThin.js
ui: node: lvmthin: add volume group to columns
[pve-manager.git] / www / manager6 / node / LVMThin.js
1 Ext.define('PVE.node.CreateLVMThin', {
2 extend: 'Proxmox.window.Edit',
3 xtype: 'pveCreateLVMThin',
4
5 onlineHelp: 'chapter_lvm',
6 subject: 'LVM Thinpool',
7
8 showProgress: true,
9 isCreate: true,
10
11 initComponent: function() {
12 let me = this;
13
14 if (!me.nodename) {
15 throw "no node name specified";
16 }
17
18 Ext.applyIf(me, {
19 url: `/nodes/${me.nodename}/disks/lvmthin`,
20 method: 'POST',
21 items: [
22 {
23 xtype: 'pmxDiskSelector',
24 name: 'device',
25 nodename: me.nodename,
26 diskType: 'unused',
27 fieldLabel: gettext('Disk'),
28 allowBlank: false,
29 },
30 {
31 xtype: 'proxmoxtextfield',
32 name: 'name',
33 fieldLabel: gettext('Name'),
34 allowBlank: false,
35 },
36 {
37 xtype: 'proxmoxcheckbox',
38 name: 'add_storage',
39 fieldLabel: gettext('Add Storage'),
40 value: '1',
41 },
42 ],
43 });
44
45 me.callParent();
46 },
47 });
48
49 Ext.define('PVE.node.LVMThinList', {
50 extend: 'Ext.grid.Panel',
51 xtype: 'pveLVMThinList',
52
53 emptyText: gettext('No thinpools found'),
54
55 stateful: true,
56 stateId: 'grid-node-lvmthin',
57
58 rootVisible: false,
59 useArrows: true,
60
61 columns: [
62 {
63 text: gettext('Name'),
64 dataIndex: 'lv',
65 flex: 1,
66 },
67 {
68 header: 'Volume Group',
69 width: 110,
70 dataIndex: 'vg',
71 },
72 {
73 header: gettext('Usage'),
74 width: 110,
75 dataIndex: 'usage',
76 tdCls: 'x-progressbar-default-cell',
77 xtype: 'widgetcolumn',
78 widget: {
79 xtype: 'pveProgressBar',
80 },
81 },
82 {
83 header: gettext('Size'),
84 width: 100,
85 align: 'right',
86 sortable: true,
87 renderer: Proxmox.Utils.format_size,
88 dataIndex: 'lv_size',
89 },
90 {
91 header: gettext('Used'),
92 width: 100,
93 align: 'right',
94 sortable: true,
95 renderer: Proxmox.Utils.format_size,
96 dataIndex: 'used',
97 },
98 {
99 header: gettext('Metadata Usage'),
100 width: 120,
101 dataIndex: 'metadata_usage',
102 tdCls: 'x-progressbar-default-cell',
103 xtype: 'widgetcolumn',
104 widget: {
105 xtype: 'pveProgressBar',
106 },
107 },
108 {
109 header: gettext('Metadata Size'),
110 width: 120,
111 align: 'right',
112 sortable: true,
113 renderer: Proxmox.Utils.format_size,
114 dataIndex: 'metadata_size',
115 },
116 {
117 header: gettext('Metadata Used'),
118 width: 125,
119 align: 'right',
120 sortable: true,
121 renderer: Proxmox.Utils.format_size,
122 dataIndex: 'metadata_used',
123 },
124 ],
125
126 tbar: [
127 {
128 text: gettext('Reload'),
129 iconCls: 'fa fa-refresh',
130 handler: function() {
131 this.up('panel').reload();
132 },
133 },
134 {
135 text: gettext('Create') + ': Thinpool',
136 handler: function() {
137 var view = this.up('panel');
138 Ext.create('PVE.node.CreateLVMThin', {
139 nodename: view.nodename,
140 taskDone: () => view.reload(),
141 autoShow: true,
142 });
143 },
144 },
145 ],
146
147 reload: function() {
148 let me = this;
149 me.store.load();
150 me.store.sort();
151 },
152
153 listeners: {
154 activate: function() {
155 this.reload();
156 },
157 },
158
159 initComponent: function() {
160 let me = this;
161
162 me.nodename = me.pveSelNode.data.node;
163 if (!me.nodename) {
164 throw "no node name specified";
165 }
166
167 Ext.apply(me, {
168 store: {
169 fields: [
170 'lv',
171 'lv_size',
172 'used',
173 'metadata_size',
174 'metadata_used',
175 {
176 type: 'number',
177 name: 'usage',
178 calculate: data => data.used / data.lv_size,
179 },
180 {
181 type: 'number',
182 name: 'metadata_usage',
183 calculate: data => data.metadata_used / data.metadata_size,
184 },
185 ],
186 proxy: {
187 type: 'proxmox',
188 url: `/api2/json/nodes/${me.nodename}/disks/lvmthin`,
189 },
190 sorters: 'lv',
191 },
192 });
193
194 me.callParent();
195
196 Proxmox.Utils.monStoreErrors(me, me.getStore(), true);
197 me.reload();
198 },
199 });
200