- get_logger->info("Job result: " . $meta->{result_text});
- return unless $jobr;
- $jobr->update({
- result => $meta->{result},
- result_text => $meta->{result_text},
- ($meta->{results} ? (results => encode_json $meta->{results}) : ()),
- $errors ? (errors => $errors) : ()
- });
-
- my $log = $jobr->contest ? 'ct/' . $jobr->contest->id . '/log' : 'log';
- my $page = int (($job + PAGE_SIZE - 1) / PAGE_SIZE);
-
- purge "/$log/$job";
- purge "/$log/";
- purge "/$log/st";
- purge "/$log/page/$_" for $page - 1, $page, $page + 1;
+ get_logger->info('Job result: ' . $meta->{result_text});
+}
+
+sub process_job {
+ my ($job) = @_;
+ my $pb = db()->select('problems', '*', {id => $job->{problem}})->hash;
+ my $meta = {
+ problem => $job->{problem},
+ files => {
+ prog => {
+ name => 'prog.' . $job->{extension},
+ format => $job->{format},
+ content => $job->{source},
+ },
+ },
+ map { $_ => $pb->{$_} } qw/generator runner judge precnt testcnt timeout olimit/
+ };
+ my $timeout_override = db()->query('SELECT timeout FROM limits WHERE problem=? AND format=?', $job->{problem}, $job->{format})->list;
+ $meta->{timeout} = $timeout_override if defined $timeout_override;
+ $meta->{tests} = decode_json $pb->{tests} if $meta->{runner} eq 'File';
+ $job->{contest} &&= contest_entry($job->{contest});
+ delete $meta->{precnt} unless $job->{contest} && $job->{contest}{started} && !$job->{contest}{finished};
+ $meta->{testcnt} = $meta->{precnt} if $meta->{precnt};
+
+ $meta->{files}{ver} = {
+ name => 'ver.' . FORMAT_EXTENSION->{$pb->{verformat}},
+ format => $pb->{verformat},
+ content => $pb->{versource},
+ } if $pb->{verformat};
+
+ process $meta;
+
+ $meta->{result_text} .= ' (pretests)' if $meta->{precnt};
+ finish_job($job, $job->{private} || $pb->{private},
+ result => $meta->{result},
+ result_text => $meta->{result_text},
+ ($meta->{results} ? (results => encode_json $meta->{results}) : ()),
+ $meta->{errors} ? (errors => $meta->{errors}) : ());