? tinderbox_3a.diff Index: defaultStyle.css =================================================================== RCS file: defaultStyle.css diff -N defaultStyle.css --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ defaultStyle.css 14 Dec 2007 20:54:30 -0000 @@ -0,0 +1,17 @@ +body { + font-family: Verdana, Sans-Serif; + text-align: center; +} + +#tindertable tr th { + background-color: #AAA; +} + +#tindertable tr td { + vertical-align: top; + +} +/* needed because regular background-color overwrites tinderbox colors! */ +.bgcolor { + background-color: #EEE; +} Index: index.html =================================================================== RCS file: /cvsroot/mozilla/webtools/tinderbox/index.html,v retrieving revision 1.2 diff -u -8 -p -r1.2 index.html --- index.html 31 Jan 2002 04:22:39 -0000 1.2 +++ index.html 14 Dec 2007 20:54:30 -0000 @@ -1,12 +1,16 @@ -tinderbox - - -
-
- -You're probably looking for -showbuilds.cgi. - -
-
+ + + +

Tinderbox

+

This page refreshes every 5 minutes

+

For showbuilds.cgi click here

+ + + + +
+
+ + + Index: panelLoad.js =================================================================== RCS file: panelLoad.js diff -N panelLoad.js --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ panelLoad.js 14 Dec 2007 20:54:30 -0000 @@ -0,0 +1,73 @@ + /*extern ActiveXObject, XMLHttpRequest, document, window */ + var last_modified = new Date(0); + + function init() { + loadAllTreeData(); + } + + function loadAllTreeData() { + var url = 'showbuilds.cgi?tree_list_json=1'; + var req; + + + if (window.XMLHttpRequest) { + req = new XMLHttpRequest(); + } else if (window.ActiveXObject) { + req = new ActiveXObject("Microsoft.XMLHTTP"); + } + + req.open('GET', url, true); + req.setRequestHeader('If-Modified-Since', last_modified); + req.onreadystatechange = function() { + var jsonDat; + if (req.readyState != 4) { + return; + } + if (req.status == 200) { + last_modified = req.getResponseHeader('Last-Modified'); + try { + jsonDat = eval("(" + req.responseText.substring(0, req.responseText.length-2) + ")"); + + // alert(req.responseText); + + var quicklinks = ""; + var tindertable = ""; + + for(var tree in jsonDat) { + //alert("tree : " + tree); + quicklinks += "" + tree + " - "; + tindertable += ""; + for(var build in jsonDat[tree]) { + //alert("build : " + build); + for(var bldr in jsonDat[tree][build]) { + tindertable += ""; + } + tindertable += ""; + } + } + tindertable += "
Desc.Common Trees (Excluding l10n trees)
" + tree + "" + bldr + "
"; + //alert("bldr : " + bldr); + for(var property in jsonDat[tree][build][bldr]) { + tindertable += "    " +property + " : " + jsonDat[tree][build][bldr][property] + "
"; + } + tindertable += "
"; + + document.getElementById("quicklinks").innerHTML = quicklinks; + document.getElementById("tindertable").innerHTML = tindertable; + + + } catch(e) { + alert("could not parse JSON data:" + e); + } + } else if (req.status == 304) { + return; + } else { + div.innerHTML = "Error code " + req.status + " loading " + url; + } + } + + req.send(null); + return; + } + + setInterval('init()', 300000); // 5 minute refresh cycle Index: showbuilds.cgi =================================================================== RCS file: /cvsroot/mozilla/webtools/tinderbox/showbuilds.cgi,v retrieving revision 1.197 diff -u -8 -p -r1.197 showbuilds.cgi --- showbuilds.cgi 12 Jul 2007 23:06:23 -0000 1.197 +++ showbuilds.cgi 14 Dec 2007 20:54:30 -0000 @@ -16,27 +16,33 @@ # The Initial Developer of the Original Code is Netscape Communications # Corporation. Portions created by Netscape are # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # # Contributor(s): use strict; -use lib "@TINDERBOX_DIR@"; +use lib "/var/www/tinderbox"; require 'tbglobals.pl'; require 'imagelog.pl'; require 'showbuilds.pl'; umask 002; # Process the form arguments my %form = &split_cgi_args(); -&show_tree_selector(\%form), exit if $form{tree} eq ''; +if ($form{tree_list_json}) { + &show_tree_list_json(\%form); + exit; +} elsif ($form{tree} eq '') { + &show_tree_selector(\%form); + exit; +}; my $mode_count=0; foreach my $mode ('quickparse', 'express', 'rdf', 'flash', 'static', 'panel', 'hdml', 'vxml', 'wml', 'json') { $mode_count++ if defined($form{$mode}); } if ($mode_count > 1) { Index: showbuilds.pl =================================================================== RCS file: /cvsroot/mozilla/webtools/tinderbox/showbuilds.pl,v retrieving revision 1.31 diff -u -8 -p -r1.31 showbuilds.pl --- showbuilds.pl 13 Sep 2007 23:20:47 -0000 1.31 +++ showbuilds.pl 14 Dec 2007 20:54:31 -0000 @@ -15,17 +15,16 @@ # The Initial Developer of the Original Code is Netscape Communications # Corporation. Portions created by Netscape are # Copyright (C) 1998 Netscape Communications Corporation. All # Rights Reserved. # # Contributor(s): use strict; -use Data::Dumper; require 'header.pl'; my %colormap = ( null => 'a5a5a5', success => '11DD11', busted => 'EE0000', building => 'EEFF00', testfailed => 'FFAA00' @@ -125,26 +124,17 @@ sub do_tinderbox($) { ## sub do_json($) { my ($form_ref) = (@_); my $tinderbox_data = tb_load_data($form_ref); if (!$form_ref->{static}) { print "Content-type: text/javascript\n"; print "Content-Access-Control: allow <*>\n\n"; } - print "tinderbox_data"; - $Data::Dumper::Indent = 0; - my $line = Dumper($tinderbox_data); - $line =~ s/=>/:/g; - $line =~ s/\$VAR1//g; - $line =~ s/undef/'undef'/g; - $line =~ s/\n//g; - $line =~ s/\r//g; - $line =~ s/: ,/: '',/g; - print "$line\n"; + dump_json($tinderbox_data); } sub print_page_head($$) { my ($form_ref, $td) = (@_); my $tree = $form_ref->{tree}; print "Content-type: text/html\n\n\n" unless $form_ref->{static}; use POSIX qw(strftime); Index: tbglobals.pl =================================================================== RCS file: /cvsroot/mozilla/webtools/tinderbox/tbglobals.pl,v retrieving revision 1.63 diff -u -8 -p -r1.63 tbglobals.pl --- tbglobals.pl 29 Aug 2007 08:06:18 -0000 1.63 +++ tbglobals.pl 14 Dec 2007 20:54:31 -0000 @@ -21,16 +21,17 @@ use strict; # Reading the log backwards saves time when we only want the tail. use Backwards; use Digest::MD5 qw(md5_hex); use Tie::IxHash; use FileHandle; use Fcntl qw(:DEFAULT :flock); +use Data::Dumper; require 'header.pl'; # # Global variabls and functions for tinderbox # # @@ -49,17 +50,17 @@ $::CI_LINES_ADDED=9; $::CI_LINES_REMOVED=10; $::CI_LOG=11; # # Global variables # # Variables set from Makefile -$::default_cvsroot = "@CVSROOT@"; +$::default_cvsroot = "/cvsroot"; $::data_dir='data'; @::global_tree_list = (); undef @::global_tree_list; %::global_treedata = undef; # Always set nowdate to the current time. @@ -170,16 +171,74 @@ sub show_tree_selector { print "
    \n"; foreach (@list) { print "
  • $_\n"; } print "
"; } +## +# Return list of trees as JSON +## + +sub show_tree_list_json($) { + print "Content-type: text/javascript\n"; + print "Content-Access-Control: allow <*>\n\n"; + + my @requestedtreelist = &make_tree_list(); + + my %all_tree_data = (); + foreach my $tt (@requestedtreelist) { + next unless grep {$tt eq $_} @requestedtreelist; + tb_load_treedata($tt); + my %tree_data = (); + if (&is_tree_state_available($tt)) { + my $tree_state = &is_tree_open($tt) ? 'open' : 'closed'; + my $bonsai_tree = $::global_treedata->{$tt}->{bonsai_tree}; + $tree_data{'tree_state'} = $tree_state; + $tree_data{'bonsai_tree'} = $bonsai_tree; + } + + my (%quickdata); + #tb_loadquickparseinfo($tt, $::nowdate, \%quickdata); + open(QP, "< $tt/quickparse.txt"); + my @quickparse = ; + close(QP); + foreach my $line (@quickparse) { + my ($type, $tree, $name, $status, $starttime, $binaryurl) = + split('\|', $line); + next unless ($type eq 'Build'); + $all_tree_data{$tt}->{'builders'}->{$name} = { + status => $status, + starttime => $starttime, + binaryurl => $binaryurl, + }; + } + } + print "tinderbox_data = "; + dump_json(\%all_tree_data); + +# print Dumper(%all_tree_data); +} + +sub dump_json { + my ($data) = @_; + $Data::Dumper::Indent = 0; + my $line = Dumper($data); + $line =~ s/=>/:/g; + $line =~ s/\$VAR1//g; + $line =~ s/^ = //g; + $line =~ s/undef/'undef'/g; + $line =~ s/\n//g; + $line =~ s/\r//g; + $line =~ s/: ,/: '',/g; + print "$line\n"; +} + sub lock_datafile { my ($file) = @_; my $lock_fh = new FileHandle ">>$file" or die "Couldn't open semaphore file, $file: $!"; # Get an exclusive lock with a non-blocking request unless (flock($lock_fh, LOCK_EX|LOCK_NB)) {