- my %results = $judge->(@results);
- $meta->{$_} = $results{$_} for keys %results;
- } catch {
- s,(.*) at .*,$1,;
- chomp;
- $meta->{result} = -1;
- $meta->{result_text} = $_;
- };
-
- # Clean up
- get_logger->info("Job result: " . $meta->{result_text});
- delete $meta->{files}{$_}{run} for keys $meta->{files};
- $meta->{results} = \@full_results if scalar @full_results;
- DumpFile "meta.yml", $meta;
- for (<*>) {
- unlink $_ unless $_ eq 'in' || $_ eq 'meta.yml' || ($_ eq 'compile-error' && -s);
- }
- chdir '../..';
- my $log = exists $meta->{contest} ? "ct/$meta->{contest}/log" : 'log';
- mkdir $log unless -d $log;
- IO::File->new(">$log/meta.yml")->close unless -f "$log/meta.yml";
- flock my $logmetafh = IO::File->new("<$log/meta.yml"), LOCK_EX;
- my $logmeta = LoadFile "$log/meta.yml";
- $logmeta->{last}++;
- rename $dir, "$log/$logmeta->{last}";
- generate "$log/$logmeta->{last}/index.html";
- DumpFile "$log/meta.yml", $logmeta;
- undef $logmetafh;
- generate "$log/index.html"
+ my %results = $judge->(@results);
+ $meta->{$_} = $results{$_} for keys %results;
+ $meta->{results} = \@full_results
+ } catch {
+ s,(.*) at .*,$1,;
+ chomp;
+ $meta->{result} = -1;
+ $meta->{result_text} = $_;
+ };
+
+ 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;
+}
+
+sub got_job{
+ my $job = $_[0];
+ my $id = $job->id;
+ get_logger->debug("Taking job $id...");
+ my $daemon = hostname . ":$$";
+ $job->update({daemon => $daemon});
+ #if (set_job_daemon $job, hostname . ":$$") {
+ if (1) {
+ get_logger->debug("Succesfully taken job $id");
+ process $id, $job;
+ get_logger->debug("Job $id done");
+ } else {
+ get_logger->debug("Job $id already taken");
+ }