print H "<th>branch</th><th>intended</th><th>blessing</th>\n";
print H "<th>job</th><th>failure</th>\n";
+ print H "<th>power</th>\n";
print H "</tr>\n";
LIMIT 1
END
+ # the final AND is just to reduce the data flow
+ our $jrunvarq //= db_prepare(<<END);
+ SELECT name, val
+ FROM runvars
+ WHERE flight=? AND job=?
+ AND (
+ name LIKE (? || '_power_%')
+ )
+END
+
my $inrows = $hosts{$hostname};
print DEBUG "FOUND ", (scalar @$inrows), " ROWS for $hostname\n";
foreach my $jr (@rows) {
my $ir = jobquery($infoq, $jr);
my $ar = jobquery($allocdq, $jr);
+ my $ident = $jr->{name};
+ $jrunvarq->execute($jr->{flight}, $jr->{job}, $ident);
+ my %runvars;
+ while (my ($n, $v) = $jrunvarq->fetchrow_array()) {
+ $runvars{$n} = $v;
+ }
my $altcolour = report_altcolour($alternate);
print H "<tr $altcolour>";
my $ri = report_run_getinfo({ %$jr, %$ir });
print H "<td $ri->{ColourAttr}>$ri->{Content}</td>\n";
+ my %powers;
+ foreach my $r (sort keys %runvars) {
+ next unless $r =~ m{^\Q${ident}\E_power_};
+ $powers{$'} = $runvars{$r};
+ }
+ my $skipped = 0;
+ my $any_power = 0;
+ my $pr_power_colour = sub {
+ my ($colour, $contents) = @_;
+ if ($any_power++) {
+ print H span_colour($colour), $contents, '</span>';
+ } else {
+ print H "<td bgcolor=\"$colour\">", $contents;
+ }
+ };
+ my $pr_power = sub {
+ my ($wh) = @_;
+ for (; $skipped; $skipped--) {
+ $pr_power_colour->($grey_mid, " - ");
+ }
+ my $how = $powers{$wh};
+ my $colour =
+ $how =~ /PDU/ ? $yellow :
+ $how =~ /Combined/ ? $yellow :
+ $how eq 'SSH' ? $green :
+ $grey_pale ;
+ $pr_power_colour->($colour, " $how ");
+ };
+ foreach my $wh (qw(install recover)) {
+ $skipped++, next unless exists $powers{$wh};
+ $pr_power->($wh);
+ delete $powers{$wh};
+ }
+ foreach my $wh (sort keys %powers) {
+ $pr_power->($wh);
+ }
+ print H "<td>" if !$any_power;
+ print H "</td>\n";
+
print H "</tr>\n\n";
$alternate ^= 1;
}