X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FGruntmaster%2FData%2FResult%2FJob.pm;h=39d44bd81716ab02d910dceecfed6f6f9941ec84;hb=78c794d653161038dd4ef5986d7c7a5b96baff82;hp=6f1084ffe98408dcde59b8f57133ddea2f90d281;hpb=4ed3f8e7c64594bb4ea26abb1c4fb51a5a8258d6;p=gruntmaster-data.git diff --git a/lib/Gruntmaster/Data/Result/Job.pm b/lib/Gruntmaster/Data/Result/Job.pm index 6f1084f..39d44bd 100644 --- a/lib/Gruntmaster/Data/Result/Job.pm +++ b/lib/Gruntmaster/Data/Result/Job.pm @@ -6,7 +6,7 @@ package Gruntmaster::Data::Result::Job; =head1 NAME -Gruntmaster::Data::Result::Job +Gruntmaster::Data::Result::Job - List of jobs =cut @@ -34,33 +34,43 @@ __PACKAGE__->table("jobs"); data_type: 'text' is_foreign_key: 1 - is_nullable: 0 + is_nullable: 1 =head2 daemon data_type: 'text' is_nullable: 1 +hostname:PID of daemon that last executed this job. NULL if never executed + =head2 date data_type: 'bigint' is_nullable: 0 +Unix time when job was submitted + =head2 errors data_type: 'text' is_nullable: 1 +Compiler errors + =head2 extension data_type: 'text' is_nullable: 0 +File extension of submitted program, without a leading dot + =head2 format data_type: 'text' is_nullable: 0 +Format (programming language) of submitted program + =head2 private data_type: 'boolean' @@ -78,16 +88,22 @@ __PACKAGE__->table("jobs"); data_type: 'integer' is_nullable: 1 +Job result (integer constant from Gruntmaster::Daemon::Constants) + =head2 result_text data_type: 'text' is_nullable: 1 +Job result (human-readable text) + =head2 results - data_type: 'json' + data_type: 'text' is_nullable: 1 +Per-test results (JSON array of hashes with keys id (test number, counting from 1), result (integer constant from Gruntmaster::Daemon::Constants), result_text (human-readable text), time (execution time in decimal seconds)) + =head2 source data_type: 'text' @@ -110,7 +126,7 @@ __PACKAGE__->add_columns( sequence => "jobs_id_seq", }, "contest", - { data_type => "text", is_foreign_key => 1, is_nullable => 0 }, + { data_type => "text", is_foreign_key => 1, is_nullable => 1 }, "daemon", { data_type => "text", is_nullable => 1 }, "date", @@ -130,7 +146,7 @@ __PACKAGE__->add_columns( "result_text", { data_type => "text", is_nullable => 1 }, "results", - { data_type => "json", is_nullable => 1 }, + { data_type => "text", is_nullable => 1 }, "source", { data_type => "text", is_nullable => 0 }, "owner", @@ -163,7 +179,12 @@ __PACKAGE__->belongs_to( "contest", "Gruntmaster::Data::Result::Contest", { id => "contest" }, - { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" }, + { + is_deferrable => 0, + join_type => "LEFT", + on_delete => "CASCADE", + on_update => "NO ACTION", + }, ); =head2 owner @@ -178,7 +199,7 @@ __PACKAGE__->belongs_to( "owner", "Gruntmaster::Data::Result::User", { id => "owner" }, - { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, ); =head2 problem @@ -193,13 +214,68 @@ __PACKAGE__->belongs_to( "problem", "Gruntmaster::Data::Result::Problem", { id => "problem" }, - { is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" }, + { is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" }, ); +=head2 problem_statuses -# Created by DBIx::Class::Schema::Loader v0.07039 @ 2014-03-06 12:41:16 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:lIETgGgMTSOUUuDuFa/+SQ +Type: has_many +Related object: L + +=cut + +__PACKAGE__->has_many( + "problem_statuses", + "Gruntmaster::Data::Result::ProblemStatus", + { "foreign.job" => "self.id" }, + { cascade_copy => 0, cascade_delete => 0 }, +); + + +# Created by DBIx::Class::Schema::Loader v0.07042 @ 2014-12-19 16:54:00 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:hEAVL5heV13+nalSmgr0WA + +use Class::Method::Modifiers qw/after/; + +sub rawcontest { shift->get_column('contest') } +sub rawowner { shift->get_column('owner') } +sub rawproblem { shift->get_column('problem') } + +sub rerun { + shift->update({daemon => undef, result => -2, result_text => undef}); +} + +after qw/insert update delete/ => sub { + my ($self) = @_; + Gruntmaster::Data::purge '/us/'; + Gruntmaster::Data::purge '/us/' . $self->rawowner; + Gruntmaster::Data::purge '/st/' . $self->rawcontest if $self->rawcontest; + Gruntmaster::Data::purge '/log/'; + Gruntmaster::Data::purge '/log/' . $self->id; +}; -# You can replace this text with custom code or comments, and it will be preserved on regeneration 1; + +__END__ + +=head1 METHODS + +=head2 rerun + +Reruns this job. + +=head1 AUTHOR + +Marius Gavrilescu Emarius@ieval.roE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2014 by Marius Gavrilescu + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.18.1 or, +at your option, any later version of Perl 5 you may have available. + + +=cut