]> arthur.barton.de Git - netdata.git/blob - web/goto-host-from-alarm.html
faster linking from registry to server on alarm clicks
[netdata.git] / web / goto-host-from-alarm.html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4     <title>Goto a host you know...</title>
5     <meta name="application-name" content="netdata">
6
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     <meta charset="utf-8">
9     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
10     <meta name="viewport" content="width=device-width, initial-scale=1">
11     <meta name="apple-mobile-web-app-capable" content="yes">
12     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
13
14     <script>
15         var netdataRegistry = true;
16         var netdataRegistryAfterMs = 0;
17         var netdataTheme = 'slate';
18         var netdataShowHelp = true;
19     </script>
20     <script type="text/javascript" src="dashboard.js?v47"></script>
21
22     <script>
23     var urlOptions = {
24         host: null,
25         chart: null,
26         family: null,
27         alarm: null,
28         alarm_unique_id: 0,
29         alarm_id: 0,
30         alarm_event_id: 0,
31         hasProperty: function(property) {
32             return typeof this[property] !== 'undefined';
33         }
34     };
35
36     function netdataQueryParse() {
37         var query = document.location.search.split('?');
38         var variables = query[1].split('&');
39         var len = variables.length;
40         while(len--) {
41             var p = variables[len].split('=');
42             if(urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined')
43                 urlOptions[p[0]] = decodeURIComponent(p[1]);
44         }
45
46         if(typeof urlOptions.family !== 'string')
47             urlOptions.family = '';
48
49         if(typeof urlOptions.chart !== 'string')
50             urlOptions.chart = '';
51     }
52
53     function netdataURL(url) {
54         return url + '#top'
55             + ';nowelcome=1'
56             // + ';show_alarms=1'
57             + ';chart=' + encodeURIComponent(urlOptions.chart)
58             + ';family=' + encodeURIComponent(urlOptions.family)
59             + ';alarm=' + encodeURIComponent(urlOptions.alarm)
60             + ';alarm_unique_id=' + urlOptions.alarm_unique_id.toString()
61             + ';alarm_id=' + urlOptions.alarm_id.toString()
62             + ';alarm_event_id=' + urlOptions.alarm_event_id.toString()
63             ;
64     }
65
66     var gotoServerValidateRemaining = 0;
67     var gotoServerMiddleClick = false;
68     var gotoServerStop = false;
69     var thisIsHttps = false;
70     var urlsInHttp = 0;
71     function gotoServerValidateUrl(id, guid, url) {
72         var penaldy = 0;
73         var error = 'failed';
74
75         if(thisIsHttps === false && url.toString().startsWith('https://')) {
76             // we penalize https only if the current url is http
77             // to allow the user walk through all its servers.
78             penaldy = 500;
79         }
80
81         else if(thisIsHttps === true && url.toString().startsWith('http://')) {
82             error = 'can\'t check';
83             urlsInHttp++;
84         }
85
86         var finalURL = netdataURL(url);
87
88         setTimeout(function() {
89             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>';
90
91             NETDATA.registry.hello(url, function(data) {
92                 if (data) {
93                     document.getElementById(guid + '-' + id + '-status').innerHTML = "OK";
94
95                     if(!gotoServerStop) {
96                         gotoServerStop = true;
97
98                         if(gotoServerMiddleClick) {
99                             window.open(finalURL);
100                             gotoServerMiddleClick = false;
101                             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)';
102                         }
103                         else
104                             document.location = finalURL;
105                     }
106                 }
107                 else {
108                     document.getElementById(guid + '-' + id + '-status').innerHTML = error;
109                     gotoServerValidateRemaining--;
110                     if(gotoServerValidateRemaining <= 0) {
111                         gotoServerMiddleClick = false;
112                         document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';
113
114                         if(thisIsHttps === true && urlsInHttp > 0) {
115                             document.getElementById('gotoServerResponse').innerHTML += '<br/>redirecting myself to HTTP to allow checking';
116                             document.location = document.location.toString().replace('https://', 'http://');
117                         }
118                     }
119                 }
120             });
121         }, (id * 50) + penaldy);
122     }
123
124     var netdataRegistryCallback = function(machines_array) {
125         if(typeof urlOptions.host !== 'string') {
126             document.getElementById('bodylog').innerHTML = "Sorry... bad request.";
127             return;
128         }
129
130         document.getElementById('message').innerHTML = 'These are the URLs this machine is known:';
131
132         if(document.location.toString().startsWith('https://'))
133             thisIsHttps = true;
134
135         if(machines_array) {
136             var len = machines_array.length;
137             while(len--) {
138                 if(machines_array[len].name === urlOptions.host) {
139                     var ulen = machines_array[len].alternate_urls.length;
140                     gotoServerValidateRemaining = ulen;
141                     while(ulen--)
142                         gotoServerValidateUrl(ulen, machines_array[len].guid, machines_array[len].alternate_urls[ulen]);
143                     return;
144                 }
145             }
146         }
147
148         document.getElementById('bodylog').innerHTML = "Sorry... your account is not linked to a netdata server named: <b>" + urlOptions.host + '</b>';
149     };
150
151     netdataQueryParse();
152     </script>
153
154 </head>
155 <body>
156 <div class="container" id="">
157     <div id="bodylog" style="padding-top: 8vmax; font-size: 2.0vmax;">
158         <span id="message">Please wait...</span>
159
160         <div style="padding-top: 20px;">
161             <table id="gotoServerList" class="table">
162             </table>
163         </div>
164         <p style="padding-top: 10px;"><small>
165             This page can only find netdata URLs you have already visited and are linked to your account on this netdata registry.
166         </small></p>
167         <div id="gotoServerResponse" style="display: block; width: 100%; text-align: center; padding-top: 20px;"></div>
168     </div>
169
170 </div>
171 </body>
172 </html>