package Module::CPANTS::Generator::Testers;
use strict;
use Carp;
use DBI;
use Clone qw(clone);
use File::stat;
use LWP::Simple;
use Net::NNTP;
use Module::CPANTS::Generator;
use base 'Module::CPANTS::Generator';
use vars qw($VERSION);
$VERSION = "0.006";
sub download {
my $self = shift;
my $url = "http://testers.astray.com/testers.db";
mirror($url, "../testers.db");
}
sub generate {
my $self = shift;
my $stat = stat("testers.db");
my $cpants = $self->grab_cpants;
if ($stat && time - $stat->mtime < 60*60*24) {
print " all testers cached, copying\n";
foreach my $dist (keys %$cpants) {
next unless exists $cpants->{$dist}->{testers};
next unless -d $dist;
$cpants->{cpants}->{$dist}->{testers} =
clone($cpants->{$dist}->{testers});
}
$self->save_cpants($cpants);
return;
}
$self->download;
my $dbh = DBI->connect("dbi:SQLite:dbname=../testers.db","","", { RaiseError => 1});
foreach my $dist (keys %$cpants) {
delete $cpants->{$dist}->{testers}->{pass};
delete $cpants->{$dist}->{testers}->{fail};
}
my $action_sth = $dbh->prepare("SELECT id, action, version, distversion, platform FROM reports");
$action_sth->execute();
my($id, $action, $version, $distversion, $platform);
$action_sth->bind_columns(\$id, \$action, \$version, \$distversion, \$platform);
while ($action_sth->fetch) {
next unless $version;
next unless exists $cpants->{cpants}->{$distversion};
$cpants->{cpants}->{$distversion}->{testers}->{lc $action}++;
}
$self->save_cpants($cpants);
}
1;