From 43d120814c64e564a82f37842df8b21d78f28914 Mon Sep 17 00:00:00 2001 From: David Brown Date: Fri, 1 Jul 2016 19:40:19 +0100 Subject: [PATCH] Log scanner beginning to work. --- ReadMe.md | 6 +- src/tools/make/buildall.pl | 131 +++++++++++++++++++++++++++++-------- src/tools/make/pt.pl | 23 ++++--- 3 files changed, 117 insertions(+), 43 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index c6e75b4f..d80ed5eb 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,3 +1,5 @@ +![Build status](http://brownsmeet.com/build-status.svg) + ### Ѵishap Oberon [Ѵishap Oberon](http://oberon.vishap.am) is a free and open source (GPLv3) @@ -26,10 +28,6 @@ languages, following the principals of Einstein and Antoine de Saint-Exupéry: > when there is no longer anything to take away. (Antoine de Saint-Exupéry, > translated by Lewis Galantière.) -##### Build status - -![Build status](http://brownsmeet.com/build-status.svg) - #### Installation ##### Prerequisites diff --git a/src/tools/make/buildall.pl b/src/tools/make/buildall.pl index c67642e8..35a19045 100755 --- a/src/tools/make/buildall.pl +++ b/src/tools/make/buildall.pl @@ -56,32 +56,105 @@ while ((my $pid = wait) > 0) {print "Child pid $pid completed.\n";} # # All builds have completed. Now scan the logs for pass/fail and build the passing report. -# -# my %status = (); -# open(my $logs, "/tmp/buildall.log") // die "Couldn't open combined build log."; -# while (<$logs>) { -# if (/^([^ ]+) ([^ ]+) --- Branch ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) confidence tests passed ---/) { -# $status{$1} = [$2, $3, $4, $5, $6]; -# } -# } -# close(my $logs); -# -# -# sub svgtext { -# my ($f, $x, $y, $msg) = @_; -# print($f ""; -# print($f $msg); -# print($f "\n"); -# } -# -# -# open(my $svg, ">passing.svg") // dir "Could not create passing.svg."); -# print $svg '\n'; -# -# my $i=1; -# for my $host (sort keys %status) { -# svgtext($svg, 10, $i*20, $host); -# $i++; -# } -# -# print $svg '\n'; + + +my %status = (); + + +sub parselog { + my ($fn) = @_; + #print "Parsing log $fn\n"; + my $date = ""; + my $time = ""; + my $branch = ""; + my $os = ""; + my $compiler = ""; + my $datamodel = ""; + my $compilerok = ""; + my $libraryok = ""; + my $checksum = ""; + my $tests = ""; + open(my $log, $fn) // die "Couldn't open build log $fn."; + while (<$log>) { + if (/^([0-9\/]+) [0-9.]+ [^ ]+\.log$/) {$date = $1;} + if (/^[^ ]+ --- Cleaning branch ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ---$/) { + ($branch, $os, $compiler, $datamodel) = ($1, $2, $3, $4, $5); + } + if (/^([0-9.]+) --- Compiler build successfull ---$/) {$compilerok = "Built";} + if (/^([0-9.]+) --- Library build successfull ---$/) {$libraryok = "Built";} + if (/^([0-9.]+) --- Confidence tests passed ---$/) {$tests = "Passed";} + if (/^([0-9.]+) --- Object file checksums match ---$/) {$checksum = "Match";} + if (/^([0-9.]+) --- Object file checksum mismatch ---$/) {$checksum = "Changed";} + if (/^([0-9.]+) --- Object files checksummed ---$/) {$checksum = "New";} + } + close($log); + my $key = "$os-$compiler-$datamodel"; + if ($key ne "") { + $status{$key} = [$date, $time, $os, $compiler, $datamodel, $branch, $compilerok, $libraryok, $checksum, $tests]; + } +} + +opendir DIR, "log" // die "Could not open log directory."; +my @logs = readdir DIR; +closedir DIR; + +for my $logname (sort @logs) { + $logname = "log/" . $logname; + #print "Consider $logname\n"; + if (-f $logname) {parselog($logname);} +} + +my $emsperline = 1.2; + +sub svgtext { + my ($f, $x, $y, $colour, $msg) = @_; + print $f ''; + print $f $msg; + print $f "\n"; +} + +my $rows = keys %status; + +open(my $svg, ">build-status.svg") // die "Could not create build-status.svg."; +print $svg '', "\n"; +print $svg '', "\n"; + +my $col1 = 20; +my $col2 = 110; +my $col3 = 200; +my $col4 = 310; +my $col5 = 400; +my $col6 = 490; +my $col7 = 580; + +svgtext($svg, $col1, 0, "#e0e0e0", "OS"); +svgtext($svg, $col2, 0, "#e0e0e0", "Compiler"); +svgtext($svg, $col3, 0, "#e0e0e0", "Data model"); +svgtext($svg, $col4, 0, "#e0e0e0", "Compiler"); +svgtext($svg, $col5, 0, "#e0e0e0", "Library"); +svgtext($svg, $col6, 0, "#e0e0e0", "Checksum"); +svgtext($svg, $col7, 0, "#e0e0e0", "Tests"); + +my $i=1; +for my $key (sort keys %status) { + my ($date, $time, $os, $compiler, $datamodel, + $branch, $compilerok, $libraryok, $checksum, $tests) = @{$status{$key}}; + svgtext($svg, $col1, $i, "#c0c0c0", $os); + svgtext($svg, $col2, $i, "#c0c0c0", $compiler); + svgtext($svg, $col3, $i, "#c0c0c0", $datamodel); + svgtext($svg, $col4, $i, "#60ff60", $compilerok); + svgtext($svg, $col5, $i, "#60ff60", $libraryok); + svgtext($svg, $col6, $i, "#60ff60", $checksum); + svgtext($svg, $col7, $i, "#60ff60", $tests); + $i++; +} + +print $svg "\n"; + +system 'scp -p build-status.svg dave@hub:/var/www'; diff --git a/src/tools/make/pt.pl b/src/tools/make/pt.pl index 0d5058f8..0c3243c1 100755 --- a/src/tools/make/pt.pl +++ b/src/tools/make/pt.pl @@ -11,6 +11,7 @@ my %status = (); sub parselog { my ($fn) = @_; + #print "Parsing log $fn\n"; my $date = ""; my $time = ""; my $branch = ""; @@ -23,29 +24,31 @@ sub parselog { my $tests = ""; open(my $log, $fn) // die "Couldn't open build log $fn."; while (<$log>) { - if (/^([0-9/]+) [0-9.]+ [^ ]+\.log$/) {$date = $1;} + if (/^([0-9\/]+) [0-9.]+ [^ ]+\.log$/) {$date = $1;} if (/^[^ ]+ --- Cleaning branch ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ---$/) { ($branch, $os, $compiler, $datamodel) = ($1, $2, $3, $4, $5); } - if (/^--- Compiler build successfull ---$/) {$compilerok = "Built";} - if (/^--- Library build successfull ---$/) {$libraryok = "Built";} - if (/^--- Confidence tests passed ---$/) {$tests = "Passed";} - if (/^--- Object file checksums match ---$/) {$checksum = "Match";} - if (/^--- Object file checksum mismatch ---$/) {$checksum = "Changed";} - if (/^--- Object files checksummed ---$/) {$checksum = "New";} + if (/^([0-9.]+) --- Compiler build successfull ---$/) {$compilerok = "Built";} + if (/^([0-9.]+) --- Library build successfull ---$/) {$libraryok = "Built";} + if (/^([0-9.]+) --- Confidence tests passed ---$/) {$tests = "Passed";} + if (/^([0-9.]+) --- Object file checksums match ---$/) {$checksum = "Match";} + if (/^([0-9.]+) --- Object file checksum mismatch ---$/) {$checksum = "Changed";} + if (/^([0-9.]+) --- Object files checksummed ---$/) {$checksum = "New";} } close($log); my $key = "$os-$compiler-$datamodel"; if ($key ne "") { - status{$key} = [$date, $time, $os, %compiler, $datamodel, $branch, $compilerok, $libraryok, $checksum, $tests]; + $status{$key} = [$date, $time, $os, $compiler, $datamodel, $branch, $compilerok, $libraryok, $checksum, $tests]; } } -opendir DIR, "log" // die "Could not openlog directory."; +opendir DIR, "log" // die "Could not open log directory."; my @logs = readdir DIR; closedir DIR; for my $logname (sort @logs) { + $logname = "log/" . $logname; + #print "Consider $logname\n"; if (-f $logname) {parselog($logname);} } @@ -88,7 +91,7 @@ svgtext($svg, $col7, 0, "#e0e0e0", "Tests"); my $i=1; for my $key (sort keys %status) { - my ($date, $time, $os, %compiler, $datamodel, + my ($date, $time, $os, $compiler, $datamodel, $branch, $compilerok, $libraryok, $checksum, $tests) = @{$status{$key}}; svgtext($svg, $col1, $i, "#c0c0c0", $os); svgtext($svg, $col2, $i, "#c0c0c0", $compiler);