#!/usr/bin/perl -w #Use instead of the un-human-readable output from the #bpdbjobs -report -all_columns command. use strict; $ENV{PATH} = '/bin:/usr/bin:/usr/openv/netbackup/bin:/usr/openv/netbackup/bin/admincmd:/usr/openv/volmgr/bin'; sub formattime { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(shift); return sprintf('%04d/%02d/%02d %02d:%02d:%02d', $year + 1900, $mon + 1, $mday, $hour, $min, $sec); }sub formathour { my $sec = shift; my $min = $sec / 60; $sec %= 60; my $hour = $min / 60; $min %= 60; return sprintf('%02d:%02d:%02d', $hour, $min, $sec); }my %images; open(BPIMAGELIST, join(' ', "bpimagelist -l", @ARGV, '|')) or die "Can't exec bpimagelist: $@\n"; my $image; while () { if (/^IMAGE/) { my ($client, $id, $class, $sched, $started, $elapsed, $kbytes, $files, $keyword) = (split)[1, 5, 6, 10, 13, 14, 18, 19, 31]; my $idsuffix = $id; $idsuffix =~ s/.*_//; $image = $images{$id} = { client => $client, id => $idsuffix, class => $class, sched => $sched, started => $started, elapsed => $elapsed, kbytes => $kbytes, files => $files, keyword => $keyword, tapes => {}, }; } elsif (/^FRAG/) { ++$image->{tapes}{(split)[8]}; }}close(BPIMAGELIST); $= = 2 + scalar keys %images; my ($i, $tapes); foreach $i (sort { $a->{started} <=> $b->{started} } values %images) { $tapes = join(' ', sort keys %{$i->{tapes}}); write; }format STDOUT_TOP = Client ID Class Schedule Started Elapsed Keyword Kbytes Files Tapes ------------ ---------- ----------- ----------- ------------------- -------- ------------ ------------ -------- -------------------- . format STDOUT = @<<<<<<<<<<< @>>>>>>>>> @<<<<<<<<<< @<<<<<<<<<< @<<<<<<<<<<<<<<<<<< @<<<<<<< @<<<<<<<<<<< @>>>>>>>>>>> @>>>>>>> ^<<<<<<<<<<<<<<<<<<<< $i->{client}, $i->{id}, $i->{class}, $i->{sched}, formattime($i->{started}), formathour($i->{elapsed}), $i->{keyword}, $i->{kbytes}, $i->{files}, $tapes ~~ ^<<<<<<<<<<<<<<<<<<<< $tapes