Merge branch 'master' into scaleway
authorMarius Gavrilescu <marius@ieval.ro>
Thu, 11 Feb 2016 16:29:35 +0000 (16:29 +0000)
committerMarius Gavrilescu <marius@ieval.ro>
Thu, 11 Feb 2016 16:29:35 +0000 (16:29 +0000)
1  2 
lib/Gruntmaster/Daemon.pm
lib/Gruntmaster/Daemon/Format.pm

index b8c6b5c5c839052baf31bd6a50d42d5cf3298cac,2af9b5306a78229d334deaa819bd2b0fd30ece26..ef3aea61a758222da80b195914079246e8e02920
@@@ -7,13 -7,12 +7,12 @@@ use warnings
  our $VERSION = '5999.000_005';
  
  use Gruntmaster::Daemon::Constants qw/ERR/;
 -use Gruntmaster::Daemon::Format qw/prepare_files stopvms/;
 +use Gruntmaster::Daemon::Format qw/prepare_files copy_from_vm stopvms/;
  
  use File::Slurp qw/read_file/;
  use File::Temp qw/tempdir/;
  use JSON qw/decode_json encode_json/;
  use Sys::Hostname qw/hostname/;
- use Time::HiRes qw/time/;
  use Try::Tiny;
  use Log::Log4perl qw/get_logger/;
  
@@@ -68,7 -67,6 +67,6 @@@ sub process
                $judge = safe_can Judge => judge => $judge;
  
                for my $test (1 .. $testcnt) {
-                       my $start_time = time;
                        my $result;
                        unlink 'result';
                        try {
                                }
                        };
  
+                       my $time = '?';
+                       $time = (read_file 'time-stop-prog') - (read_file 'time-start-prog') if -f 'time-stop-prog' && -f 'time-start-prog';
+                       unlink 'time-start-prog', 'time-stop-prog';
                        if (ref $result) {
                                my $result_text = $result->[1];
 +                              copy_from_vm 'result';
                                $result_text .= ': ' . read_file 'result' if -s 'result';
                                get_logger->trace("Test $test result is " . $result_text);
-                               push @full_results, {id => $test, result => $result->[0], result_text => $result_text, time => time - $start_time}
+                               push @full_results, {id => $test, result => $result->[0], result_text => $result_text, time => $time}
                        } else {
                                get_logger->trace("Test $test result is $result");
-                               push @full_results, {id => $test, result => 0, result_text => $result, time => time - $start_time}
+                               push @full_results, {id => $test, result => 0, result_text => $result, time => $time}
                        }
                        push @results, $result;
                        last if $meta->{judge} eq 'Absolute' && ref $result
index 41f235499d6928579eca84be9150bcde888cea8e,6d6bd8fd1fc8e8f1ce03a2866743fc632e4df222..2f117d7e923e837509223f91371e0b3ead5cc5c4
@@@ -14,46 -14,31 +14,47 @@@ use File::Slurp qw/read_file write_file
  use List::MoreUtils qw/natatime/;
  use Log::Log4perl qw/get_logger/;
  use String::ShellQuote qw/shell_quote/;
+ use Time::HiRes qw/time/;
  use Try::Tiny;
  
  our $VERSION = '5999.000_005';
 -our @EXPORT_OK = qw/prepare_files stopvms/;
 +our @EXPORT_OK = qw/copy_from_vm copy_to_vm prepare_files stopvms/;
  
  ##################################################
  
  our (%vm, %pid);
  
 +sub copy_from_vm {
 +      my ($file) = @_;
 +      return unless $ENV{GRUNTMASTER_COPY_FROM_VM};
 +      get_logger->trace("Copying $file from VM");
 +      system $ENV{GRUNTMASTER_COPY_FROM_VM}, $file
 +}
 +
 +sub copy_to_vm {
 +      my ($file) = @_;
 +      return unless $ENV{GRUNTMASTER_COPY_TO_VM};
 +      get_logger->trace("Copying $file to VM");
 +      system $ENV{GRUNTMASTER_COPY_TO_VM}, $file
 +}
 +
  sub runvm {
        my ($name, $arg) = @_;
        return unless $ENV{GRUNTMASTER_VM};
 -      my $cmd = $ENV{GRUNTMASTER_VM};
 +      my $cmd = $ENV{GRUNTMASTER_VM} . ' ' . $name;
        $cmd .= ' ' . $arg if $arg;
        get_logger->trace("Starting VM $name ($cmd)");
        $vm{$name} = Expect->new;
        $vm{$name}->raw_pty(1);
        $vm{$name}->log_stdout(0);
        $vm{$name}->spawn($cmd);
 -      $vm{$name}->expect(5, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error);
 +      $vm{$name}->expect(50, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error);
 +      $vm{$name}->send("rm -rf ~/work/*\n");
 +      $vm{$name}->expect(50, '# ')
  }
  
  sub stopvms {
 -      kill KILL => $_->pid for values %vm;
 +      $_->hard_close for values %vm;
        %vm = %pid = ();
  }
  
@@@ -62,15 -47,15 +63,16 @@@ sub execlist_finish 
  
        if ($vm{$vm}) {
                warn "Cannot kill VM\n" if $kill;
 -              $vm{$vm}->expect(5, '# ');
 +              $vm{$vm}->expect(50, '# ');
        } else {
                kill KILL => $pid{$vm} if $kill;
                waitpid $pid{$vm}, 0;
        }
+       write_file "time-stop-$vm", time;
        return if $kill;
  
        my $er = "exec-result-$vm";
 +      copy_from_vm $er;
        die "gruntmaster-exec died\n" if -z $er;
        my ($excode, $exmsg) = read_file $er;
        unlink $er;
@@@ -81,6 -66,7 +83,7 @@@
  
  sub execlist {
        my ($vm, @args) = @_;
+       write_file "time-start-$vm", time;
        my $er = "exec-result-$vm";
        if ($vm{$vm}) {
                my $cmd = ">$er " . shell_quote 'gruntmaster-exec', @args;
@@@ -129,7 -115,6 +132,7 @@@ sub prepare
                my $exmsg = $_->[1];
                die "Compile error ($exmsg)\n"
        } finally {
 +              copy_from_vm 'errors';
                $Gruntmaster::Daemon::errors .= read_file 'errors';
                $Gruntmaster::Daemon::errors .= "\n" if -s 'errors';
                unlink 'errors';
@@@ -150,7 -135,6 +153,7 @@@ sub prepare_files
  
                $file->{run} = mkrun($format);
                write_file $name, $content;
 +              copy_to_vm $name;
                if ($ENV{GRUNTMASTER_CCACHE}) {
                        my $key = lc sha256_hex($content) . '-' . $format;
                        my $cachefn = "$ENV{GRUNTMASTER_CCACHE}/$key";
This page took 0.015524 seconds and 4 git commands to generate.