]> mj.ucw.cz Git - bex.git/blobdiff - bq
Bug fixes
[bex.git] / bq
diff --git a/bq b/bq
index 89bfa3f636cd0f5dbe06669fd7f03ea64b8331b6..55ef17728984fe8ffdc67199ca8f04731df44a04 100755 (executable)
--- a/bq
+++ b/bq
@@ -5,28 +5,60 @@
 use strict;
 use warnings;
 use Getopt::Long;
+use POSIX;
 
 use lib 'lib';
 use BEX;
 
+my $by_host;
 my $queue_name;
 
 GetOptions(
+       "h|by-host!" => \$by_host,
        "q|queue=s" => \$queue_name,
 ) or die <<AMEN ;
 Usage: bq [<options>] [[!]<machine-or-class> ...]
 
 Options:
+-h, --by-host          Show jobs sorted by host (default: by job)
 -q, --queue=<name>     Show jobs in the given queue
 AMEN
 
 my @machines = BEX::Config::parse_machine_list(@ARGV ? @ARGV : '*');
 my $queue = BEX::Queue->new($queue_name);
+
+my %jobs = ();
+my %machs = ();
+my %subj = ();
+my %stat = ();
 for my $m (@machines) {
-       print "$m:\n";
-       my @q = $queue->scan($m);
-       for my $j (@q) {
+       for my $j ($queue->scan($m)) {
+               push @{$jobs{$j}}, $m;
+               push @{$machs{$m}}, $j;
                my $job = $queue->job_metadata($j);
-               print "\t$j (", $job->attr('Subject'), ")\n";
+               $subj{$j} = ' (' . $job->{'Subject'} . ')';
+               my $st = $queue->read_job_status($m, $j);
+               if (defined($st->{'Time'}) && defined($st->{'Status'})) {
+                       $stat{$m}{$j} = ' [' . $st->{'Status'} . ' on ' .
+                                       POSIX::strftime('%Y-%m-%d', localtime $st->{'Time'}) . ']';
+               } else {
+                       $stat{$m}{$j} = '';
+               }
+       }
+}
+
+if ($by_host) {
+       for my $m (sort keys %machs) {
+               print "$m\n";
+               for my $j (@{$machs{$m}}) {
+                       print "\t$j", $subj{$j}, $stat{$m}{$j}, "\n";
+               }
+       }
+} else {
+       for my $j (sort keys %jobs) {
+               print $j, $subj{$j}, "\n";
+               for my $m (sort @{$jobs{$j}}) {
+                       print "\t$m", $stat{$m}{$j}, "\n";
+               }
        }
 }