]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/Status.js
ext6migrate: fix most ceph subtabs
[pve-manager.git] / www / manager6 / ceph / Status.js
1 Ext.define('PVE.node.CephStatus', {
2 extend: 'PVE.grid.ObjectGrid',
3 alias: ['widget.pveNodeCephStatus'],
4 cwidth1: 150,
5 interval: 3000,
6 initComponent: function() {
7 /*jslint confusion: true */
8 var me = this;
9
10 var nodename = me.pveSelNode.data.node;
11 if (!nodename) {
12 throw "no node name specified";
13 }
14
15 var renderquorum = function(value) {
16 if (!value || value.length < 0) {
17 return 'No';
18 }
19
20 return 'Yes {' + value.join(' ') + '}';
21 };
22
23 var rendermonmap = function(d) {
24 if (!d) {
25 return '';
26 }
27
28 var txt = 'e' + d.epoch + ': ' + d.mons.length + " mons at ";
29
30 Ext.Array.each(d.mons, function(d) {
31 txt += d.name + '=' + d.addr + ',';
32 });
33
34 return txt;
35 };
36
37 var renderosdmap = function(value) {
38 if (!value || !value.osdmap) {
39 return '';
40 }
41
42 var d = value.osdmap;
43
44 var txt = 'e' + d.epoch + ': ';
45
46 txt += d.num_osds + ' osds: ' + d.num_up_osds + ' up, ' +
47 d.num_in_osds + " in";
48
49 return txt;
50 };
51
52 var renderhealth = function(value) {
53 if (!value || !value.overall_status) {
54 return '';
55 }
56
57 var txt = value.overall_status;
58
59 Ext.Array.each(value.summary, function(d) {
60 txt += " " + d.summary + ';';
61 });
62
63 return txt;
64 };
65
66 var renderpgmap = function(d) {
67 if (!d) {
68 return '';
69 }
70
71 var txt = 'v' + d.version + ': ';
72
73 txt += d.num_pgs + " pgs:";
74
75 Ext.Array.each(d.pgs_by_state, function(s) {
76 txt += " " + s.count + " " + s.state_name;
77 });
78 txt += '; ';
79
80 txt += PVE.Utils.format_size(d.data_bytes) + " data, ";
81 txt += PVE.Utils.format_size(d.bytes_used) + " used, ";
82 txt += PVE.Utils.format_size(d.bytes_avail) + " avail";
83
84 return txt;
85 };
86
87 Ext.applyIf(me, {
88 url: "/api2/json/nodes/" + nodename + "/ceph/status",
89 rows: {
90 health: {
91 header: 'health',
92 renderer: renderhealth,
93 required: true
94 },
95 quorum_names: {
96 header: 'quorum',
97 renderer: renderquorum,
98 required: true
99 },
100 fsid: {
101 header: 'cluster',
102 required: true
103 },
104 monmap: {
105 header: 'monmap',
106 renderer: rendermonmap,
107 required: true
108 },
109 osdmap: {
110 header: 'osdmap',
111 renderer: renderosdmap,
112 required: true
113 },
114 pgmap: {
115 header: 'pgmap',
116 renderer: renderpgmap,
117 required: true
118 }
119 }
120 });
121
122 me.callParent();
123
124 me.on('show', me.rstore.startUpdate);
125 me.on('hide', me.rstore.stopUpdate);
126 me.on('destroy', me.rstore.stopUpdate);
127 }
128 });