]> arthur.barton.de Git - netdata.git/blob - web/goto-host-from-alarm.html
Merge pull request #2021 from ktsaou/master
[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 </head>
15 <script>
16     var netdataRegistry = true;
17     var netdataRegistryAfterMs = 0;
18     var netdataTheme = 'slate';
19     var netdataShowHelp = true;
20 </script>
21 <script type="text/javascript" src="dashboard.js?v20170105-7"></script>
22
23 <script>
24 var urlOptions = {
25     host: null,
26     chart: null,
27     family: null,
28     alarm: null,
29     alarm_unique_id: 0,
30     alarm_id: 0,
31     alarm_event_id: 0,
32     hasProperty: function(property) {
33         return typeof this[property] !== 'undefined';
34     }
35 };
36
37 function netdataQueryParse() {
38     var query = document.location.search.split('?');
39     var variables = query[1].split('&');
40     var len = variables.length;
41     while(len--) {
42         var p = variables[len].split('=');
43         if(urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined')
44             urlOptions[p[0]] = decodeURIComponent(p[1]);
45     }
46
47     if(typeof urlOptions.family !== 'string')
48         urlOptions.family = '';
49
50     if(typeof urlOptions.chart !== 'string')
51         urlOptions.chart = '';
52 }
53
54 function netdataURL(url) {
55     return url + '#top'
56         + ';nowelcome=1'
57         // + ';show_alarms=1'
58         + ';chart=' + encodeURIComponent(urlOptions.chart)
59         + ';family=' + encodeURIComponent(urlOptions.family)
60         + ';alarm=' + encodeURIComponent(urlOptions.alarm)
61         + ';alarm_unique_id=' + urlOptions.alarm_unique_id.toString()
62         + ';alarm_id=' + urlOptions.alarm_id.toString()
63         + ';alarm_event_id=' + urlOptions.alarm_event_id.toString()
64         ;
65 }
66
67 var gotoServerValidateRemaining = 0;
68 var gotoServerMiddleClick = false;
69 var gotoServerStop = false;
70 var thisIsHttps = false;
71 var urlsInHttp = 0;
72 function gotoServerValidateUrl(id, guid, url) {
73     var penaldy = 0;
74     var error = 'failed';
75
76     if(thisIsHttps === false && url.toString().startsWith('https://'))
77         // we penalize https only if the current url is http
78         // to allow the user walk through all its servers.
79         penaldy = 500;
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(typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid === guid) {
93                 // console.log('OK ' + id + ' URL: ' + url);
94                 document.getElementById(guid + '-' + id + '-status').innerHTML = "OK";
95
96                 if(!gotoServerStop) {
97                     gotoServerStop = true;
98
99                     if(gotoServerMiddleClick) {
100                         window.open(finalURL);
101                         gotoServerMiddleClick = false;
102                         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)';
103                     }
104                     else {
105                         document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:<br/><small>' + url + '</small>';
106                         document.location = finalURL;
107                     }
108                 }
109             }
110             else {
111                 if(typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid !== guid)
112                     error = 'wrong machine';
113
114                 document.getElementById(guid + '-' + id + '-status').innerHTML = error;
115                 gotoServerValidateRemaining--;
116                 if(gotoServerValidateRemaining <= 0) {
117                     gotoServerMiddleClick = false;
118                     document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';
119
120                     if(thisIsHttps === true && urlsInHttp > 0) {
121                         document.getElementById('gotoServerResponse').innerHTML += '<br/>redirecting myself to HTTP to allow checking';
122                         document.location = document.location.toString().replace('https://', 'http://');
123                     }
124                 }
125             }
126         });
127     }, (id * 50) + penaldy);
128 }
129
130 var netdataRegistryCallback = function(machines_array) {
131     if(typeof urlOptions.host !== 'string') {
132         document.getElementById('bodylog').innerHTML = "Sorry... bad request.";
133         return;
134     }
135
136     document.getElementById('message').innerHTML = 'These are the URLs this machine is known:';
137
138     if(document.location.toString().startsWith('https://'))
139         thisIsHttps = true;
140
141     if(machines_array) {
142         var guids = {};
143         var checked = {};
144         var len = machines_array.length;
145         var count = 0;
146
147         while(len--) {
148             if(machines_array[len].name === urlOptions.host) {
149                 var ulen = machines_array[len].alternate_urls.length;
150                 var guid = machines_array[len].guid;
151                 guids[guid] = true;
152
153                 gotoServerValidateRemaining = ulen;
154                 while(ulen--) {
155                     var url = machines_array[len].alternate_urls[ulen];
156                     checked[url] = true;
157                     gotoServerValidateUrl(count++, guid, url);
158                 }
159
160                 setTimeout(function() {
161                     if(gotoServerStop === false) {
162                         document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>';
163                         var guid;
164                         for(guid in guids) {
165                             NETDATA.registry.search(guid, function(data) {
166                                 // console.log(data);
167                                 len = data.urls.length;
168                                 while(len--) {
169                                     var url = data.urls[len][1];
170                                     // console.log(url);
171                                     if(typeof checked[url] === 'undefined') {
172                                         gotoServerValidateRemaining++;
173                                         checked[url] = true;
174                                         gotoServerValidateUrl(count++, guid, url);
175                                     }
176                                 }
177                             });
178                         }
179                     }
180                 }, 2000);
181
182                 return false;
183             }
184         }
185     }
186
187     document.getElementById('bodylog').innerHTML = "Sorry... your account is not linked to a netdata server named: <b>" + urlOptions.host + '</b>';
188 };
189
190 netdataQueryParse();
191 </script>
192 <body>
193 <div class="container" id="">
194     <div id="bodylog" style="padding-top: 8vmax; font-size: 2.0vmax;">
195         <span id="message">Please wait...</span>
196
197         <div style="padding-top: 20px;">
198             <table id="gotoServerList" class="table">
199             </table>
200         </div>
201         <p style="padding-top: 10px;"><small>
202             This page can only find netdata URLs you have already visited and are linked to your account on this netdata registry.
203         </small></p>
204         <div id="gotoServerResponse" style="display: block; width: 100%; text-align: center; padding-top: 20px;"></div>
205     </div>
206
207 </div>
208 </body>
209 </html>