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