Francois Gouget : testbot/web: Allow specifying how many days to analyze for the statistics.

Alexandre Julliard julliard at winehq.org
Sun Oct 27 14:19:43 CDT 2019


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

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Thu Oct 24 14:13:35 2019 +0200

testbot/web: Allow specifying how many days to analyze for the statistics.

Building statistics on the full job retention period may not be what's
needed. Also, the longer the period analyzed the longer it takes to
generate this page.
So let the user specify which period to analyze and default to 7 days, a
reasonable period to get values that are not unduly influenced by
short-term patch storms, but also short enough to reflect current
trends.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 testbot/web/Stats.pl | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 77 insertions(+), 3 deletions(-)

diff --git a/testbot/web/Stats.pl b/testbot/web/Stats.pl
index 91106bb..b08c738 100644
--- a/testbot/web/Stats.pl
+++ b/testbot/web/Stats.pl
@@ -21,9 +21,10 @@ use strict;
 
 package StatsPage;
 
-use ObjectModel::CGI::Page;
-our @ISA = qw(ObjectModel::CGI::Page);
+use ObjectModel::CGI::FreeFormPage;
+our @ISA = qw(ObjectModel::CGI::FreeFormPage);
 
+use ObjectModel::BasicPropertyDescriptor;
 use ObjectModel::Collection;
 use WineTestBot::Config;
 use WineTestBot::Activity;
@@ -36,10 +37,33 @@ sub _initialize($$$)
 {
   my ($self, $Request, $RequiredRole) = @_;
 
+  $self->{Days} = $self->GetParam("Days");
+  $self->Validate();
+
   $self->{start} = Time();
   $self->SUPER::_initialize($Request, $RequiredRole);
 }
 
+sub Validate($)
+{
+  my ($self) = @_;
+
+  if (!defined $self->{Days})
+  {
+    $self->{Days} = 7;
+    $self->{NoStats} = 1;
+  }
+  elsif ($self->{Days} !~ /^[0-9]{1,2}$/)
+  {
+    $self->{ErrField} = "Days";
+    $self->{ErrMessage} = "The number of days must be between 1 and 99";
+    $self->{NoStats} = 1;
+    $self->{Days} = 7;
+    return undef;
+  }
+  return $self->SUPER::Validate();
+}
+
 sub GetPageTitle($$)
 {
   my ($self, $Page) = @_;
@@ -168,7 +192,15 @@ sub GenerateBody($)
 {
   my ($self) = @_;
 
+  return $self->SUPER::GenerateBody() if ($self->{NoStats});
+
   print "<h1>${ProjectName} Test Bot activity statistics</h1>\n";
+  $self->GenerateFormStart();
+  $self->GenerateFields();
+  $self->GenerateRequiredLegend();
+  $self->GenerateActions();
+  $self->GenerateFormEnd();
+
   print "<div class='Content'>\n";
 
   ### Get the sorted VMs list
@@ -176,7 +208,7 @@ sub GenerateBody($)
   my $VMs = CreateVMs();
   $VMs->FilterEnabledRole();
   my @SortedVMs = sort _CompareVMs @{$VMs->GetItems()};
-  my $Stats = GetStatistics($VMs);
+  my $Stats = GetStatistics($VMs, $self->{Days} * 24 * 60 * 60);
 
   ### Show global statistics
 
@@ -342,9 +374,51 @@ sub GenerateBody($)
   print "</tbody></table></div>\n";
 }
 
+sub GetPropertyDescriptors($)
+{
+  my ($self) = @_;
+
+  $self->{PropertyDescriptors} ||= [
+    CreateBasicPropertyDescriptor("Days", "Days to analyze", !1, !1, "N", 2),
+  ];
+
+  return $self->SUPER::GetPropertyDescriptors();
+}
+
+sub GetDisplayValue($$)
+{
+  my ($self, $PropertyDescriptor) = @_;
+
+  return $self->{$PropertyDescriptor->GetName()};
+}
+
+sub GetActions($)
+{
+  my ($self) = @_;
+
+  my $Actions = $self->SUPER::GetActions();
+  push @$Actions, "Update";
+  return $Actions;
+}
+
+sub OnAction($$)
+{
+  my ($self, $Action) = @_;
+
+  if ($Action eq "Update")
+  {
+    return $self->Validate() ? 1 : undef;
+  }
+
+  return $self->SUPER::OnAction($Action);
+}
+
 sub GenerateFooter($)
 {
   my ($self) = @_;
+
+  return $self->SUPER::GenerateFooter() if ($self->{NoStats});
+
   print "<p></p><div class='CollectionBlock'><table>\n";
   print "<thead><tr><th class='Record'>Legend</th></tr></thead>\n";
   print "<tbody><tr><td class='Record'>\n";




More information about the wine-cvs mailing list