Fix multiple lines returned for animal on status page
[buildfarm-server.git] / cgi-bin / show_status.pl
index baf9623197acae357d3ad9f7606a7abcb035bf8b..d52394fec86ff93a8682fd94ddef18dc3da942d8 100755 (executable)
@@ -19,7 +19,7 @@ use FindBin qw($RealBin);
 require "$RealBin/../BuildFarmWeb.pl";
 
 my $query = new CGI;
-my @members = $query->param('member');
+my @members = $query->multi_param('member');
 map { s/[^a-zA-Z0-9_ -]//g; } @members;
 
 my $dsn="dbi:Pg:dbname=$dbname";
@@ -52,7 +52,9 @@ my $statement =<<EOS;
        b.*,
        s.log_text
   FROM dashboard_mat b LEFT JOIN build_status_log s
-  ON b.snapshot = s.snapshot AND s.log_stage = 'test-results.log'
+  ON    b.sysname = s.sysname
+    AND b.snapshot = s.snapshot
+    AND s.log_stage = 'test-results.log'
   ORDER BY b.branch = 'master' desc,
         b.branch desc, $sort_clause 
         b.snapshot desc
@@ -71,8 +73,39 @@ while (my $row = $sth->fetchrow_hashref)
     $row->{build_flags}  =~ s/_PC\b//g;
     $row->{build_flags} = lc($row->{build_flags});
     if (defined($row->{log_text}))
-      {                # convert to a hash
-      $row->{log_text} = { split /\s+/, $row->{log_text} };
+      {                # convert to a hash, find ranges, output list of ranges
+      my $h = { split /\s+/, $row->{log_text} };
+      my $i;
+      my $start;
+      my @ranges;
+
+      foreach my $k (sort {$a<=>$b} keys %$h)
+       {
+       if (defined $start)
+         {
+         if ($h->{$k} ne $h->{$start})
+           {
+           push @ranges, sprintf("%s %s %s", $h->{$start},  $start,  $i);
+           $start = $k;
+           $i = 1;
+           }
+         else
+           {
+           $i++;
+           }
+         }
+       else
+         {
+         $start = $k;
+         $i = 1;
+         }
+       }
+      if (defined $start)
+       {
+        push @ranges, sprintf("%s %s %s", $h->{$start},  $start,  $i);
+       }
+
+      $row->{log_text} = \@ranges;
       }
     push(@$statrows,$row);
 }