]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/ceph/Pool.js
Utils.js: add task descriptions for vzclone and vztemplate
[pve-manager.git] / www / manager6 / ceph / Pool.js
CommitLineData
024be9c7
DM
1Ext.define('PVE.CephCreatePool', {
2 extend: 'PVE.window.Edit',
3 alias: ['widget.pveCephCreatePool'],
4
5 subject: 'Ceph Pool',
c449c89a
DC
6 create: true,
7 method: 'POST',
8 items: [
9 {
10 xtype: 'textfield',
11 fieldLabel: gettext('Name'),
12 name: 'name',
13 allowBlank: false
14 },
15 {
16 xtype: 'numberfield',
17 fieldLabel: gettext('Size'),
18 name: 'size',
19 value: 2,
20 minValue: 1,
21 maxValue: 3,
22 allowBlank: false
23 },
24 {
25 xtype: 'numberfield',
26 fieldLabel: gettext('Min. Size'),
27 name: 'min_size',
28 value: 1,
29 minValue: 1,
30 maxValue: 3,
31 allowBlank: false
32 },
33 {
34 xtype: 'numberfield',
35 fieldLabel: gettext('Crush RuleSet'),
36 name: 'crush_ruleset',
37 value: 0,
38 minValue: 0,
39 maxValue: 32768,
40 allowBlank: false
41 },
42 {
43 xtype: 'numberfield',
44 fieldLabel: 'pg_num',
45 name: 'pg_num',
46 value: 64,
47 minValue: 8,
48 maxValue: 32768,
49 allowBlank: false
50 }
51 ],
c474314e 52 initComponent : function() {
024be9c7
DM
53 /*jslint confusion: true */
54 var me = this;
55
56 if (!me.nodename) {
57 throw "no node name specified";
58 }
59
60 Ext.applyIf(me, {
024be9c7 61 url: "/nodes/" + me.nodename + "/ceph/pools",
024be9c7
DM
62 });
63
64 me.callParent();
65 }
66});
67
68Ext.define('PVE.node.CephPoolList', {
69 extend: 'Ext.grid.GridPanel',
70 alias: ['widget.pveNodeCephPoolList'],
71
c449c89a
DC
72 stateful: false,
73 bufferedRenderer: false,
74 features: [ { ftype: 'summary'} ],
75 columns: [
76 {
77 header: gettext('Name'),
78 width: 100,
79 sortable: true,
80 dataIndex: 'pool_name'
81 },
82 {
83 header: gettext('Size') + '/min',
84 width: 80,
85 sortable: false,
86 renderer: function(v, meta, rec) {
87 return v + '/' + rec.data.min_size;
88 },
89 dataIndex: 'size'
90 },
91 {
92 header: 'pg_num',
93 width: 100,
94 sortable: false,
95 dataIndex: 'pg_num'
96 },
97 {
98 header: 'ruleset',
99 width: 50,
100 sortable: false,
101 dataIndex: 'crush_ruleset'
102 },
103 {
104 header: gettext('Used'),
105 columns: [
106 {
107 header: '%',
108 width: 80,
109 sortable: true,
110 align: 'right',
111 renderer: Ext.util.Format.numberRenderer('0.00'),
112 dataIndex: 'percent_used',
113 summaryType: 'sum',
114 summaryRenderer: Ext.util.Format.numberRenderer('0.00')
115 },
116 {
117 header: gettext('Total'),
118 width: 100,
119 sortable: true,
120 renderer: PVE.Utils.render_size,
121 align: 'right',
122 dataIndex: 'bytes_used',
123 summaryType: 'sum',
124 summaryRenderer: PVE.Utils.render_size
125 }
126 ]
127 }
128 ],
024be9c7
DM
129 initComponent: function() {
130 var me = this;
131
132 var nodename = me.pveSelNode.data.node;
133 if (!nodename) {
134 throw "no node name specified";
135 }
136
137 var sm = Ext.create('Ext.selection.RowModel', {});
138
139 var rstore = Ext.create('PVE.data.UpdateStore', {
140 interval: 3000,
141 storeid: 'ceph-pool-list',
142 model: 'ceph-pool-list',
143 proxy: {
144 type: 'pve',
145 url: "/api2/json/nodes/" + nodename + "/ceph/pools"
146 }
147 });
148
149 var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
150
151 PVE.Utils.monStoreErrors(me, rstore);
152
153 var create_btn = new Ext.Button({
154 text: gettext('Create'),
155 handler: function() {
156 var win = Ext.create('PVE.CephCreatePool', {
157 nodename: nodename
158 });
159 win.show();
160 }
161 });
162
163 var remove_btn = new PVE.button.Button({
164 text: gettext('Remove'),
165 selModel: sm,
166 disabled: true,
167 confirmMsg: function(rec) {
168 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
169 "'" + rec.data.pool_name + "'");
170 msg += " " + gettext('This will permanently erase all image data.');
171
172 return msg;
173 },
174 handler: function() {
175 var rec = sm.getSelection()[0];
176
177 if (!rec.data.pool_name) {
178 return;
179 }
180
181 PVE.Utils.API2Request({
c474314e 182 url: "/nodes/" + nodename + "/ceph/pools/" +
024be9c7
DM
183 rec.data.pool_name,
184 method: 'DELETE',
185 failure: function(response, opts) {
186 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
187 }
188 });
189 }
190 });
191
192 Ext.apply(me, {
193 store: store,
194 selModel: sm,
024be9c7 195 tbar: [ create_btn, remove_btn ],
024be9c7 196 listeners: {
c449c89a 197 activate: rstore.startUpdate,
024be9c7
DM
198 hide: rstore.stopUpdate,
199 destroy: rstore.stopUpdate
200 }
201 });
202
203 me.callParent();
204 }
205}, function() {
206
207 Ext.define('ceph-pool-list', {
208 extend: 'Ext.data.Model',
c474314e
DC
209 fields: [ 'pool_name',
210 { name: 'pool', type: 'integer'},
211 { name: 'size', type: 'integer'},
212 { name: 'min_size', type: 'integer'},
213 { name: 'pg_num', type: 'integer'},
214 { name: 'bytes_used', type: 'integer'},
215 { name: 'percent_used', type: 'number'},
024be9c7
DM
216 { name: 'crush_ruleset', type: 'integer'}
217 ],
218 idProperty: 'pool_name'
219 });
220});