]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/OSD.js
1 Ext
.define('PVE.CephCreateOsd', {
2 extend
: 'PVE.window.Edit',
3 alias
: ['widget.pveCephCreateOsd'],
9 initComponent : function() {
10 /*jslint confusion: true */
14 throw "no node name specified";
20 url
: "/nodes/" + me
.nodename
+ "/ceph/osd",
24 xtype
: 'pveCephDiskSelector',
26 nodename
: me
.nodename
,
29 fieldLabel
: gettext('Disk'),
33 xtype
: 'pveCephDiskSelector',
35 nodename
: me
.nodename
,
36 diskType
: 'journal_disks',
37 fieldLabel
: gettext('Journal Disk'),
41 emptyText
: 'use OSD disk'
50 Ext
.define('PVE.CephRemoveOsd', {
51 extend
: 'PVE.window.Edit',
52 alias
: ['widget.pveCephRemoveOsd'],
58 initComponent : function() {
59 /*jslint confusion: true */
63 throw "no node name specified";
65 if (me
.osdid
=== undefined || me
.osdid
< 0) {
66 throw "no osdid specified";
71 me
.title
= gettext('Remove') + ': ' + 'Ceph OSD osd.' + me
.osdid
;
74 url
: "/nodes/" + me
.nodename
+ "/ceph/osd/" + me
.osdid
,
82 fieldLabel
: gettext('Remove Partitions')
91 Ext
.define('PVE.node.CephOsdTree', {
92 extend
: 'Ext.tree.Panel',
93 alias
: ['widget.pveNodeCephOsdTree'],
95 initComponent: function() {
96 /*jslint confusion: true */
99 var nodename
= me
.pveSelNode
.data
.node
;
101 throw "no node name specified";
104 var sm
= Ext
.create('Ext.selection.TreeModel', {});
106 var set_button_status
; // defined later
108 var reload = function() {
109 PVE
.Utils
.API2Request({
110 url
: "/nodes/" + nodename
+ "/ceph/osd",
113 failure: function(response
, opts
) {
114 PVE
.Utils
.setErrorMask(me
, response
.htmlStatus
);
116 success: function(response
, opts
) {
118 me
.setRootNode(response
.result
.data
.root
);
125 var osd_cmd = function(cmd
) {
126 var rec
= sm
.getSelection()[0];
127 if (!(rec
&& (rec
.data
.id
>= 0) && rec
.data
.host
)) {
130 PVE
.Utils
.API2Request({
131 url
: "/nodes/" + rec
.data
.host
+ "/ceph/osd/" +
132 rec
.data
.id
+ '/' + cmd
,
136 failure: function(response
, opts
) {
137 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
142 var service_cmd = function(cmd
) {
143 var rec
= sm
.getSelection()[0];
144 if (!(rec
&& rec
.data
.name
&& rec
.data
.host
)) {
147 PVE
.Utils
.API2Request({
148 url
: "/nodes/" + rec
.data
.host
+ "/ceph/" + cmd
,
149 params
: { service
: rec
.data
.name
},
152 success: function(response
, options
) {
153 var upid
= response
.result
.data
;
154 var win
= Ext
.create('PVE.window.TaskProgress', { upid
: upid
});
156 me
.mon(win
, 'close', reload
, me
);
158 failure: function(response
, opts
) {
159 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
164 var start_btn
= new Ext
.Button({
165 text
: gettext('Start'),
167 handler: function(){ service_cmd('start'); }
170 var stop_btn
= new Ext
.Button({
171 text
: gettext('Stop'),
173 handler: function(){ service_cmd('stop'); }
176 var osd_out_btn
= new Ext
.Button({
179 handler: function(){ osd_cmd('out'); }
182 var osd_in_btn
= new Ext
.Button({
185 handler: function(){ osd_cmd('in'); }
188 var remove_btn
= new Ext
.Button({
189 text
: gettext('Remove'),
192 var rec
= sm
.getSelection()[0];
193 if (!(rec
&& (rec
.data
.id
>= 0) && rec
.data
.host
)) {
197 var win
= Ext
.create('PVE.CephRemoveOsd', {
198 nodename
: rec
.data
.host
,
202 me
.mon(win
, 'close', reload
, me
);
206 set_button_status = function() {
207 var rec
= sm
.getSelection()[0];
210 start_btn
.setDisabled(true);
211 stop_btn
.setDisabled(true);
212 remove_btn
.setDisabled(true);
213 osd_out_btn
.setDisabled(true);
214 osd_in_btn
.setDisabled(true);
218 var isOsd
= (rec
.data
.host
&& (rec
.data
.type
=== 'osd') && (rec
.data
.id
>= 0));
220 start_btn
.setDisabled(!(isOsd
&& (rec
.data
.status
!== 'up')));
221 stop_btn
.setDisabled(!(isOsd
&& (rec
.data
.status
!== 'down')));
222 remove_btn
.setDisabled(!(isOsd
&& (rec
.data
.status
=== 'down')));
224 osd_out_btn
.setDisabled(!(isOsd
&& rec
.data
['in']));
225 osd_in_btn
.setDisabled(!(isOsd
&& !rec
.data
['in']));
228 sm
.on('selectionchange', set_button_status
);
230 var reload_btn
= new Ext
.Button({
231 text
: gettext('Reload'),
236 tbar
: [ reload_btn
, start_btn
, stop_btn
, osd_out_btn
, osd_in_btn
, remove_btn
],
238 fields
: ['name', 'type', 'status', 'host', 'in',
239 { type
: 'integer', name
: 'id' },
240 { type
: 'number', name
: 'reweight' },
241 { type
: 'number', name
: 'percent_used' },
242 { type
: 'integer', name
: 'bytes_used' },
243 { type
: 'integer', name
: 'total_space' },
244 { type
: 'integer', name
: 'apply_latency_ms' },
245 { type
: 'integer', name
: 'commit_latency_ms' },
246 { type
: 'number', name
: 'crush_weight' }],
266 renderer: function(value
, metaData
, rec
) {
271 return value
+ '/' + (data
['in'] ? 'in' : 'out');
277 dataIndex
: 'crush_weight',
279 renderer: function(value
, metaData
, rec
) {
280 if (rec
.data
.type
!== 'osd') {
289 dataIndex
: 'reweight',
291 renderer: function(value
, metaData
, rec
) {
292 if (rec
.data
.type
!== 'osd') {
300 header
: gettext('Used'),
304 dataIndex
: 'percent_used',
306 renderer: function(value
, metaData
, rec
) {
307 if (rec
.data
.type
!== 'osd') {
310 return Ext
.util
.Format
.number(value
, '0.00');
315 text
: gettext('Total'),
316 dataIndex
: 'total_space',
318 renderer: function(value
, metaData
, rec
) {
319 if (rec
.data
.type
!== 'osd') {
322 return PVE
.Utils
.render_size(value
);
329 header
: gettext('Latency (ms)'),
333 dataIndex
: 'apply_latency_ms',
335 renderer: function(value
, metaData
, rec
) {
336 if (rec
.data
.type
!== 'osd') {
345 dataIndex
: 'commit_latency_ms',
347 renderer: function(value
, metaData
, rec
) {
348 if (rec
.data
.type
!== 'osd') {