Module: tools Branch: master Commit: 69b93426e810e20a36c95c98de83f9069fd79521 URL: https://source.winehq.org/git/tools.git/?a=commit;h=69b93426e810e20a36c95c98...
Author: Francois Gouget fgouget@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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($$$;$$)