From 632bb24687e18ab6dd6a8e7c95214d42382a20cf Mon Sep 17 00:00:00 2001 From: Eelco Dolstra <e.dolstra@tudelft.nl> Date: Tue, 11 Nov 2008 14:45:33 +0000 Subject: [PATCH] --- .../lib/HydraFrontend/Controller/Root.pm | 5 ++ src/HydraFrontend/root/build.tt | 60 +++++++++++++++---- src/HydraFrontend/root/index.tt | 15 ++++- src/build.pl | 10 +--- src/runner.pl | 7 ++- 5 files changed, 77 insertions(+), 20 deletions(-) diff --git a/src/HydraFrontend/lib/HydraFrontend/Controller/Root.pm b/src/HydraFrontend/lib/HydraFrontend/Controller/Root.pm index 5c9e8f91..f5100ea5 100644 --- a/src/HydraFrontend/lib/HydraFrontend/Controller/Root.pm +++ b/src/HydraFrontend/lib/HydraFrontend/Controller/Root.pm @@ -80,6 +80,11 @@ sub build :Local { $c->stash->{template} = 'build.tt'; $c->stash->{build} = $build; $c->stash->{id} = $id; + + if (!$build->finished && $build->schedulingInfo->busy) { + my $logfile = $build->schedulingInfo->logfile; + $c->stash->{logtext} = `cat $logfile`; + } } diff --git a/src/HydraFrontend/root/build.tt b/src/HydraFrontend/root/build.tt index 67f29b2b..b824a0c9 100644 --- a/src/HydraFrontend/root/build.tt +++ b/src/HydraFrontend/root/build.tt @@ -4,7 +4,11 @@ <h1> Job <tt>[% build.project.name %]:[% build.attrname %]</tt> build [% id %] [% IF !build.finished %] - (scheduled) + [% IF build.schedulingInfo.busy %] + (currently building) + [% ELSE %] + (scheduled) + [% END %] [% END %] </h1> @@ -20,6 +24,27 @@ <th>Time added:</th> <td>[% date.format(build.timestamp, '%Y-%m-%d %H:%M:%S') %]</td> </tr> + <tr> + <th>Status:</th> + <td> + [% IF build.finished %] + [% IF build.resultInfo.buildstatus == 0 %] + <img src="/static/images/success.gif" /> + <strong>Success</strong> + [% ELSIF build.resultInfo.buildstatus == 1 %] + <img src="/static/images/failure.gif" /> + <strong>Build returned a non-zero exit code</strong> + [% ELSE %] + <img src="/static/images/failure.gif" /> + <strong>Build failed</strong> + [% END %] + [% ELSIF build.schedulingInfo.busy %] + <strong>Build in progress</strong> + [% ELSE %] + <strong>Scheduled to be built</strong> + [% END %] + </td> + </tr> <tr> <th>Project:</th> <td><a href="[% c.uri_for('/project' build.project.name) %]"><tt>[% build.project.name %]</tt></a></td> @@ -67,21 +92,17 @@ [% END %] </td> </tr> - <tr> - <th>Status:</th> - <td> - [% IF build.resultInfo.buildstatus == 0 %] - <img src="/static/images/success.gif" /> - [% ELSE %] - <img src="/static/images/failure.gif" /> - [% END %] - </td> - </tr> [% ELSE %] <tr> <th>Priority:</th> <td>[% build.schedulingInfo.priority %]</td> </tr> + [% IF build.schedulingInfo.busy %] + <tr> + <th>Logfile:</th> + <td>[% build.schedulingInfo.logfile %]</td> + </tr> + [% END %] [% END %] </table> @@ -115,6 +136,10 @@ [% IF build.finished %] + +[% IF build.buildproducts %] + + <h2>Build products</h2> <ul class="productList"> @@ -141,6 +166,8 @@ </ul> +[% END %] + <h2>Logs</h2> @@ -179,6 +206,17 @@ [% END %] +[% ELSIF build.schedulingInfo.busy %] + + +<h2>Log</h2> + +<!-- !!! escaping --> +<pre class="buildlog"> +[% logtext -%] +</pre> + + [% END %] diff --git a/src/HydraFrontend/root/index.tt b/src/HydraFrontend/root/index.tt index d1c61cab..fb8f3200 100644 --- a/src/HydraFrontend/root/index.tt +++ b/src/HydraFrontend/root/index.tt @@ -1,8 +1,15 @@ [% WRAPPER layout.tt title="Hydra Overview" %] [% USE date %] + <h1>Queue</h1> +[% IF scheduled.size == 0 %] + +<p>The queue is empty.</p> + +[% ELSE %] + <table class="tablesorter"> <thead> <tr><th>#</th><th>Priority</th><th>Project</th><th>Job</th><th>System</th><th>Timestamp</th><th>Description</th></tr> @@ -13,7 +20,7 @@ <td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td> <td>[% build.schedulingInfo.priority %]</td> <td><tt>[% build.project.name %]</tt></td> - <td><tt>[% build.jobset.name %]</tt></td> + <td><tt>[% build.attrname %]</tt></td> <td><tt>[% build.system %]</tt></td> <td>[% date.format(build.timestamp, '%Y-%m-%d %H:%M:%S') %]</td> <td>[% build.description %]</td> @@ -22,6 +29,9 @@ </tbody> </table> +[% END %] + + <h1>Job status</h1> <p>Below are the latest builds for each job.</p> @@ -37,6 +47,7 @@ </tbody> </table> + <h1>All builds</h1> <p>Number of builds: [% allBuilds.size %]</p> @@ -52,6 +63,7 @@ </tbody> </table> + <h1>Projects</h1> <ul> @@ -60,4 +72,5 @@ [% END -%] </ul> + [% END %] diff --git a/src/build.pl b/src/build.pl index b35e7aa5..1a4dfae8 100644 --- a/src/build.pl +++ b/src/build.pl @@ -32,8 +32,6 @@ sub doBuild { $startTime = time(); - print " BUILDING\n"; - my $res = system("nix-store --realise $drvPath"); $stopTime = time(); @@ -66,7 +64,7 @@ sub doBuild { my $logPath = "/nix/var/log/nix/drvs/" . basename $drvPath; if (-e $logPath) { - print " LOG $logPath\n"; + print "found log $logPath\n"; $db->resultset('Buildlogs')->create( { build => $build->id , logphase => "full" @@ -79,7 +77,7 @@ sub doBuild { if (-e "$outPath/log") { foreach my $logPath (glob "$outPath/log/*") { - print " LOG $logPath\n"; + print "found log $logPath\n"; $db->resultset('Buildlogs')->create( { build => $build->id , logphase => basename($logPath) @@ -105,7 +103,7 @@ sub doBuild { }); } close LIST; - } else { + } elsif ($buildStatus == 0) { $db->resultset('Buildproducts')->create( { build => $build->id , type => "nix-build" @@ -144,9 +142,7 @@ die unless $build; # Do the build. If it throws an error, unlock the build so that it # can be retried. eval { - print "BUILD\n"; doBuild $build; - print "DONE\n"; }; if ($@) { warn $@; diff --git a/src/runner.pl b/src/runner.pl index 8d45721a..394ed1d0 100644 --- a/src/runner.pl +++ b/src/runner.pl @@ -1,6 +1,7 @@ #! @perl@ -w use strict; +use Cwd; use POSIX qw(dup2); use HydraFrontend::Schema; @@ -31,6 +32,7 @@ sub checkJobs { print "looking for runnable jobs...\n"; my $job; + my $logfile; $db->txn_do(sub { @@ -42,8 +44,11 @@ sub checkJobs { if (scalar @jobs > 0) { $job = $jobs[0]; + $logfile = getcwd . "/logs/" . $job->id; + unlink $logfile; $job->schedulingInfo->busy(1); $job->schedulingInfo->locker($$); + $job->schedulingInfo->logfile($logfile); $job->schedulingInfo->update; } @@ -58,7 +63,7 @@ sub checkJobs { my $child = fork(); die unless defined $child; if ($child == 0) { - open LOG, ">logs/$id" or die; + open LOG, ">$logfile" or die; POSIX::dup2(fileno(LOG), 1) or die; POSIX::dup2(fileno(LOG), 2) or die; exec("perl", "-IHydraFrontend/lib", "-w",