[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [OSSTEST] ms-planner: add a flight summary html report



I often find myself intested in when a given flight (or the current flight for
a branch) will complete, which with the current resource plan means searching
and cycling through trying to figure out which box ends the latest.

Add an explicit flight status summary, which produces a table for each flight
listing the jobs, there start and end times and the host they run on. The
output is something like a list of these, ordered by flight number (rendered
with links(1), header is bold):

  Flight 26043 [linux-3.4 real] 4 jobs expected to run until 2014-Apr-27 Sun 
23:54:19
   build-amd64-pvops                        2014-Apr-27 Sun 20:06:09 
2014-Apr-27 Sun 21:21:23 host leaf-beetle
   build-i386-pvops                         2014-Apr-27 Sun 21:20:15 
2014-Apr-27 Sun 21:31:27 host grain-weevil
   build-amd64                              2014-Apr-27 Sun 21:21:23 
2014-Apr-27 Sun 21:44:22 host leaf-beetle
   build-i386                               2014-Apr-27 Sun 22:18:43 
2014-Apr-27 Sun 23:54:19 host field-cricket

I renamed the existing show-html option to show-resource-plan-html for clarity.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
It'd be good to sync these reports to e.g. xenbits so other people can see
them. Pressumably this would be reasonably easy with a ssh keypair restricted
in authorized_keys.
---
 ms-planner     | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 ms-queuedaemon | 10 ++++++--
 2 files changed, 82 insertions(+), 3 deletions(-)

diff --git a/ms-planner b/ms-planner
index f045bbf..4d9787d 100755
--- a/ms-planner
+++ b/ms-planner
@@ -536,7 +536,80 @@ sub showsharetype ($) {
     return $_;
 }
 
-sub cmd_show_html () {
+sub cmd_show_flight_summary_html () {
+    get_current_plan();
+
+    my $earliest= $plan->{Start};
+
+    my %flights;
+    my $jobs = 0;
+    while (my ($reso,$evts) = each %{ $plan->{Events} }) {
+        # [osstest real] job 26010.test-amd64-amd64-xl-win7-amd64
+        foreach my $evt ( @{$evts} ) {
+            next unless $evt->{Type} =~ m/^(Start|End)$/;
+            next unless $evt->{Info} =~ m/^\[(\S+) (\S+)\] job ([0-9]+)\.(\S+) 
(.*)/;
+            my ($branch,$blessing,$flight,$job,$rest) = ($1,$2,$3,$4,$5);
+            $flights{$flight} = {
+                Branch => $branch,
+                Blessing => $blessing,
+                End => $evt->{Time},
+                Jobs => {},
+                Last => $evt,
+                LastReso => $reso,
+            } unless $flights{$flight};
+            $jobs++;
+            $flights{$flight}->{Jobs}{$job} = {
+                Reso => $reso
+            } unless $flights{$flight}->{Jobs}{$job};
+
+            $flights{$flight}->{Jobs}{$job}->{Start} = $evt if $evt->{Type} eq 
"Start";
+            $flights{$flight}->{Jobs}{$job}->{End} = $evt if $evt->{Type} eq 
"End";
+
+            if ( $evt->{Time} > $flights{$flight}->{End} ) {
+                $flights{$flight}->{Last} = $evt;
+                $flights{$flight}->{LastReso} = $reso;
+                $flights{$flight}->{End} = $evt->{Time};
+            }
+        }
+    }
+
+    my @cols = ("Job", "Start", "End", "Host");
+
+    printf("<table>\n<tr>\n");
+    printf(" <th align='left'>%s</th>\n", encode_entities($_)) foreach @cols;
+    printf("</tr>\n");
+
+    sub flight_hdr($) {
+        my $text = encode_entities(shift);
+        printf("<tr><td colspan=%d><b>$text</b></td></tr>", scalar @cols);
+    }
+    sub cell($) {
+        my $text = encode_entities(shift);
+        printf(" <td>$text</td>\n");
+    }
+    foreach my $flight (sort keys %flights) {
+        my $inf = $flights{$flight};
+
+        flight_hdr("Flight $flight [$inf->{Branch} $inf->{Blessing}] ".
+               (keys %{$inf->{Jobs}})." jobs ".
+               "expected to run until ".strftime("%Y-%b-%d %a %H:%M:%S", 
localtime $inf->{End}));
+
+        foreach my $job (sort { $inf->{Jobs}{$a}->{Start}->{Time} cmp 
$inf->{Jobs}{$b}->{Start}->{Time} } keys %{ $inf->{Jobs} }) {
+            my $sevt = $inf->{Jobs}{$job}->{Start};
+            my $eevt = $inf->{Jobs}{$job}->{End};
+            print("<tr>\n");
+            cell($job);
+            cell(strftime("%Y-%b-%d %a %H:%M:%S", localtime 
$inf->{Jobs}{$job}->{Start}->{Time}));
+            cell(strftime("%Y-%b-%d %a %H:%M:%S", localtime 
$inf->{Jobs}{$job}->{End}->{Time}));
+            cell($inf->{Jobs}{$job}->{Reso});
+            print("</tr>\n");
+        }
+        print("<tr><td>&nbsp</td></tr>\n");
+    }
+    print("</table>\n");
+}
+
+sub cmd_show_resource_plan_html () {
     get_current_plan();
     my $now= time;
 
diff --git a/ms-queuedaemon b/ms-queuedaemon
index 26d83e2..a5bebd3 100755
--- a/ms-queuedaemon
+++ b/ms-queuedaemon
@@ -224,12 +224,18 @@ proc queuerun-perhaps-step {} {
 proc report-plan {} {
     global c
     if {[catch {
-        exec ./ms-planner show-html > "$c(WebspaceFile)/resource-plan.html"
+        exec ./ms-planner show-resource-plan-html > 
"$c(WebspaceFile)/resource-plan.html"
     } emsg]} {
-        log "INTERNAL ERROR showing plan html: $emsg"
+        log "INTERNAL ERROR showing resource plan html: $emsg"
     } else {
         log "report-plan OK"
     }
+    if {[catch {
+        exec ./ms-planner show-flight-summary-html > 
"$c(WebspaceFile)/flight-summary.html"
+    } emsg]} {
+        log "INTERNAL ERROR showing flight summary html: $emsg"
+    } else {
+        log "report-flight-summary OK"
 }
 
 proc we-are-thinking {chan} {
-- 
1.9.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.