]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/LVMThin.js
db9ea2499744c88faadfadfbfba33b97dd053cb7
[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: gettext('Usage'),
69 width: 110,
70 dataIndex: 'usage',
71 tdCls: 'x-progressbar-default-cell',
72 xtype: 'widgetcolumn',
73 widget: {
74 xtype: 'pveProgressBar',
75 },
76 },
77 {
78 header: gettext('Size'),
79 width: 100,
80 align: 'right',
81 sortable: true,
82 renderer: Proxmox.Utils.format_size,
83 dataIndex: 'lv_size',
84 },
85 {
86 header: gettext('Used'),
87 width: 100,
88 align: 'right',
89 sortable: true,
90 renderer: Proxmox.Utils.format_size,
91 dataIndex: 'used',
92 },
93 {
94 header: gettext('Metadata Usage'),
95 width: 120,
96 dataIndex: 'metadata_usage',
97 tdCls: 'x-progressbar-default-cell',
98 xtype: 'widgetcolumn',
99 widget: {
100 xtype: 'pveProgressBar',
101 },
102 },
103 {
104 header: gettext('Metadata Size'),
105 width: 120,
106 align: 'right',
107 sortable: true,
108 renderer: Proxmox.Utils.format_size,
109 dataIndex: 'metadata_size',
110 },
111 {
112 header: gettext('Metadata Used'),
113 width: 125,
114 align: 'right',
115 sortable: true,
116 renderer: Proxmox.Utils.format_size,
117 dataIndex: 'metadata_used',
118 },
119 ],
120
121 tbar: [
122 {
123 text: gettext('Reload'),
124 iconCls: 'fa fa-refresh',
125 handler: function() {
126 this.up('panel').reload();
127 },
128 },
129 {
130 text: gettext('Create') + ': Thinpool',
131 handler: function() {
132 var view = this.up('panel');
133 Ext.create('PVE.node.CreateLVMThin', {
134 nodename: view.nodename,
135 taskDone: () => view.reload(),
136 autoShow: true,
137 });
138 },
139 },
140 ],
141
142 reload: function() {
143 let me = this;
144 me.store.load();
145 me.store.sort();
146 },
147
148 listeners: {
149 activate: function() {
150 this.reload();
151 },
152 },
153
154 initComponent: function() {
155 let me = this;
156
157 me.nodename = me.pveSelNode.data.node;
158 if (!me.nodename) {
159 throw "no node name specified";
160 }
161
162 Ext.apply(me, {
163 store: {
164 fields: [
165 'lv',
166 'lv_size',
167 'used',
168 'metadata_size',
169 'metadata_used',
170 {
171 type: 'number',
172 name: 'usage',
173 calculate: data => data.used / data.lv_size,
174 },
175 {
176 type: 'number',
177 name: 'metadata_usage',
178 calculate: data => data.metadata_used / data.metadata_size,
179 },
180 ],
181 proxy: {
182 type: 'proxmox',
183 url: `/api2/json/nodes/${me.nodename}/disks/lvmthin`,
184 },
185 sorters: 'lv',
186 },
187 });
188
189 me.callParent();
190
191 Proxmox.Utils.monStoreErrors(me, me.getStore(), true);
192 me.reload();
193 },
194 });
195