#!/usr/bin/perl use strict; use warnings; BEGIN { defined $ENV{"MO_ROOT"} or die "Please set MO_ROOT to the contest root directory first.\n"; } use lib $ENV{"MO_ROOT"} . "/lib/perl5"; use lib "."; ### FIXME use MO::Submit; use Sherlock::Object; use POSIX; @ARGV == 0 or die "Usage: remote-status\n"; my $conn = new MO::Submit; $conn->connect or die $conn->{"error"} . "\n"; sub or_die($) { my $r = shift @_; if (!defined $r) { die $conn->{"error"} . "\n"; } my $err = $r->get("-"); if ($err) { die "$err\n"; } } my $r = new Sherlock::Object("!" => "STATUS"); $r = $conn->request($r); or_die($r); #$r->write_indented(*STDOUT); my %tasks = map { $_->get("T") => $_ } $r->getarray("(T"); foreach my $task (sort keys %tasks) { my $t = $tasks{$task}; my %parts = map { $_->get("P") => $_ } $t->getarray("(P"); my @pp = keys %parts; if (@pp != 1) { @pp = sort { $a <=> $b } @pp; # We expect that the parts are numeric } foreach my $part (@pp) { my $p = $parts{$part}; my $name = $task; $part eq $task or $name .= "/$part"; printf "%-16s", $name; my $current_ver = $p->get("V"); my $printed = 0; foreach my $v ($p->getarray("(V")) { if ($v && $v->get("V") == $current_ver) { my $time = strftime("%H:%M:%S", localtime $v->get("T")); print "OK (", "$part.", $v->get("X"), ", ", $v->get("L"), " bytes, ", $v->get("S"), " $time)\n"; $printed = 1; } } $printed or print "---\n"; } } $conn->disconnect;