xref: /netbsd-src/external/gpl3/gcc/dist/contrib/regression/GCC_Regression_Tester.wdgt/widget.html (revision 4fee23f98c45552038ad6b5bd05124a41302fb01)
1*4fee23f9Smrg<!-- Get and update the GCC regression tester's web page.
2*4fee23f9Smrg     Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
3*4fee23f9Smrg
4*4fee23f9SmrgThis file is part of GCC.
5*4fee23f9Smrg
6*4fee23f9SmrgGCC is free software; you can redistribute it and/or modify it under
7*4fee23f9Smrgthe terms of the GNU General Public License as published by the Free
8*4fee23f9SmrgSoftware Foundation; either version 3, or (at your option) any later
9*4fee23f9Smrgversion.
10*4fee23f9Smrg
11*4fee23f9SmrgGCC is distributed in the hope that it will be useful, but WITHOUT ANY
12*4fee23f9SmrgWARRANTY; without even the implied warranty of MERCHANTABILITY or
13*4fee23f9SmrgFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14*4fee23f9Smrgfor more details.
15*4fee23f9Smrg
16*4fee23f9SmrgYou should have received a copy of the GNU General Public License
17*4fee23f9Smrgalong with GCC; see the file COPYING3.  If not see
18*4fee23f9Smrg<http://www.gnu.org/licenses/>.  -->
19*4fee23f9Smrg<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
20*4fee23f9Smrg        "http://www.w3.org/TR/html4/strict.dtd">
21*4fee23f9Smrg<head>
22*4fee23f9Smrg<meta http-equiv="Content-Script-Type" content="text/javascript">
23*4fee23f9Smrg<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
24*4fee23f9Smrg<title>Regression Tester Status</title>
25*4fee23f9Smrg<style type='text/css'>
26*4fee23f9Smrgbody {
27*4fee23f9Smrg	margin: 0px;
28*4fee23f9Smrg	padding: 0px;
29*4fee23f9Smrg}
30*4fee23f9Smrgpre {
31*4fee23f9Smrg	font-family: Monaco;
32*4fee23f9Smrg	font-size: 9px;
33*4fee23f9Smrg	margin: 0px;
34*4fee23f9Smrg	padding: 1px 2px 1px 2px;
35*4fee23f9Smrg	color: black;
36*4fee23f9Smrg	background-color: white;
37*4fee23f9Smrg	opacity: 0.8;
38*4fee23f9Smrg}
39*4fee23f9Smrg</style>
40*4fee23f9Smrg<script type='text/javascript' defer>
41*4fee23f9Smrg// A string representing NUM, with a leading zero if it would be 1 digit long
42*4fee23f9Smrgfunction dig2 (num)
43*4fee23f9Smrg{
44*4fee23f9Smrg    var result = num.toString();
45*4fee23f9Smrg    if (result.length == 1)
46*4fee23f9Smrg	return '0' + result;
47*4fee23f9Smrg    else
48*4fee23f9Smrg	return result;
49*4fee23f9Smrg}
50*4fee23f9Smrg
51*4fee23f9Smrg// Get DATE as a string in standard ISO format in UTC
52*4fee23f9Smrgfunction getISO (date)
53*4fee23f9Smrg{
54*4fee23f9Smrg    return (date.getUTCFullYear().toString() + '-'
55*4fee23f9Smrg	    + dig2 (date.getUTCMonth() + 1) + '-'
56*4fee23f9Smrg	    + dig2 (date.getUTCDate()) + 'T'
57*4fee23f9Smrg	    + dig2 (date.getUTCHours()) + ':'
58*4fee23f9Smrg	    + dig2 (date.getUTCMinutes()) + 'Z');
59*4fee23f9Smrg}
60*4fee23f9Smrg
61*4fee23f9Smrg// STR is a bunch of lines of the form '<key>: <date>' where <date> is in
62*4fee23f9Smrg// standard ISO UTC format.  Return a Date object corresponding to KEY, or null
63*4fee23f9Smrg// if none is found.
64*4fee23f9Smrgfunction fromISO (str, key)
65*4fee23f9Smrg{
66*4fee23f9Smrg    var rx = new RegExp (key + ": (\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)Z");
67*4fee23f9Smrg    var match = rx.exec (str);
68*4fee23f9Smrg    if (match == null || match.length != 7)
69*4fee23f9Smrg	return null;
70*4fee23f9Smrg    var date = new Date(0);
71*4fee23f9Smrg    date.setUTCFullYear (match[1], match[2] - 1, match[3]);
72*4fee23f9Smrg    date.setUTCHours (match[4], match[5], match[6], 0);
73*4fee23f9Smrg    return date;
74*4fee23f9Smrg}
75*4fee23f9Smrg
76*4fee23f9Smrg// Update the data
77*4fee23f9Smrgfunction updateContents () {
78*4fee23f9Smrg    var url = 'http://gcc.gnu.org/regtest/HEAD/status.txt';
79*4fee23f9Smrg    if (document.URL && document.URL.substring (0,5) == 'http:') {
80*4fee23f9Smrg	url = document.URL.replace ('widget.html','status.txt');
81*4fee23f9Smrg    }
82*4fee23f9Smrg    var xml_request = new XMLHttpRequest();
83*4fee23f9Smrg
84*4fee23f9Smrg    xml_request.onload = function(e)
85*4fee23f9Smrg	{
86*4fee23f9Smrg	    gotContents(e, xml_request);
87*4fee23f9Smrg	}
88*4fee23f9Smrg    xml_request.open("GET", url);
89*4fee23f9Smrg    xml_request.setRequestHeader("Cache-Control", "max-age=30");
90*4fee23f9Smrg    xml_request.send(null);
91*4fee23f9Smrg}
92*4fee23f9Smrg
93*4fee23f9Smrgfunction gotContents (event, request) {
94*4fee23f9Smrg    if (request.status != 200)
95*4fee23f9Smrg        return;
96*4fee23f9Smrg
97*4fee23f9Smrg    if (! request.responseText)
98*4fee23f9Smrg	return;
99*4fee23f9Smrg
100*4fee23f9Smrg    var txt = request.responseText;
101*4fee23f9Smrg    var today = new Date();
102*4fee23f9Smrg    var date_r = fromISO (txt, "Date");
103*4fee23f9Smrg    var completed_r = fromISO (txt, "Test-Completed");
104*4fee23f9Smrg    var now_test_r = fromISO (txt, "Now-Testing");
105*4fee23f9Smrg    var eta = "";
106*4fee23f9Smrg
107*4fee23f9Smrg    if (date_r != null && completed_r != null && now_test_r != null)
108*4fee23f9Smrg	{
109*4fee23f9Smrg	    var eta_r = new Date (now_test_r.getTime()
110*4fee23f9Smrg				  + completed_r.getTime() - date_r.getTime());
111*4fee23f9Smrg	    eta = "ETA: " + getISO (eta_r) + '\n';
112*4fee23f9Smrg	}
113*4fee23f9Smrg
114*4fee23f9Smrg    var val = txt + "Now: " + getISO (today) + '\n' + eta;
115*4fee23f9Smrg    var contEl = document.getElementById ("contents");
116*4fee23f9Smrg    contEl.removeChild(contEl.firstChild);
117*4fee23f9Smrg    contEl.appendChild (document.createTextNode (val));
118*4fee23f9Smrg}
119*4fee23f9Smrg
120*4fee23f9Smrgvar mainTimer = null;
121*4fee23f9Smrg
122*4fee23f9Smrgfunction myOnShow ()
123*4fee23f9Smrg{
124*4fee23f9Smrg    if (! mainTimer) {
125*4fee23f9Smrg	mainTimer = setInterval (updateContents, 60000);
126*4fee23f9Smrg    }
127*4fee23f9Smrg    updateContents();
128*4fee23f9Smrg}
129*4fee23f9Smrg
130*4fee23f9Smrgfunction myOnHide ()
131*4fee23f9Smrg{
132*4fee23f9Smrg    if (mainTimer) {
133*4fee23f9Smrg	clearInterval (mainTimer);
134*4fee23f9Smrg	mainTimer = null;
135*4fee23f9Smrg    }
136*4fee23f9Smrg}
137*4fee23f9Smrg
138*4fee23f9Smrgfunction myOnLoad ()
139*4fee23f9Smrg{
140*4fee23f9Smrg    if ( window.widget ) {
141*4fee23f9Smrg	widget.onshow = myOnShow;
142*4fee23f9Smrg	widget.onhide = myOnHide;
143*4fee23f9Smrg    }
144*4fee23f9Smrg    myOnShow();
145*4fee23f9Smrg}
146*4fee23f9Smrg</script>
147*4fee23f9Smrg</head>
148*4fee23f9Smrg
149*4fee23f9Smrg<body onLoad='myOnLoad();'>
150*4fee23f9Smrg<pre id="contents">Loading...</pre>
151*4fee23f9Smrg</body>
152*4fee23f9Smrg</html>
153