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@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($$$;$$)