]>
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',
26 html
: '<h3>' + gettext('Monitors') + '</h3>'
40 '<h3>' + gettext('OSDs') + '</h3>',
41 '<table class="osds">',
43 '<td><i class="fa fa-fw good fa-circle"></i>',
46 '<td><i class="fa fa-fw warning fa-circle-o"></i>',
51 '<td><i class="fa fa-fw good fa-arrow-circle-up"></i>',
58 '<td><i class="fa fa-fw critical fa-arrow-circle-down"></i>',
79 '<h3>' + gettext('PGs') + '</h3>',
81 '<div class="left-aligned">{state_name}:</div>',
82 '<div class="right-aligned">{count}</div><br />',
83 '<div style="clear:both"></div>',
88 updateAll: function(health
, monmap
, pgmap
, osdmap
, quorum_names
) {
90 me
.suspendLayout
= true;
93 var pgs_by_state
= pgmap
.pgs_by_state
|| [];
94 pgs_by_state
.sort(function(a
,b
){
95 return (a
.state_name
< b
.state_name
)?-1:(a
.state_name
=== b
.state_name
)?0:1;
97 me
.getComponent('pgs').update({states
: pgs_by_state
});
99 var downinregex
= /(\d+) osds down/;
100 var monnameregex
= /^mon.(\S+) /;
104 // we collect monitor/osd information from the checks
105 Ext
.Object
.each(health
.checks
, function(key
, value
, obj
) {
107 if (key
=== 'OSD_DOWN') {
108 found
= value
.message
.match(downinregex
);
109 if (found
!== null) {
110 downin_osds
= parseInt(found
[1],10);
113 else if (Ext
.String
.startsWith(key
, 'MON_')) {
117 found
= value
.detail
[0].match(monnameregex
);
118 if (found
!== null) {
119 if (!monmsgs
[found
[1]]) {
120 monmsgs
[found
[1]] = [];
122 monmsgs
[found
[1]].push({
123 text
: value
.detail
.join("\n"),
124 severity
: value
.severity
130 // update osds counts
132 var total_osds
= osdmap
.osdmap
.num_osds
|| 0;
133 var in_osds
= osdmap
.osdmap
.num_in_osds
|| 0;
134 var up_osds
= osdmap
.osdmap
.num_up_osds
|| 0;
135 var out_osds
= total_osds
- in_osds
;
136 var down_osds
= total_osds
- up_osds
;
138 var downout_osds
= down_osds
- downin_osds
;
139 var upin_osds
= in_osds
- downin_osds
;
140 var upout_osds
= up_osds
- upin_osds
;
146 downout
: downout_osds
148 me
.getComponent('osds').update(osds
);
150 // update the monitors
151 var mons
= monmap
.mons
.sort(function(a
,b
) {
152 return (a
.name
< b
.name
)?-1:(a
.name
> b
.name
)?1:0;
155 var monContainer
= me
.getComponent('monitors');
158 for (i
= 0; i
< mons
.length
; i
++) {
159 var monitor
= monContainer
.getComponent('mon.' + mons
[i
].name
);
161 // since mons are already sorted, and
162 // we always have a sorted list
163 // we can add it at the mons+1 position (because of the title)
164 monitor
= monContainer
.insert(i
+1, {
165 xtype
: 'pveCephMonitorWidget',
166 itemId
: 'mon.' + mons
[i
].name
169 monitor
.updateMonitor(mons
[i
], monmsgs
, quorum_names
);
171 me
.suspendLayout
= false;
176 Ext
.define('PVE.ceph.MonitorWidget', {
177 extend
: 'Ext.Component',
178 alias
: 'widget.pveCephMonitorWidget',
180 userCls
: 'monitor inline-block',
183 health
: 'HEALTH_ERR',
185 iconCls
: PVE
.Utils
.get_health_icon(),
191 '<i class="fa fa-fw {iconCls}"></i>'
194 // expects 3 variables which are
195 // timestate: the status from timechecks.mons
196 // data: the monmap.mons data
197 // quorum_names: the quorum_names array
198 updateMonitor: function(data
, monmsgs
, quorum_names
) {
200 var state
= 'HEALTH_ERR';
209 quorum_names
.indexOf(data
.name
) !== -1) {
213 if (monmsgs
[data
.name
]) {
214 Ext
.Array
.forEach(monmsgs
[data
.name
], function(msg
) {
215 if (healthstates
[msg
.severity
] < healthstates
[state
]) {
216 state
= msg
.severity
;
219 text
+= msg
.text
+ "\n";
223 me
.update(Ext
.apply(me
.data
, {
228 iconCls
: PVE
.Utils
.get_health_icon(PVE
.Utils
.map_ceph_health
[state
])
235 fn: function(events
, element
) {
236 var me
= this.component
;
241 me
.tooltip
= Ext
.create('Ext.tip.ToolTip', {
244 renderTo
: Ext
.getBody(),
245 html
: gettext('Monitor') + ': ' + me
.data
.name
+ '<br />' +
246 gettext('Address') + ': ' + me
.data
.addr
+ '<br />' +
247 gettext('Health') + ': ' + me
.data
.health
+ '<br />' +
256 fn: function(events
, element
) {
257 var me
= this.component
;
259 me
.tooltip
.destroy();