#!/usr/bin/env perl
# created on 2013-09-09

use warnings;
use strict;
use 5.010;

use Data::Printer;

my @cmd = ( 'qstat', '-xml', @ARGV );

open my $fh, '-|', @cmd or die "Can't open filehandle: $!";

my $data = do { local $/; <$fh> };
$fh->close;

use XML::LibXML;
my $doc = XML::LibXML->load_xml( string => $data );

printf "%-7s %-7s %-60s %-15s %-3s %-19s %-21s %-3s %-15s\n", "job-ID", "pri", "name", "user", "st", "start",
  "queue", "slt",
  "task";
say "-" x 147;
for my $n ( $doc->findnodes('/job_info/queue_info/job_list') ) {
  print_node_details($n);
}
for my $n ( $doc->findnodes('/job_info/job_info/job_list') ) {
  print_node_details($n);
}

sub print_node_details {
  my $n      = shift;
  my $jid    = $n->findvalue('./JB_job_number');
  my $jname  = $n->findvalue('./JB_name');
  my $jstate = $n->findvalue('./state');
  my $jprio  = $n->findvalue('./JAT_prio');
  my $jtasks = $n->findvalue('./tasks');
  my $jslots = $n->findvalue('./slots');
  my $juser  = $n->findvalue('./JB_owner');
  my $jqueue = $n->findvalue('./queue_name');
  $jname = substr $jname, 0, 60;
  $jqueue =~ s/\.local$//;
  my $jstart = $n->findvalue('./JAT_start_time') // $n->findvalue('./JB_submission_time');
  $jstart =~ s/T/ /;
  printf "%7d %.5f %-60s %-15s %-3s %-19s %-21s %3s %-15s\n", $jid, $jprio, $jname, $juser, $jstate, $jstart,
    $jqueue,
    $jslots, $jtasks;

}
#2013-09-09T16:19:17
#job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID
