Add a page that cycles through v2 dashboards
[WebKit.git] / Websites / perf.webkit.org / public / cycler.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="refresh" content="3600">
5 <style>
6 html, body, iframe { margin: 0; padding: 0; border: none; width: 100%; height: 100%; }
7 </style>
8 </head>
9 <body>
10 <script>
11
12 var urls = [];
13 var CycleSeconds = 30;
14
15 var request = new XMLHttpRequest();
16 request.open('GET', '/data/manifest.json', true);
17 request.send(null);
18 request.onreadystatechange = function () {
19     if (request.readyState != XMLHttpRequest.DONE)
20         return;
21     if (request.status !== 200) {
22         alert('Failed with status: ' + request.status);
23         return;
24     }
25
26     var manifest = JSON.parse(request.responseText);
27     var dashboards = [];
28     for (var dashboardName in manifest.dashboards)
29         dashboards.push(dashboardName);
30     dashboards = dashboards.sort();
31
32     for (var dashboardName of dashboards)
33         urls.push('/v2/#/dashboard/' + dashboardName);
34
35     loadURLAt(0);
36 }
37
38 var oldIframe = null;
39 function loadURLAt(i) {
40     var newIframe = document.createElement('iframe');
41     document.body.appendChild(newIframe);
42     newIframe.src = urls[i];
43     newIframe.onload = showNewFrameIfLoaded.bind(window, i, newIframe);
44 }
45
46 function showNewFrameIfLoaded(i, iframe) {
47     var doc = iframe.contentDocument;
48     if ((!doc.querySelector('.chart') && !doc.querySelector('.failure')) || doc.querySelector('.progress'))
49         return setTimeout(showNewFrameIfLoaded.bind(window, i, iframe), 500);
50
51     if (oldIframe)
52         document.body.removeChild(oldIframe);
53     oldIframe = iframe;
54
55     i = (i + 1) % urls.length;
56     setTimeout(loadURLAt.bind(window, i), CycleSeconds * 1000);
57 }
58
59 </script>
60 </body>
61 </html>