- delete $meta->{files}{$_}{run} for keys $meta->{files};
- $meta->{date} = time;
- $meta->{results} = \@full_results if scalar @full_results;
- DumpFile "meta.yml", $meta;
- for (<*>) {
- unlink $_ unless $_ eq 'in' || $_ eq 'meta.yml';
- }
- chdir '../..';
- 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.htm';
- DumpFile 'log/meta.yml', $logmeta;
- undef $logmetafh;
- generate 'log/index.html'
+ set_job_result $job, $meta->{result};
+ set_job_result_text $job, $meta->{result_text};
+ set_job_results $job, \@full_results if scalar @full_results;
+ set_job_errors $job, $errors;
+
+ my $log = $Gruntmaster::Data::contest ? "ct/$Gruntmaster::Data::contest/log" : 'log';
+
+ PUBLISH gensrc => ($Gruntmaster::Data::contest // '') . ".$job";
+ PUBLISH genpage => "$log/job/$job.html";
+ PUBLISH genpage => "$log/index.html";
+ PUBLISH genpage => "$log/st.html";
+ my $page = ($job + PAGE_SIZE - 1) / PAGE_SIZE;
+ PUBLISH genpage => "$log/@{[$page - 1]}.html";
+ PUBLISH genpage => "$log/$page.html";
+ PUBLISH genpage => "$log/@{[$page + 1]}.html";
+
+ purge "/$log/job/$job";
+ purge "/$log/";
+ purge "/$log/st";
+ purge "/$log/$_" for $page - 1, $page, $page + 1;
+}
+
+sub got_job{
+ $_[0] =~ /^(\w*)\.(\d+)$/;
+ my $job = $2;
+ local $Gruntmaster::Data::contest = $1 if $1;
+ get_logger->debug("Taking job $job@{[defined $1 ? \" of contest $1\" : '']}...");
+ if (set_job_daemon $job, hostname . ":$$") {
+ get_logger->debug("Succesfully taken job $job");
+ process $job;
+ get_logger->debug("Job $job done");
+ } else {
+ get_logger->debug("Job $job already taken");
+ }