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(a)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