CPAN-Testers-Data-Generator
view release on metacpan or search on metacpan
lib/CPAN/Testers/Data/Generator.pm view on Meta::CPAN
use CPAN::Testers::Metabase::AWS;
use CPAN::Testers::Report;
#----------------------------------------------------------------------------
# Variables
my $DIFF = 30; # max difference allowed in seconds
my $MINS = 15; # split time in minutes
my %testers;
my $FROM = 'CPAN Tester Report Server <do_not_reply@cpantesters.org>';
my $HOW = '/usr/sbin/sendmail -bm';
my $HEAD = 'To: EMAIL
From: FROM
Date: DATE
Subject: CPAN Testers Generator Error Report
';
my $BODY = '
The following reports failed to parse into the cpanstats database:
INVALID
Thanks,
CPAN Testers Server.
';
my @admins = (
'barbie@missbarbell.co.uk',
#'david@dagolden.com'
);
my ($OSNAMES,%MAPPINGS);
#----------------------------------------------------------------------------
# The Application Programming Interface
sub new {
my $class = shift;
my %hash = @_;
my $self = {
meta_count => 0,
stat_count => 0,
last => '',
};
bless $self, $class;
# load configuration
my $cfg = Config::IniFiles->new( -file => $hash{config} );
# configure databases
for my $db (qw(CPANSTATS METABASE)) {
die "No configuration for $db database\n" unless($cfg->SectionExists($db));
my %opts = map {$_ => ($cfg->val($db,$_)||undef);} qw(driver database dbfile dbhost dbport dbuser dbpass);
$opts{AutoCommit} = 0;
$self->{$db} = CPAN::Testers::Common::DBUtils->new(%opts);
die "Cannot configure $db database\n" unless($self->{$db});
$self->{$db}->{'mysql_enable_utf8'} = 1 if($opts{driver} =~ /mysql/i);
$self->{$db}->{'mysql_auto_reconnect'} = 1 if($opts{driver} =~ /mysql/i);
}
if($cfg->SectionExists('ADMINISTRATION')) {
my @admins = $cfg->val('ADMINISTRATION','admins');
$self->{admins} = \@admins;
}
# command line swtiches override configuration settings
for my $key (qw(logfile poll_limit stopfile offset aws_bucket aws_namespace)) {
$self->{$key} = $hash{$key} || $cfg->val('MAIN',$key);
}
$self->{offset} ||= 1;
$self->{poll_limit} ||= 1000;
my @rows = $self->{METABASE}->get_query('hash','SELECT * FROM testers_email');
for my $row (@rows) {
$testers{$row->{resource}} = $row->{email};
}
# build OS names map
@rows = $self->{CPANSTATS}->get_query('array','SELECT osname,ostitle FROM osname');
for my $row (@rows) {
$self->{OSNAMES}{lc $row->[0]} ||= $row->[1];
}
$OSNAMES = join('|',keys %{$self->{OSNAMES}}) if(keys %{$self->{OSNAMES}});
$self->load_uploads();
$self->load_authors();
$self->load_perl_versions();
if($cfg->SectionExists('DISABLE')) {
my @values = $cfg->val('DISABLE','LIST');
$self->{DISABLE}{$_} = 1 for(@values);
}
if($cfg->SectionExists('OSNAMES')) {
for my $param ($cfg->Parameters('OSNAMES')) {
$self->{OSNAMES}{lc $param} ||= lc $cfg->val('OSNAMES',$param);
}
}
if($cfg->SectionExists('MAPPINGS')) {
for my $param ($cfg->Parameters('MAPPINGS')) {
$MAPPINGS{$param} = [ split(',', $cfg->val('MAPPINGS',$param), 2) ];
}
}
eval {
$self->{metabase} = CPAN::Testers::Metabase::AWS->new(
bucket => $self->{aws_bucket},
namespace => $self->{aws_namespace},
);
$self->{librarian} = $self->{metabase}->public_librarian;
};
# if we require remote access, we need the librarian
unless($hash{localonly}) {
return unless($self->{metabase} && $self->{librarian});
( run in 0.590 second using v1.01-cache-2.11-cpan-97f6503c9c8 )