X-Git-Url: http://git.ieval.ro/?p=gruntmaster-daemon.git;a=blobdiff_plain;f=lib%2FGruntmaster%2FDaemon.pm;h=6cc6431d050cd858ee8cad47a2c6528f6f6973c7;hp=7fef7f68dd6334508d1fe09732aa61c4557b4a08;hb=7be5f05486dc972422c0243f7e0affe7c0dad523;hpb=513eadc35a570c8e971f3cc2c2eaede340f4895d diff --git a/lib/Gruntmaster/Daemon.pm b/lib/Gruntmaster/Daemon.pm index 7fef7f6..6cc6431 100644 --- a/lib/Gruntmaster/Daemon.pm +++ b/lib/Gruntmaster/Daemon.pm @@ -32,7 +32,7 @@ use constant FORMAT_EXTENSION => { ################################################## -my $db = Gruntmaster::Data->connect('dbi:Pg:'); +my $db; my $ua = LWP::UserAgent->new; my @purge_hosts = exists $ENV{PURGE_HOSTS} ? split ' ', $ENV{PURGE_HOSTS} : (); @@ -68,24 +68,28 @@ sub process{ my $meta; our $errors = ''; try { - $meta = { - problem => $jobr->problem->id, - files => { - prog => { - name => 'prog.' . $jobr->extension, - format => $jobr->format, - content => $jobr->source, + if (ref $job) { + $meta = $job; + } else { + $meta = { + problem => $jobr->problem->id, + files => { + prog => { + name => 'prog.' . $jobr->extension, + format => $jobr->format, + content => $jobr->source, + }, }, - }, - map { $_ => $jobr->problem->get_column($_) } qw/generator runner judge testcnt timeout olimit/ - }; - $meta->{tests} = decode_json $jobr->problem->tests if $meta->{runner} eq 'File'; + map { $_ => $jobr->problem->get_column($_) } qw/generator runner judge testcnt timeout olimit/ + }; + $meta->{tests} = decode_json $jobr->problem->tests if $meta->{runner} eq 'File'; - $meta->{files}{ver} = { - name => 'ver.' . FORMAT_EXTENSION->{$jobr->problem->verformat}, - format => $jobr->problem->verformat, - content => $jobr->problem->versource, - } if $jobr->problem->verformat; + $meta->{files}{ver} = { + name => 'ver.' . FORMAT_EXTENSION->{$jobr->problem->verformat}, + format => $jobr->problem->verformat, + content => $jobr->problem->versource, + } if $jobr->problem->verformat; + } prepare_files $meta; chomp $errors; @@ -123,6 +127,7 @@ sub process{ my %results = $judge->(@results); $meta->{$_} = $results{$_} for keys %results; + $meta->{results} = \@full_results } catch { s,(.*) at .*,$1,; chomp; @@ -131,10 +136,11 @@ sub process{ }; get_logger->info("Job result: " . $meta->{result_text}); + return unless $jobr; $jobr->update({ result => $meta->{result}, result_text => $meta->{result_text}, - results => encode_json \@full_results, + results => encode_json $meta->{results}, $errors ? (errors => $errors) : () }); @@ -164,6 +170,7 @@ sub got_job{ } sub run{ + $db = Gruntmaster::Data->connect('dbi:Pg:'); Log::Log4perl->init('/etc/gruntmasterd/gruntmasterd-log.conf'); get_logger->info("gruntmasterd $VERSION started"); chdir tempdir 'gruntmasterd.XXXX', CLEANUP => 1, TMPDIR => 1;