#!/home/trushel/perl/perl5124/bin/perl -w # $Id: 0sendreports.pl 2 2009-12-09 14:45:31Z stro $ use strict; use warnings; my $REPORTS_DIR = './reports'; # directory where reports are stored my $SEND_TIMEOUT = 0; # seconds between submitting reports my $SLEEP = 3600; # seconds between rescans when no reports left to send my $RESCAN_AFTER = 1000; # rescan reports directory after sending that much reports my $SUBMISSION_TIME = 1.83; # average time in seconds for submission my $METABASE_URL = 'http://metabase.cpantesters.org/beta/'; my $METABASE_ID = '/home/trushel/.cpanreporter/stro.json'; use Test::Reporter 1.57; use Test::Reporter::Transport::Metabase 1.999008; use Metabase::Client::Simple 0.008; use Metabase::Fact 0.016; use File::Spec; $| = 1; # Main loop my $done; my $sent_after_rescan = 0; RESCAN: while (not $done) { # Read directory, get file list opendir(my $DIR, $REPORTS_DIR) or die 'Cannot read directory: ', $!; my @files = grep { /\.rpt$/ } readdir $DIR; closedir $DIR; # @files = grep { not /^pass/ } @files; if (scalar @files) { my $j = 0; print $/, 'Found ', scalar @files, ' files, estimated completion time is ', (scalar localtime time + scalar @files * ($SEND_TIMEOUT + $SUBMISSION_TIME)) . ', '; foreach my $file (@files) { $file = File::Spec->catfile($REPORTS_DIR, $file); $j++; my $tr = Test::Reporter->new( 'transport' => 'Metabase', 'transport_args' => [ 'uri' => $METABASE_URL, 'id_file' => $METABASE_ID, ], )->read( $file ); my $res = $tr->send(); if ($tr->errstr()) { print $/, $file, $/ x 2, $tr->errstr(), $/; next; } else { print '.'; } unlink $file or die 'Cannot unlink file, something wrong happened'; sleep $SEND_TIMEOUT; $sent_after_rescan++; if ($sent_after_rescan == $RESCAN_AFTER) { $sent_after_rescan = 0; next RESCAN; } } print $/; next RESCAN; } else { print 'No reports to send, sleeping until ', scalar localtime time + $SLEEP, $/; sleep $SLEEP; } } print $/;