[PATCH] testbot: Link statistics to the corresponding activity page row.

Francois Gouget fgouget at codeweavers.com
Wed Jan 24 20:43:38 CST 2018


More specifically, this makes it possible to see where the maximum
revert times and others come from, and what else was happening at that
time.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 testbot/lib/WineTestBot/Activity.pm | 25 ++++++++++++++-----------
 testbot/web/Activity.pl             |  3 ++-
 testbot/web/Stats.pl                | 19 +++++++++++++------
 3 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/testbot/lib/WineTestBot/Activity.pm b/testbot/lib/WineTestBot/Activity.pm
index fb2cee52..2c21d9fd 100644
--- a/testbot/lib/WineTestBot/Activity.pm
+++ b/testbot/lib/WineTestBot/Activity.pm
@@ -51,6 +51,7 @@ Each entry contains a structure grouping all the state and event information
 for the specified timestamp. Entries have the following structure:
 
     {
+      id       => <RecordGroupId>,
       start    => <StartTimestamp>,
       end      => <EndTimestamp>,
       runnable => <RunnableTasksCount>,
@@ -105,7 +106,8 @@ sub GetActivity($;$)
   $Counters->{recordgroups} = $RecordGroups->GetItemsCount();
   foreach my $RecordGroup (sort CompareRecordGroups @{$RecordGroups->GetItems()})
   {
-    my $Group = { start => $RecordGroup->Timestamp };
+    my $Group = { id => $RecordGroup->Id,
+                  start => $RecordGroup->Timestamp };
     $ActivityHash->{$RecordGroup->Id} = $Group;
     push @$Activity, $Group;
     $MinId = $RecordGroup->Id if (!defined $MinId or $RecordGroup->Id < $MinId);
@@ -305,9 +307,9 @@ sub GetActivity($;$)
   return ($Activity, $Counters);
 }
 
-sub _AddFullStat($$$;$)
+sub _AddFullStat($$$$;$)
 {
-  my ($Stats, $StatKey, $Value, $Source) = @_;
+  my ($Stats, $StatKey, $Value, $GroupId, $Source) = @_;
 
   $Stats->{"$StatKey.count"}++;
   $Stats->{$StatKey} += $Value;
@@ -315,6 +317,7 @@ sub _AddFullStat($$$;$)
   if (!exists $Stats->{$MaxKey} or $Stats->{$MaxKey} < $Value)
   {
     $Stats->{$MaxKey} = $Value;
+    $Stats->{"$MaxKey.groupid"} = $GroupId if (defined $GroupId);
     $Stats->{"$MaxKey.source"} = $Source if ($Source);
   }
 }
@@ -346,7 +349,7 @@ sub GetStatistics($)
             $Task->Status !~ /^(?:queued|running|canceled)$/)
         {
           my $Time = $Task->Ended - $Task->Started;
-          _AddFullStat($GlobalStats, "$StepType.time", $Time, $Task);
+          _AddFullStat($GlobalStats, "$StepType.time", $Time, undef, $Task);
         }
         if ($IsSpecialJob)
         {
@@ -354,11 +357,11 @@ sub GetStatistics($)
           if (-f $ReportFileName)
           {
             my $ReportSize = -s $ReportFileName;
-            _AddFullStat($GlobalStats, "$StepType.size", $ReportSize, $Task);
+            _AddFullStat($GlobalStats, "$StepType.size", $ReportSize, undef, $Task);
             if ($VMs->ItemExists($Task->VM->GetKey()))
             {
               my $VMStats = ($VMsStats->{items}->{$Task->VM->Name} ||= {});
-              _AddFullStat($VMStats, "report.size", $ReportSize, $Task);
+              _AddFullStat($VMStats, "report.size", $ReportSize, undef, $Task);
             }
           }
         }
