Ext.define('PVE.node.CephStatus', { extend: 'PVE.grid.ObjectGrid', alias: ['widget.pveNodeCephStatus'], initComponent: function() { /*jslint confusion: true */ var me = this; var nodename = me.pveSelNode.data.node; if (!nodename) { throw "no node name specified"; } var renderquorum = function(value) { if (!value || value.length < 0) { return 'No'; } return 'Yes {' + value.join(' ') + '}'; }; var rendermonmap = function(d) { if (!d) { return ''; } var txt = 'e' + d.epoch + ': ' + d.mons.length + " mons at "; Ext.Array.each(d.mons, function(d) { txt += d.name + '=' + d.addr + ','; }); return txt; }; var renderosdmap = function(value) { if (!value || !value.osdmap) { return ''; } var d = value.osdmap; var txt = 'e' + d.epoch + ': '; txt += d.num_osds + ' osds: ' + d.num_up_osds + ' up, ' + d.num_in_osds + " in"; return txt; }; var renderhealth = function(value) { if (!value || !value.overall_status) { return ''; } var txt = value.overall_status; Ext.Array.each(value.summary, function(d) { txt += " " + d.summary + ';'; }); return txt; }; var renderpgmap = function(d) { if (!d) { return ''; } var txt = 'v' + d.version + ': '; txt += d.num_pgs + " pgs:"; Ext.Array.each(d.pgs_by_state, function(s) { txt += " " + s.count + " " + s.state_name; }); txt += '; '; txt += PVE.Utils.format_size(d.data_bytes) + " data, "; txt += PVE.Utils.format_size(d.bytes_used) + " used, "; txt += PVE.Utils.format_size(d.bytes_avail) + " avail"; return txt; }; Ext.applyIf(me, { url: "/api2/json/nodes/" + nodename + "/ceph/status", cwidth1: 150, interval: 3000, rows: { health: { header: 'health', renderer: renderhealth, required: true }, quorum_names: { header: 'quorum', renderer: renderquorum, required: true }, fsid: { header: 'cluster', required: true }, monmap: { header: 'monmap', renderer: rendermonmap, required: true }, osdmap: { header: 'osdmap', renderer: renderosdmap, required: true }, pgmap: { header: 'pgmap', renderer: renderpgmap, required: true } } }); me.callParent(); me.on('show', me.rstore.startUpdate); me.on('hide', me.rstore.stopUpdate); me.on('destroy', me.rstore.stopUpdate); } });