]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/dc/Health.js
ui: guest import: actually copy vmconfig state before applying values
[pve-manager.git] / www / manager6 / dc / Health.js
index 487012fed60791ff5b244e74c112080f42bf70ac..5a56f089b192490401a4394a9ec48ddebca9b54d 100644 (file)
@@ -5,60 +5,52 @@ Ext.define('PVE.dc.Health', {
     title: gettext('Health'),
 
     bodyPadding: 10,
-    height: 220,
+    height: 250,
     layout: {
        type: 'hbox',
-       align: 'stretch'
+       align: 'stretch',
     },
 
     defaults: {
        flex: 1,
        xtype: 'box',
        style: {
-           'text-align':'center'
-       }
+           'text-align': 'center',
+       },
     },
 
-    cepherrors: 0,
+    nodeList: [],
+    nodeIndex: 0,
 
     updateStatus: function(store, records, success) {
-       var me = this;
+       let me = this;
        if (!success) {
            return;
        }
 
-       var cluster = {
+       let cluster = {
            iconCls: PVE.Utils.get_health_icon('good', true),
-           text: gettext("Standalone node - no cluster defined")
+           text: gettext("Standalone node - no cluster defined"),
        };
-
-       var nodes = {
+       let nodes = {
            online: 0,
-           offline: 0
+           offline: 0,
        };
-
-       // by default we have one node
-       var numNodes = 1;
-       var i;
-
-       for (i = 0; i < records.length; i++) {
-           var item = records[i];
-           if (item.data.type === 'node') {
-               nodes[item.data.online === 1 ? 'online':'offline']++;
-           } else if(item.data.type === 'cluster') {
-               cluster.text = gettext("Cluster") + ": ";
-               cluster.text += item.data.name + ", ";
-               cluster.text += gettext("Quorate") + ": ";
-               cluster.text += Proxmox.Utils.format_boolean(item.data.quorate);
-               if (item.data.quorate != 1) {
+       let numNodes = 1; // by default we have one node
+       for (const { data } of records) {
+           if (data.type === 'node') {
+               nodes[data.online === 1 ? 'online':'offline']++;
+           } else if (data.type === 'cluster') {
+               cluster.text = `${gettext("Cluster")}: ${data.name}, ${gettext("Quorate")}: `;
+               cluster.text += Proxmox.Utils.format_boolean(data.quorate);
+               if (data.quorate !== 1) {
                    cluster.iconCls = PVE.Utils.get_health_icon('critical', true);
                }
-
-               numNodes = item.data.nodes;
+               numNodes = data.nodes;
            }
        }
 
-       if (numNodes !== (nodes.online + nodes.offline)) {
+       if (numNodes !== nodes.online + nodes.offline) {
            nodes.offline = numNodes - nodes.online;
        }
 
@@ -67,51 +59,44 @@ Ext.define('PVE.dc.Health', {
     },
 
     updateCeph: function(store, records, success) {
-       var me = this;
-       var cephstatus = me.getComponent('ceph');
+       let me = this;
+       let cephstatus = me.getComponent('ceph');
        if (!success || records.length < 1) {
-
-           // if ceph status is already visible
-           // dont stop to update
            if (cephstatus.isVisible()) {
-               return;
+               return; // if ceph status is already visible don't stop to update
            }
-           me.cepherrors++;
-
-           // after 3 unsuccessful tries of
-           // /nodes/localhost/ceph/status
-           // we give up (there probably is no ceph installed)
-           if (me.cepherrors >= 3) {
+           // try all nodes until we either get a successful api call, or we tried all nodes
+           if (++me.nodeIndex >= me.nodeList.length) {
                me.cephstore.stopUpdate();
+           } else {
+               store.getProxy().setUrl(`/api2/json/nodes/${me.nodeList[me.nodeIndex].node}/ceph/status`);
            }
            return;
        }
 
-       me.cepherrors = 0;
-
-       var state = PVE.Utils.render_ceph_health(records[0].data.health || {});
+       let state = PVE.Utils.render_ceph_health(records[0].data.health || {});
        cephstatus.updateHealth(state);
        cephstatus.setVisible(true);
     },
 
     listeners: {
        destroy: function() {
-           var me = this;
+           let me = this;
            me.cephstore.stopUpdate();
-       }
+       },
     },
 
     items: [
        {
            itemId: 'clusterstatus',
            xtype: 'pveHealthWidget',
-           title: gettext('Status')
+           title: gettext('Status'),
        },
        {
            itemId: 'nodestatus',
            data: {
                online: 0,
-               offline: 0
+               offline: 0,
            },
            tpl: [
                '<h3>' + gettext('Nodes') + '</h3><br />',
@@ -127,8 +112,8 @@ Ext.define('PVE.dc.Health', {
                gettext('Offline'),
                '</div>',
                '<div class="right-aligned">{offline}</div>',
-               '</div>'
-           ]
+               '</div>',
+           ],
        },
        {
            itemId: 'ceph',
@@ -141,42 +126,27 @@ Ext.define('PVE.dc.Health', {
            listeners: {
                element: 'el',
                click: function() {
-                   var me = this;
-                   var sp = Ext.state.Manager.getProvider();
-
-                   // preselect the ceph tab
-                   sp.set('nodetab', {value:'ceph'});
-
-                   // select the first node which is online
-                   var nodeid = '';
-                   var nodes = PVE.data.ResourceStore.getNodes();
-                   Ext.Array.some(nodes, function(node) {
-                       if (node.running) {
-                           nodeid = node.id;
-                           return true;
-                       }
-
-                       return false;
-                   });
-                   Ext.ComponentQuery.query('pveResourceTree')[0].selectById(nodeid);
-               }
-           }
-       }
+                   Ext.state.Manager.getProvider().set('dctab', { value: 'ceph' }, true);
+               },
+           },
+       },
     ],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
+       me.nodeList = PVE.data.ResourceStore.getNodes();
+       me.nodeIndex = 0;
        me.cephstore = Ext.create('Proxmox.data.UpdateStore', {
            interval: 3000,
            storeid: 'pve-cluster-ceph',
            proxy: {
                type: 'proxmox',
-               url: '/api2/json/nodes/localhost/ceph/status'
-           }
+               url: `/api2/json/nodes/${me.nodeList[me.nodeIndex].node}/ceph/status`,
+           },
        });
        me.callParent();
-       me.cephstore.startUpdate();
        me.mon(me.cephstore, 'load', me.updateCeph, me);
-    }
+       me.cephstore.startUpdate();
+    },
 });