@@ -369,7 +372,7 @@ sub GetStatistics($)
         $Job->Status !~ /^(?:queued|running|canceled)$/)
     {
       my $Time = $Job->Ended - $Job->Submitted;
-      _AddFullStat($GlobalStats, "jobs.time", $Time, $Job);
+      _AddFullStat($GlobalStats, "jobs.time", $Time, undef, $Job);
       push @JobTimes, $Time;
 
       if (!exists $GlobalStats->{start} or $GlobalStats->{start} > $Job->Submitted)
@@ -421,8 +424,8 @@ sub GetStatistics($)
         my $Status = $VMStatus->{status};
 
         my $Time = $VMStatus->{end} - $VMStatus->{start};
-        _AddFullStat($VMStats, "$Status.time", $Time);
-        _AddFullStat($HostStats, "$Status.time", $Time);
+        _AddFullStat($VMStats, "$Status.time", $Time, $Group->{id});
+        _AddFullStat($HostStats, "$Status.time", $Time, $Group->{id});
         if ($Status =~ /^(?:reverting|sleeping|running|dirty)$/)
         {
           $VMStats->{"busy.elapsed"} += $Time;
@@ -439,8 +442,8 @@ sub GetStatistics($)
                 $VMStatus->{result} eq "failed"))
         {
           my $StepType = $VMStatus->{step}->Type;
-          _AddFullStat($VMStats, "$StepType.time", $Time, $VMStatus->{task});
-          _AddFullStat($HostStats, "$StepType.time", $Time, $VMStatus->{task});
+          _AddFullStat($VMStats, "$StepType.time", $Time, $Group->{id}, $VMStatus->{task});
+          _AddFullStat($HostStats, "$StepType.time", $Time, $Group->{id}, $VMStatus->{task});
         }
       }
 
diff --git a/testbot/web/Activity.pl b/testbot/web/Activity.pl
index 0b92299a..6ca3199a 100644
--- a/testbot/web/Activity.pl
+++ b/testbot/web/Activity.pl
@@ -153,7 +153,8 @@ EOF
     my $Group = $Activity->[$Index];
     next if (!$Group->{statusvms});
 
-    print "<tr><td>", _GetHtmlTime($Group->{start}), "</td>";
+    my $GroupId = $Group->{id};
+    print "<tr><td id='g$GroupId'>", _GetHtmlTime($Group->{start}), "</td>";
     if ($Group->{engine})
     {
       print "<td class='Record RecordEngine'>$Group->{engine}</td>\n";
diff --git a/testbot/web/Stats.pl b/testbot/web/Stats.pl
index d9f43814..d9a3ce50 100644
--- a/testbot/web/Stats.pl
+++ b/testbot/web/Stats.pl
@@ -140,16 +140,23 @@ sub _GetStatHtml($$;$$)
   my ($Stats, $StatKey, $AllStats, $Flags) = @_;
 
   my $Value = _GetStatStr($Stats, $StatKey, $AllStats, $Flags);
-  return $Value if (!$Stats->{"$StatKey.source"});
 
   my $SrcObj = $Stats->{"$StatKey.source"};
-  my ($JobId, $StepNo, $TaskNo) = ObjectModel::Collection::SplitKey(undef, $SrcObj->GetFullKey());
-  if (defined $TaskNo)
+  if ($SrcObj)
   {
-    my $Key = "$JobId#k". ($StepNo * 100 + $TaskNo);
-    return "<a href='/JobDetails.pl?Key=$Key'>$Value</a>";
+    my ($JobId, $StepNo, $TaskNo) = ObjectModel::Collection::SplitKey(undef, $SrcObj->GetFullKey());
+    if (defined $TaskNo)
+    {
+      my $Key = "$JobId#k". ($StepNo * 100 + $TaskNo);
+      return "<a href='/JobDetails.pl?Key=$Key'>$Value</a>";
+    }
+    return "<a href='/index.pl#job$JobId'>$Value</a>";
   }
-  return "<a href='/index.pl#job$JobId'>$Value</a>";
+
+  my $GroupId = $Stats->{"$StatKey.groupid"};
+  return "<a href='/Activity.pl?Hours=0#g$GroupId'>$Value</a>" if ($GroupId);
+
+  return $Value;
 }
 
 sub _GenGlobalLine($$$;$$)
-- 
2.15.1



More information about the wine-devel mailing list