]> arthur.barton.de Git - netdata.git/blobdiff - web/goto-host-from-alarm.html
Merge pull request #2021 from ktsaou/master
[netdata.git] / web / goto-host-from-alarm.html
old mode 100755 (executable)
new mode 100644 (file)
index 6cbca40..16ed2b9
     <meta name="apple-mobile-web-app-capable" content="yes">
     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
 
-    <script>
-        var netdataRegistry = true;
-        var netdataTheme = 'slate';
-        var netdataShowHelp = true;
-    </script>
-    <script type="text/javascript" src="dashboard.js?v46"></script>
-
-    <script>
-    var urlOptions = {
-        host: null,
-        chart: null,
-        family: null,
-        hasProperty: function(property) {
-            return typeof this[property] !== 'undefined';
-        }
-    };
-
-    function netdataQueryParse() {
-        var query = document.location.search.split('?');
-        var variables = query[1].split('&');
-        var len = variables.length;
-        while(len--) {
-            var p = variables[len].split('=');
-            if(urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined')
-                urlOptions[p[0]] = p[1];
-        }
+</head>
+<script>
+    var netdataRegistry = true;
+    var netdataRegistryAfterMs = 0;
+    var netdataTheme = 'slate';
+    var netdataShowHelp = true;
+</script>
+<script type="text/javascript" src="dashboard.js?v20170105-7"></script>
+
+<script>
+var urlOptions = {
+    host: null,
+    chart: null,
+    family: null,
+    alarm: null,
+    alarm_unique_id: 0,
+    alarm_id: 0,
+    alarm_event_id: 0,
+    hasProperty: function(property) {
+        return typeof this[property] !== 'undefined';
     }
-
-    function netdataURL(url) {
-        return url + '#top;show_alarms=true;chart=' + urlOptions.chart + ';family=' + urlOptions.family;
+};
+
+function netdataQueryParse() {
+    var query = document.location.search.split('?');
+    var variables = query[1].split('&');
+    var len = variables.length;
+    while(len--) {
+        var p = variables[len].split('=');
+        if(urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined')
+            urlOptions[p[0]] = decodeURIComponent(p[1]);
     }
 
-    var gotoServerValidateRemaining = 0;
-    var gotoServerMiddleClick = false;
-    var gotoServerStop = false;
-    function gotoServerValidateUrl(id, guid, url) {
-        var penaldy = 0;
-        if(document.location.toString().startsWith('http://') && url.toString().startsWith('https://'))
-                // we penalize https only if the current url is http
-                // to allow the user walk through all its servers.
-                penaldy = 500;
+    if(typeof urlOptions.family !== 'string')
+        urlOptions.family = '';
 
-        var finalURL = netdataURL(url);
+    if(typeof urlOptions.chart !== 'string')
+        urlOptions.chart = '';
+}
+
+function netdataURL(url) {
+    return url + '#top'
+        + ';nowelcome=1'
+        // + ';show_alarms=1'
+        + ';chart=' + encodeURIComponent(urlOptions.chart)
+        + ';family=' + encodeURIComponent(urlOptions.family)
+        + ';alarm=' + encodeURIComponent(urlOptions.alarm)
+        + ';alarm_unique_id=' + urlOptions.alarm_unique_id.toString()
+        + ';alarm_id=' + urlOptions.alarm_id.toString()
+        + ';alarm_event_id=' + urlOptions.alarm_event_id.toString()
+        ;
+}
+
+var gotoServerValidateRemaining = 0;
+var gotoServerMiddleClick = false;
+var gotoServerStop = false;
+var thisIsHttps = false;
+var urlsInHttp = 0;
+function gotoServerValidateUrl(id, guid, url) {
+    var penaldy = 0;
+    var error = 'failed';
+
+    if(thisIsHttps === false && url.toString().startsWith('https://'))
+        // we penalize https only if the current url is http
+        // to allow the user walk through all its servers.
+        penaldy = 500;
+
+    else if(thisIsHttps === true && url.toString().startsWith('http://')) {
+        error = 'can\'t check';
+        urlsInHttp++;
+    }
 
-        setTimeout(function() {
-            document.getElementById('gotoServerList').innerHTML += '<tr><td style="padding-left: 20px;"><a href="' + finalURL + '" target="_blank">' + url + '</a></td><td style="padding-left: 30px;"><code id="' + guid + '-' + id + '-status">checking...</code></td></tr>';
+    var finalURL = netdataURL(url);
 
-            NETDATA.registry.hello(url, function(data) {
-                if (data) {
-                    document.getElementById(guid + '-' + id + '-status').innerHTML = "OK";
+    setTimeout(function() {
+        document.getElementById('gotoServerList').innerHTML += '<tr><td style="padding-left: 20px;"><a href="' + finalURL + '" target="_blank">' + url + '</a></td><td style="padding-left: 30px;"><code id="' + guid + '-' + id + '-status">checking...</code></td></tr>';
 
-                    if(!gotoServerStop) {
-                        gotoServerStop = true;
+        NETDATA.registry.hello(url, function(data) {
+            if(typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid === guid) {
+                // console.log('OK ' + id + ' URL: ' + url);
+                document.getElementById(guid + '-' + id + '-status').innerHTML = "OK";
 
-                        if(gotoServerMiddleClick) {
-                            window.open(finalURL, '_blank');
-                            gotoServerMiddleClick = false;
-                            document.getElementById('gotoServerResponse').innerHTML = '<b>Opening new window to ' + NETDATA.registry.machines[guid].name + '<br/><a href="' + finalURL + '">' + url + '</a></b><br/>(check your pop-up blocker if it fails)';
-                        }
-                        else
-                            console.log(document.location); // = finalURL;
+                if(!gotoServerStop) {
+                    gotoServerStop = true;
+
+                    if(gotoServerMiddleClick) {
+                        window.open(finalURL);
+                        gotoServerMiddleClick = false;
+                        document.getElementById('gotoServerResponse').innerHTML = '<b>Opening new window to ' + NETDATA.registry.machines[guid].name + '<br/><a href="' + finalURL + '">' + url + '</a></b><br/>(check your pop-up blocker if it fails)';
+                    }
+                    else {
+                        document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:<br/><small>' + url + '</small>';
+                        document.location = finalURL;
                     }
                 }
-                else {
-                    document.getElementById(guid + '-' + id + '-status').innerHTML = "failed!";
-                    gotoServerValidateRemaining--;
-                    if(gotoServerValidateRemaining <= 0) {
-                        gotoServerMiddleClick = false;
-                        document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';
+            }
+            else {
+                if(typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid !== guid)
+                    error = 'wrong machine';
+
+                document.getElementById(guid + '-' + id + '-status').innerHTML = error;
+                gotoServerValidateRemaining--;
+                if(gotoServerValidateRemaining <= 0) {
+                    gotoServerMiddleClick = false;
+                    document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';
+
+                    if(thisIsHttps === true && urlsInHttp > 0) {
+                        document.getElementById('gotoServerResponse').innerHTML += '<br/>redirecting myself to HTTP to allow checking';
+                        document.location = document.location.toString().replace('https://', 'http://');
                     }
                 }
-            });
-        }, (id * 50) + penaldy);
+            }
+        });
+    }, (id * 50) + penaldy);
+}
+
+var netdataRegistryCallback = function(machines_array) {
+    if(typeof urlOptions.host !== 'string') {
+        document.getElementById('bodylog').innerHTML = "Sorry... bad request.";
+        return;
     }
 
-    var netdataRegistryCallback = function(machines_array) {
-        if(machines_array) {
-            var len = machines_array.length;
-            while(len--) {
-                if(machines_array[len].name === urlOptions.host) {
-                    var ulen = machines_array[len].alternate_urls.length;
-                    gotoServerValidateRemaining = ulen;
-                    while(ulen--)
-                        gotoServerValidateUrl(ulen, machines_array[len].guid, machines_array[len].alternate_urls[ulen]);
-                    return;
-                }
-            }
-        }
+    document.getElementById('message').innerHTML = 'These are the URLs this machine is known:';
 
-        document.getElementById('bodylog').innerHTML = "Sorry... your account is not linked to a netdata server named: <b>" + urlOptions.host + '</b>';
-    };
+    if(document.location.toString().startsWith('https://'))
+        thisIsHttps = true;
 
-    netdataQueryParse();
+    if(machines_array) {
+        var guids = {};
+        var checked = {};
+        var len = machines_array.length;
+        var count = 0;
 
-    if(typeof urlOptions.host !== 'string')
-        document.getElementById('bodylog').innerHTML = "Sorry... bad request.";
+        while(len--) {
+            if(machines_array[len].name === urlOptions.host) {
+                var ulen = machines_array[len].alternate_urls.length;
+                var guid = machines_array[len].guid;
+                guids[guid] = true;
+
+                gotoServerValidateRemaining = ulen;
+                while(ulen--) {
+                    var url = machines_array[len].alternate_urls[ulen];
+                    checked[url] = true;
+                    gotoServerValidateUrl(count++, guid, url);
+                }
 
-    if(typeof urlOptions.family !== 'string')
-        urlOptions.family = '';
+                setTimeout(function() {
+                    if(gotoServerStop === false) {
+                        document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>';
+                        var guid;
+                        for(guid in guids) {
+                            NETDATA.registry.search(guid, function(data) {
+                                // console.log(data);
+                                len = data.urls.length;
+                                while(len--) {
+                                    var url = data.urls[len][1];
+                                    // console.log(url);
+                                    if(typeof checked[url] === 'undefined') {
+                                        gotoServerValidateRemaining++;
+                                        checked[url] = true;
+                                        gotoServerValidateUrl(count++, guid, url);
+                                    }
+                                }
+                            });
+                        }
+                    }
+                }, 2000);
 
-    if(typeof urlOptions.chart !== 'string')
-        urlOptions.chart = '';
-    </script>
+                return false;
+            }
+        }
+    }
 
-</head>
+    document.getElementById('bodylog').innerHTML = "Sorry... your account is not linked to a netdata server named: <b>" + urlOptions.host + '</b>';
+};
+
+netdataQueryParse();
+</script>
 <body>
 <div class="container" id="">
-    <div id="bodylog" style="padding-top: 10vh; font-size: 2vh;">
-        Please wait...
+    <div id="bodylog" style="padding-top: 8vmax; font-size: 2.0vmax;">
+        <span id="message">Please wait...</span>
 
         <div style="padding-top: 20px;">
             <table id="gotoServerList" class="table">
             </table>
         </div>
         <p style="padding-top: 10px;"><small>
-            This page can only find netdata URLs you have already visited and are active for your account on this registry.
+            This page can only find netdata URLs you have already visited and are linked to your account on this netdata registry.
         </small></p>
         <div id="gotoServerResponse" style="display: block; width: 100%; text-align: center; padding-top: 20px;"></div>
     </div>