CPAN-Testers-WWW-Statistics
view release on metacpan or search on metacpan
lib/CPAN/Testers/WWW/Statistics/Pages.pm view on Meta::CPAN
$date,
$self->{counts}{$date}{all},
$self->{counts}{$date}{first},
$self->{counts}{$date}{last};
}
$fh1->close;
}
sub _build_failure_rates {
my $self = shift;
my (%tvars,%dists);
$self->{parent}->_log("building failure rates");
my $query =
'SELECT x.dist,x.version,u.released FROM ixlatest AS x '.
'INNER JOIN uploads AS u ON u.dist=x.dist AND u.version=x.version '.
"WHERE u.type != 'backpan'";
my $next = $self->{parent}->{CPANSTATS}->iterator('hash',$query);
while(my $row = $next->()) {
$dists{$row->{dist}}{$row->{version}} = $row->{released};
}
$self->{parent}->_log("selecting failure rates");
# select worst failure rates - latest version, and ignoring backpan only.
my %worst;
for my $dist (keys %{ $self->{fails} }) {
next unless($dists{$dist});
my ($version) = sort {$dists{$dist}{$b} <=> $dists{$dist}{$a}} keys %{$dists{$dist}};
$worst{"$dist-$version"} = $self->{fails}->{$dist}{$version};
$worst{"$dist-$version"}->{dist} = $dist;
$worst{"$dist-$version"}->{pcent} = $self->{fails}{$dist}{$version}{fail}
? int(($self->{fails}{$dist}{$version}{fail}/$self->{fails}{$dist}{$version}{total})*10000)/100
: 0.00;
$worst{"$dist-$version"}->{pass} ||= 0;
$worst{"$dist-$version"}->{fail} ||= 0;
my @post = localtime($dists{$dist}{$version});
$worst{"$dist-$version"}->{post} = sprintf "%04d%02d", $post[5]+1900, $post[4]+1;
}
$self->{parent}->_log("worst = " . scalar(keys %worst) . " entries");
$self->{parent}->_log("building failure counts");
# calculate worst failure rates - by failure count
my $count = 1;
for my $dist (sort {$worst{$b}->{fail} <=> $worst{$a}->{fail} || $worst{$b}->{pcent} <=> $worst{$a}->{pcent}} keys %worst) {
last unless($worst{$dist}->{fail});
my $pcent = sprintf "%3.2f%%", $worst{$dist}->{pcent};
push @{$tvars{WORST}}, [$count++, $worst{$dist}->{fail}, $dist, $worst{$dist}->{post}, $worst{$dist}->{pass}, $worst{$dist}->{total}, $pcent, $worst{$dist}->{dist}];
last if($count > 100);
}
$self->_writepage('wdists',\%tvars);
undef %tvars;
$self->{parent}->_log("building failure pecentages");
# calculate worst failure rates - by percentage
$count = 1;
for my $dist (sort {$worst{$b}->{pcent} <=> $worst{$a}->{pcent} || $worst{$b}->{fail} <=> $worst{$a}->{fail}} keys %worst) {
last unless($worst{$dist}->{fail});
my $pcent = sprintf "%3.2f%%", $worst{$dist}->{pcent};
push @{$tvars{WORST}}, [$count++, $worst{$dist}->{fail}, $dist, $worst{$dist}->{post}, $worst{$dist}->{pass}, $worst{$dist}->{total}, $pcent, $worst{$dist}->{dist}];
last if($count > 100);
}
$self->_writepage('wpcent',\%tvars);
undef %tvars;
$self->{parent}->_log("done building failure rates");
# now we do as above but for the last 6 months
my @recent = localtime(time() - 15778463); # 6 months ago
my $recent = sprintf "%04d%02d", $recent[5]+1900, $recent[4]+1;
for my $dist (keys %worst) {
next if($worst{$dist}->{post} ge $recent);
delete $worst{$dist};
}
# calculate worst failure rates - by failure count
$count = 1;
for my $dist (sort {$worst{$b}->{fail} <=> $worst{$a}->{fail} || $worst{$b}->{pcent} <=> $worst{$a}->{pcent}} keys %worst) {
last unless($worst{$dist}->{fail});
my $pcent = sprintf "%3.2f%%", $worst{$dist}->{pcent};
push @{$tvars{WORST}}, [$count++, $worst{$dist}->{fail}, $dist, $worst{$dist}->{post}, $worst{$dist}->{pass}, $worst{$dist}->{total}, $pcent, $worst{$dist}->{dist}];
last if($count > 100);
}
$self->_writepage('wdists-recent',\%tvars);
undef %tvars;
$self->{parent}->_log("building failure pecentages");
# calculate worst failure rates - by percentage
$count = 1;
for my $dist (sort {$worst{$b}->{pcent} <=> $worst{$a}->{pcent} || $worst{$b}->{fail} <=> $worst{$a}->{fail}} keys %worst) {
last unless($worst{$dist}->{fail});
my $pcent = sprintf "%3.2f%%", $worst{$dist}->{pcent};
push @{$tvars{WORST}}, [$count++, $worst{$dist}->{fail}, $dist, $worst{$dist}->{post}, $worst{$dist}->{pass}, $worst{$dist}->{total}, $pcent, $worst{$dist}->{dist}];
last if($count > 100);
}
$self->_writepage('wpcent-recent',\%tvars);
}
sub _build_performance_stats {
my $self = shift;
my $directory = $self->{parent}->directory;
my $results = "$directory/stats";
mkpath($results);
$self->{parent}->_log("building peformance stats for graphs");
my $fh = IO::File->new(">$results/build1.txt");
print $fh "#DATE,REQUESTS,PAGES,REPORTS\n";
my $count = scalar(keys %{$self->{build}});
my $limit = $self->{parent}->build_history || 90;
my $diff = $count - $limit;
for my $date (sort {$a <=> $b} keys %{$self->{build}}) {
next if(--$diff > 0);
#$self->{parent}->_log("build_stats: date=$date, old=$self->{build}{$date}->{old}");
next if($self->{build}{$date}->{old} == 2); # ignore todays tally
#next if($date > $self->{dates}{THISMONTH}-1);
printf $fh "%d,%d,%d,%d\n",
$date,
($self->{build}{$date}{webtotal} || 0),
($self->{build}{$date}{webunique} || 0),
($self->{build}{$date}{reports} || 0);
}
$fh->close;
}
sub _build_sizes {
my $self = shift;
my $du = 'du -h --max-depth=0';
for my $dir (qw( dir_cpan dir_backpan dir_reports )) {
my $path = $self->{parent}->$dir();
my $res =`$du $path`;
$res ||= '';
$res =~ s/\s.*$//s if($res);
$self->{sizes}{$dir} = $res;
$self->{parent}->_log(".. size for $dir ($path) = $res");
}
}
=item * _writepage
Creates a single HTML page.
( run in 1.400 second using v1.01-cache-2.11-cpan-5735350b133 )