Test-Smoke-Database
view release on metacpan or search on metacpan
lib/Test/Smoke/Database/DB.pm view on Meta::CPAN
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{nbcc} = $nbcc;
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{nbcm} = $nbcm;
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{nbte} = $nbte;
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{nbtt} =
$nbcf + $nbcm + $nbco + $nbcc;
# $failure
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{failure} =
$failure{$id} if ($failure{$id});
# build
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{build} = $h2{$id}
if $h2{$id};
# matrix
$h{$os}{$osver}{$archi}{$cc}{$ccver}{$smoke}{matrix} = $matrix{$id}
if $matrix{$id};
}
$st->finish;
return \%h;
}
#------------------------------------------------------------------------------
# read_smokers
#------------------------------------------------------------------------------
sub read_smokers(\%) {
my $self = shift;
my %smokers;
my $req =" select distinct author from builds where date > DATE_SUB(NOW(), INTERVAL 6 MONTH)";
my $ref = $self->{DBH}->selectcol_arrayref($req) || return undef;
foreach (@$ref) {
$req = "select distinct os,osver,archi,cc,ccver, count(*) from builds where author='$_' ".
" and date > DATE_SUB(NOW(), INTERVAL 6 MONTH) group by 1,2,3,4,5 order by 1,2,3,4,5";
$smokers{$_} = $self->{DBH}->selectall_arrayref($req) || return undef;
}
return \%smokers;
}
#------------------------------------------------------------------------------
# read_top_smokers
#------------------------------------------------------------------------------
sub read_top_smokers{
my $self = shift;
my $lim = shift || 20;
my $req = "select distinct author,count(*) from builds where date ".
"group by 1 order by 2 desc limit $lim";
return $self->{DBH}->selectall_arrayref($req) || undef;
}
#------------------------------------------------------------------------------
# distinct
#------------------------------------------------------------------------------
sub distinct(\%$) {
my ($self, $col)=@_;
my $req = "select distinct $col from builds where smoke>=$limit
order by $col";
return $self->{DBH}->selectcol_arrayref($req) || undef;
}
#------------------------------------------------------------------------------
# nb
#------------------------------------------------------------------------------
sub nb(\%) {
my $self = shift;
my $req = "select count(*) from builds";
$req .=" where smoke >= $limit" if $limit;
return $self->one_shot($req);
}
#------------------------------------------------------------------------------
# last50
#------------------------------------------------------------------------------
sub last50(\%) {
my $self = shift;
my $req = 'select max(smoke)-50 from builds';
return $self->one_shot($req);
}
#------------------------------------------------------------------------------
# one_shot
#------------------------------------------------------------------------------
sub one_shot(\%$) {
my ($self, $req) = @_;
return if (!$self->{DBH});
my $row_ary = $self->{DBH}->selectrow_arrayref($req) || return undef;
print STDERR $req,"\n", Data::Dumper->Dump([$row_ary]) if $debug;
return $row_ary->[0] || undef;
}
#------------------------------------------------------------------------------
# add_to_db
#------------------------------------------------------------------------------
sub add_to_db(\%\%) {
my ($self, $ref)=@_;
return if (!ref($ref) || ref($ref) ne 'HASH' || !$ref->{os});
my ($nbco, $nbcf, $nbcm, $nbcc)=(0,0,0,0);
my ($cc,$ccf,$f,$r) = ($ref->{cc}||' ',$ref->{ccver} || ' ',
$ref->{failure},$ref->{report});
foreach ($cc,$ccf,$f,$r) { if ($_) { s/'/\\'/g; s/^\s*//g; }}
# Count make test ok / build fail in make / configure fail / make test fail
foreach my $c (keys %{$$ref{build}}) {
foreach (split(/ /,$$ref{build}{$c})) {
if ($_ eq 'O') { $nbco++; }
elsif ($_ eq 'F') { $nbcf++; }
elsif ($_ eq 'm') { $nbcm++; }
elsif ($_ eq 'c') { $nbcc++; }
}
}
my $pass = (($nbcf || $nbcm || $nbcc) ? 0 : 1);
printf( "\t =>%25s %s %5s (%s) %s\n",
$ref->{os}." ".$ref->{osver}, ($pass ? "PASS" : "FAIL"),
$ref->{version}, basename($ref->{file}), $ref->{date}) if $verbose;
# Ajout des infos sur le host
my $v2 = ($ref->{matrix} ? join("|", @{$ref->{matrix}}) : '');
my $req = "INSERT INTO builds(";
$req.= 'id,' if ($ref->{id});
$req.= "os,osver,cc,ccver,date,smoke,version,author,nbc,nbco,nbcf,nbcm,nbcc,nbte,archi) ".
"VALUES (";
$req.= "$ref->{id}," if ($ref->{id});
$req.= <<EOF;
'$ref->{os}',
'$ref->{osver}',
'$cc',
( run in 0.821 second using v1.01-cache-2.11-cpan-524268b4103 )