]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/StatusDetail.js
1 Ext
.define('PVE.ceph.StatusDetail', {
2 extend
: 'Ext.panel.Panel',
3 alias
: 'widget.pveCephStatusDetail',
10 bodyPadding
: '0 5 20',
32 '<h3>' + 'OSDs' + '</h3>',
33 '<table class="osds">',
35 '<td><i class="fa fa-fw good fa-circle"></i>',
38 '<td><i class="fa fa-fw warning fa-circle-o"></i>',
43 '<td><i class="fa fa-fw good fa-arrow-circle-up"></i>',
50 '<td><i class="fa fa-fw critical fa-arrow-circle-down"></i>',
62 '<i class="fa fa-refresh warning"></i> ' + gettext('Outdated OSDs') + "<br>",
64 '<tpl for="oldosds">',
65 '<div class="left-aligned">osd.{id}:</div>',
66 '<div class="right-aligned">{version}</div><br />',
67 '<div style="clear:both"></div>',
95 renderer: function(tooltip
, record
, ctx
) {
96 var html
= record
.get('text');
98 record
.get('states').forEach(function(state
) {
100 state
.state_name
+ ': ' + state
.count
.toString();
102 tooltip
.setHtml(html
);
121 '<h3>' + 'PGs' + '</h3>',
122 '<tpl for="states">',
123 '<div class="left-aligned"><i class ="fa fa-circle {cls}"></i> {state_name}:</div>',
124 '<div class="right-aligned">{count}</div><br />',
125 '<div style="clear:both"></div>',
130 // similar to mgr dashboard
170 text
: gettext('Unknown'),
176 text
: gettext('Clean'),
180 text
: gettext('Working'),
184 text
: gettext('Error'),
189 updateAll: function(metadata
, status
) {
191 me
.suspendLayout
= true;
193 var maxversion
= "00.0.00";
194 Object
.values(metadata
.version
|| {}).forEach(function(version
) {
195 if (version
> maxversion
) {
196 maxversion
= version
;
203 metadata
.osd
.forEach(function(osd
) {
204 var version
= PVE
.Utils
.parse_ceph_version(osd
);
205 if (version
!= maxversion
) {
214 var pgmap
= status
.pgmap
|| {};
215 var health
= status
.health
|| {};
216 var osdmap
= status
.osdmap
|| { osdmap
: {} };
220 var pgs_by_state
= pgmap
.pgs_by_state
|| [];
221 pgs_by_state
.sort(function(a
,b
){
222 return (a
.state_name
< b
.state_name
)?-1:(a
.state_name
=== b
.state_name
)?0:1;
225 me
.statecategories
.forEach(function(cat
) {
230 pgs_by_state
.forEach(function(state
) {
232 var states
= state
.state_name
.split(/[^a-z]+/);
234 for (i
= 0; i
< states
.length
; i
++) {
235 if (me
.pgstates
[states
[i
]] > result
) {
236 result
= me
.pgstates
[states
[i
]];
240 state
.cls
= me
.statecategories
[result
].cls
;
242 me
.statecategories
[result
].count
+= state
.count
;
243 me
.statecategories
[result
].states
.push(state
);
246 me
.getComponent('pgchart').getStore().setData(me
.statecategories
);
247 me
.getComponent('pgs').update({states
: pgs_by_state
});
249 var downinregex
= /(\d+) osds down/;
252 // we collect monitor/osd information from the checks
253 Ext
.Object
.each(health
.checks
, function(key
, value
, obj
) {
255 if (key
=== 'OSD_DOWN') {
256 found
= value
.summary
.message
.match(downinregex
);
257 if (found
!== null) {
258 downin_osds
= parseInt(found
[1],10);
263 // update osds counts
265 var total_osds
= osdmap
.osdmap
.num_osds
|| 0;
266 var in_osds
= osdmap
.osdmap
.num_in_osds
|| 0;
267 var up_osds
= osdmap
.osdmap
.num_up_osds
|| 0;
268 var out_osds
= total_osds
- in_osds
;
269 var down_osds
= total_osds
- up_osds
;
271 var downout_osds
= down_osds
- downin_osds
;
272 var upin_osds
= in_osds
- downin_osds
;
273 var upout_osds
= up_osds
- upin_osds
;
279 downout
: downout_osds
,
282 var osdcomponent
= me
.getComponent('osds');
283 osdcomponent
.update(Ext
.apply(osdcomponent
.data
, osds
));
285 me
.suspendLayout
= false;