Francois Gouget : testbot: Link statistics to the corresponding activity page row.

Alexandre Julliard julliard at winehq.org
Thu Jan 25 17:26:09 CST 2018


Module: tools
Branch: master
Commit: 69b93426e810e20a36c95c98de83f9069fd79521
URL:    https://source.winehq.org/git/tools.git/?a=commit;h=69b93426e810e20a36c95c98de83f9069fd79521

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Thu Jan 25 03:43:38 2018 +0100

testbot: Link statistics to the corresponding activity page row.

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>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 fb2cee5..2c21d9f 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 0b92299..6ca3199 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 d9f4381..d9a3ce5 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($$$;$$)




More information about the wine-cvs mailing list