Imported Upstream version 2.6.0
[debian/amanda] / server-src / amstatus.pl.in
diff --git a/server-src/amstatus.pl.in b/server-src/amstatus.pl.in
deleted file mode 100644 (file)
index db853d0..0000000
+++ /dev/null
@@ -1,1480 +0,0 @@
-#!@PERL@ -Tw
-#
-
-# Run perl.
-eval '(exit $?0)' && eval 'exec @PERL@ -S $0 ${1+"$@"}'
-        & eval 'exec @PERL@ -S $0 $argv:q'
-               if 0;
-
-require "newgetopt.pl";
-use Time::Local;
-
-delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV', 'PATH'};
-$ENV{'PATH'} = "/usr/bin:/usr/sbin:/sbin:/bin";
-
-$confdir="@CONFIG_DIR@";
-$prefix='@prefix@';
-$prefix=$prefix;               # avoid warnings about possible typo
-$exec_prefix="@exec_prefix@";
-$exec_prefix=$exec_prefix;     # ditto
-$sbindir="@sbindir@";
-
-#$STATUS_STRANGE =  2;
-$STATUS_FAILED  =  4;
-$STATUS_MISSING =  8;
-$STATUS_TAPE    = 16;
-$exit_status    =  0;
-
-$USE_VERSION_SUFFIXES='@USE_VERSION_SUFFIXES@';
-$suf = '';
-if ( $USE_VERSION_SUFFIXES =~ /^yes$/i ) {
-        $suf='-@VERSION@';
-}
-
-$result = &NGetOpt (   "summary",
-                       "stats|statistics",
-                       "dumping|d",
-                       "waitdumping|wdumping",
-                       "waittaper|wtaper",
-                       "dumpingtape|dtape",
-                       "writingtape|wtape",
-                       "finished",
-                       "failed|error",
-                       "estimate",
-                       "gestimate|gettingestimate",
-                       "date",
-                       "config|c:s",
-                       "file:s"
-                       );
-if($result !=1 ) {
-       &usage();
-}
-
-if( defined $opt_config ) {
-       $conf = $opt_config;
-}
-else {
-       if($#ARGV == 0 ) {
-               $conf=$ARGV[0];
-       }
-       else {
-               &usage();
-       }
-}
-
-#untaint user input $ARGV[0]
-
-if ($conf =~ /^([\w.-]+)$/) {          # $1 is untainted
-   $conf = $1;
-} else {
-    die "filename '$conf' has invalid characters.\n";
-}
-
-
-if ( ! -e "$confdir/$conf" ) {
-    print "Configuration directory '" . $confdir/$conf . "' doesn't exist\n";
-    exit 1;
-}
-if ( ! -d "$confdir/$conf" ) {
-    print "Configuration directory '" . $confdir/$conf . "' is not a directory\n";
-    exit 1;
-}
-
-$pwd = `pwd`;
-chomp $pwd;
-chdir "$confdir/$conf";
-
-$logdir=`$sbindir/amgetconf$suf logdir`;
-exit 1 if $? != 0;
-chomp $logdir;
-$errfile="$logdir/amdump";
-
-$nb_options = defined( $opt_summary ) +
-                                 defined( $opt_stats ) +
-                                 defined( $opt_dumping ) +
-                                 defined( $opt_waitdumping ) +
-                                 defined( $opt_waittaper ) +
-                                 defined( $opt_dumpingtape ) +
-                                 defined( $opt_writingtape ) +
-                                 defined( $opt_finished ) +
-                                 defined( $opt_estimate ) +
-                                 defined( $opt_gestimate ) +
-                                 defined( $opt_failed );
-
-if($nb_options == 0 ) {
-       $opt_summary     = 1;
-       $opt_stats       = 1; 
-       $opt_dumping     = 1;
-       $opt_waitdumping = 1;
-       $opt_waittaper   = 1;
-       $opt_dumpingtape = 1;
-       $opt_writingtape = 1;
-       $opt_finished    = 1;
-       $opt_failed      = 1;
-       $opt_gestimate   = 1;
-       $opt_estimate    = 1;
-}
-
-$unit=`$sbindir/amgetconf$suf displayunit`;
-chomp($unit);
-$unitdivisor=1;
-if($unit eq 'K') {
-  $unitdivisor = 1;
-  $unit='k';
-}
-elsif($unit eq 'M') {
-  $unitdivisor = 1024;
-  $unit='m';
-}
-elsif($unit eq 'G') {
-  $unitdivisor = 1024*1024;
-  $unit='g';
-}
-elsif($unit eq 'T') {
-  $unitdivisor = 1024*1024*1024;
-  $unit='t';
-}
-
-
-if( defined $opt_file) {
-       if( $opt_file =~ m,^/, ) {
-               $errfile = $opt_file;
-       } else {
-               $errfile = "$pwd/$opt_file";
-               $errfile = "$logdir/$opt_file" if ( ! (-f $errfile ));
-       }
-}
-else {
-       $errfile="$logdir/amflush" if(! (-f $errfile));
-       if (! -f $errfile) {
-               if (-f "$logdir/amflush.1" && -f "$logdir/amdump.1" &&
-                   -M "$logdir/amflush.1"  < -M "$logdir/amdump.1") {
-                       $errfile="$logdir/amflush.1";
-               } else {
-                       $errfile="$logdir/amdump.1";
-               }
-       }
-}
-
-open(AMDUMP,"<$errfile") || die("$errfile: $!");
-print "Using $errfile";
-
-$start_degraded_mode = 0;
-
-$label = "";                                   # -w fodder
-$origsize = 0;                                 # -w fodder
-$idle_dumpers = 0;
-$status_driver = "";
-$status_taper = 0;
-$estimate_done = 0;
-$holding_space = 0;
-$start_time = 0;
-@dumpers_active = ();
-$nb_tape = 0;
-$ntpartition{$nb_tape} = 0;
-$ntsize{$nb_tape} = 0;
-$ntesize{$nb_tape} = 0;
-$tape_size = 0;
-$driver_finished = 0;
-
-while(<AMDUMP>) {
-       chomp;
-       if(/(amdump|amflush): start at (.*)/) {
-               print " from $2\n";
-       }
-       elsif(/(amdump|amflush): datestamp (\S+)/) {
-               $gdatestamp = $2;
-               if(!defined $datestamp{$gdatestamp}) {
-                       $datestamp{$gdatestamp} = 1;
-                       push @datestamp, $gdatestamp;
-               }
-               $starttime=&set_starttime($2);
-       }
-       elsif(/(amdump|amflush): starttime (\S+)/) {
-               $starttime=&set_starttime($2);
-       }
-       elsif(/planner: timestamp (\S+)/) {
-               $gdatestamp = $1;
-               if(!defined $datestamp{$gdatestamp}) {
-                       $datestamp{$gdatestamp} = 1;
-                       push @datestamp, $gdatestamp;
-               }
-       }
-       elsif(/setup_estimate: ([_\-\d\.A-Za-z]*):(\S+): command .*, options: *(\S+) *last_level -?\d+ next_level0 -?\d+ level_days \d+ *getting estimates (-?\d) \(-2\) (-?\d) \(-2\) (-?\d) \(-2\)/) {
-               $host=$1;
-               $partition=$2;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $estimate{$hostpart}=0;
-               $level{$hostpart}=0;
-               $esize{$hostpart}=0;
-               $dump_started{$hostpart}=0;
-               $dump_finished{$hostpart}=0;
-               $taper_started{$hostpart}=0;
-               $taper_finished{$hostpart}=0;
-               $partialestimate{$hostpart}=0;
-               $error{$hostpart}="";
-               if($4 != -1) { $getest{$hostpart} .= ":$4:" };
-               if($5 != -1) { $getest{$hostpart} .= ":$5:" };
-               if($6 != -1) { $getest{$hostpart} .= ":$6:" };
-       }
-       elsif(/setup_estimate: (\S+):(\S+): command .*, options:/) {
-               $host=$1;
-               $partition=$2;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $estimate{$hostpart}=0;
-               $level{$hostpart}=0;
-               $esize{$hostpart}=0;
-               $dump_started{$hostpart}=0;
-               $dump_finished{$hostpart}=0;
-               $taper_started{$hostpart}=0;
-               $taper_finished{$hostpart}=0;
-               $partialestimate{$hostpart}=0;
-               $error{$hostpart}="";
-               $_ = <AMDUMP>;
-               while (! /getting estimates/) { $_ = <AMDUMP>; }
-               chomp;
-               if(/getting estimates (-?\d) \(-2\) (-?\d) \(-2\) (-?\d) \(-2\)/) {
-                       if($1 != -1) { $getest{$hostpart} .= ":$1:" };
-                       if($2 != -1) { $getest{$hostpart} .= ":$2:" };
-                       if($3 != -1) { $getest{$hostpart} .= ":$3:" };
-               }
-               else {
-                       die("ERROR $_");
-               }
-       }
-       elsif(/got result for host (\S+) disk (\S+): (\d+) -> (\d+)K,/) {
-               $host=$1;
-               $partition=$2;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $estimate{$hostpart}=1;
-               $level{$hostpart}=$3;
-               $esize{$hostpart}=$4 / $unitdivisor;
-               $partialestimate{$hostpart}=0;
-               $getest{$hostpart} = "";
-       }
-       elsif(/got partial result for host (\S+) disk (\S+): (-?\d+) -> (-?\d+)K, (-?\d+) -> (-?\d+)K, (-?\d+) -> (-?\d+)K/) {
-               $host=$1;
-               $partition=$2;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               if($4 > 0 || $6 > 0 || $8 > 0) {
-                       $estimate{$hostpart}=1;
-                       $level{$hostpart}=$3;
-                       $esize{$hostpart}=$4 / $unitdivisor;
-                       $partialestimate{$hostpart}=1;
-                       if($4 > 0) { $getest{$hostpart} =~ s/:$3://; }
-                       if($6 > 0) { $getest{$hostpart} =~ s/:$5://; }
-                       if($8 > 0) { $getest{$hostpart} =~ s/:$7://; }
-
-                       if($getest{$hostpart} eq "") { $partialestimate{$hostpart}=0; }
-               }
-       }
-       elsif(/getting estimates took/) {
-               $estimate_done=1;
-       }
-       elsif(/amflush/) {
-               $estimate_done=1;
-       }
-       elsif(/GENERATING SCHEDULE:/) {
-               $generating_schedule=1;
-       }
-       elsif(/^(\S+) (\S+) (\d+) (\d+) \d+:\d+:\d+:\d+:\d+:\d+ (\d+) \d+/) {
-               if($generating_schedule == 1 ) {
-                       $host=$1;
-                       $partition=$2;
-                       $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-                       $level{"$hostpart"}=$4;
-                       $esize=$5;
-                       $esize=32 if $esize<32;
-                       $esize{$hostpart}=$esize / $unitdivisor;
-                       $degr_level{$hostpart}=-1;
-               }
-       }
-       elsif(/^DUMP (\S+) (\S+) (\S+) (\d+) (\d+) \d+:\d+:\d+:\d+:\d+:\d+ (\d+) \d+/) {
-               if($generating_schedule == 1 ) {
-                       $host=$1;
-                       $partition=$2;
-                       $datestamp=$3;
-                       $hostpart=&make_hostpart($host,$partition,$datestamp);
-                       $level{"$hostpart"}=$5;
-                       $esize=$6;
-                       $esize=32 if $esize<32;
-                       $esize{$hostpart}=$esize / $unitdivisor;
-                       $degr_level{$hostpart}=-1;
-               }
-       }
-       elsif(/^DUMP (\S+) (\S+) (\S+) (\S+) (\d+) (\d+) \d+:\d+:\d+:\d+:\d+:\d+ \d+ (\d+) \d+/) {
-               if($generating_schedule == 1 ) {
-                       $host=$1;
-                       $features=$2;
-                       $features=$features;
-                       $partition=$3;
-                       $datestamp=$4;
-                       $hostpart=&make_hostpart($host,$partition,$datestamp);
-                       $level{"$hostpart"}=$6;
-                       $esize=$7;
-                       $esize=32 if $esize<32;
-                       $esize{$hostpart}=$esize / $unitdivisor;
-                       $degr_level{$hostpart}=-1;
-               }
-       }
-       elsif(/^(\S+) (\S+) (\d+) (\d+) \d+:\d+:\d+:\d+:\d+:\d+ (\d+) \d+ (\d+) \d+:\d+:\d+:\d+:\d+:\d+ ([-]*\d+) \d+/) {
-               if($generating_schedule == 1 ) {
-                       $host=$1;
-                       $partition=$2;
-                       $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-                       $level{$hostpart}=$4;
-                       $esize=$5;
-                       $esize=32 if $esize<32;
-                       $esize{$hostpart}=$esize / $unitdivisor;
-                       $degr_level{$hostpart}=$6;
-                       $degr_size{$hostpart}=$7 / $unitdivisor;
-                       $degr_size{$hostpart}=32 if ($7 < 32);
-               }
-       }
-       elsif(/^DUMP (\S+) (\S+) (\S+) (\d+) (\d+) \d+:\d+:\d+:\d+:\d+:\d+ \d+ (\d+) \d+ (\d+) \d+:\d+:\d+:\d+:\d+:\d+ [-]*\d+ ([-]*\d+) \d+/) {
-               if($generating_schedule == 1 ) {
-                       $host=$1;
-                       $partition=$2;
-                       $datestamp=$3;
-                       $hostpart=&make_hostpart($host,$partition,$datestamp);
-                       $level{$hostpart}=$5;
-                       $esize=$6;
-                       $esize=32 if $esize<32;
-                       $esize{$hostpart}=$esize / $unitdivisor;
-                       $degr_level{$hostpart}=$7;
-                       $degr_size{$hostpart}=$8 / $unitdivisor;
-                       $degr_size{$hostpart}=32 if ($8 < 32);
-               }
-       }
-       elsif(/^FLUSH (\S+) (\S+) (\S+) (\d+) (\S+)/) {
-               $host=$1;
-               $partition=$2;
-               $datestamp="$3";
-               $level=$4;
-               $holding_file=$5;
-               $hostpart=&make_hostpart($host,$partition,$datestamp);
-               $flush{$hostpart}=0;
-               $holding_file{$hostpart}=$holding_file;
-               $level{$hostpart}=$level;
-       }
-       elsif(/^driver: start time (\S+)/) {
-               $start_time=$1;
-               $current_time=$1;
-               $dumpers_active[0]=0;
-               $dumpers_held[0]={};
-               $dumpers_active=0;
-       }
-       elsif(/^driver: tape size (\d+)/) {
-               $tape_size = $1 / $unitdivisor;
-       }
-       elsif(/^driver: adding holding disk \d+ dir \S+ size (\d+)/) {
-               $holding_space += $1;
-       }
-       elsif(/driver: send-cmd time (\S+) to (dumper\d*): (FILE-DUMP|PORT-DUMP) (\d+-\d+) (\S+) (\S+) (\S+) (\d+)/) {
-               $current_time=$1;
-               $host=$6;
-               $partition=$7;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial=$4;
-               $serial{$serial}=$hostpart;
-               $dump_started{$hostpart}=1;
-               $dump_time{$hostpart}=$1;
-               $dump_finished{$hostpart}=0;
-               if(     $level{$hostpart} != $8 &&
-                  $degr_level{$hostpart} == $8) {
-                       $level{$hostpart}=$degr_level{$hostpart};
-                       $esize{$hostpart}=$degr_size{$hostpart};
-               }
-               if(! defined($busy_time{$2})) {
-                       $busy_time{$2}=0;
-               }
-               $running_dumper{$2} = $hostpart;
-               $error{$hostpart}="";
-               $size{$hostpart} = 0;
-               $dumpers_active++;
-               if(! defined($dumpers_active[$dumpers_active])) {
-                       $dumpers_active[$dumpers_active]=0;
-               }
-               if(! defined($dumpers_held[$dumpers_active])) {
-                       $dumpers_held[$dumpers_active]={};
-               }
-       }
-       elsif(/driver: send-cmd time (\S+) to (chunker\d*): (PORT-WRITE) (\d+-\d+) (\S+) (\S+) (\S+) (\d+)/) {
-               $current_time=$1;
-               $host=$6;
-               $partition=$7;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial=$4;
-               $serial{$serial}=$hostpart;
-               #$chunk_started{$hostpart}=1;
-               $chunk_time{$hostpart}=$1;
-               #$chunk_finished{$hostpart}=0;
-               $holding_file{$hostpart}=$5;
-       }
-       elsif(/driver: send-cmd time (\S+) to (chunker\d*): (PORT-WRITE) (\d+-\d+) (\S+) (\S+) (\S+) (\S+) (\d+)/) {
-               $current_time=$1;
-               $host=$6;
-               $features=$7;
-               $features=$features;
-               $partition=$8;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial=$4;
-               $serial{$serial}=$hostpart;
-               #$chunk_started{$hostpart}=1;
-               $chunk_time{$hostpart}=$1;
-               #$chunk_finished{$hostpart}=0;
-               $holding_file{$hostpart}=$5;
-       }
-       elsif(/driver: send-cmd time (\S+) to (dumper\d*): (FILE-DUMP|PORT-DUMP) (\d+-\d+) (\S+) (\S+) (\S+) (\S+) (\d+)/) {
-               $current_time=$1;
-               $host=$6;
-               $partition=$7;
-               $device=$8;
-               $device=$device;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial=$4;
-               $serial{$serial}=$hostpart;
-               $dump_started{$hostpart}=1;
-               $dump_time{$hostpart}=$1;
-               $dump_finished{$hostpart}=0;
-               $holding_file{$hostpart}=$5 if $3 eq "FILE-DUMP";
-               if(     $level{$hostpart} != $9 &&
-                  $degr_level{$hostpart} == $9) {
-                       $level{$hostpart}=$degr_level{$hostpart};
-                       $esize{$hostpart}=$degr_size{$hostpart};
-               }
-               if(! defined($busy_time{$2})) {
-                       $busy_time{$2}=0;
-               }
-               $running_dumper{$2} = $hostpart;
-               $error{$hostpart}="";
-               $size{$hostpart} = 0;
-               $dumpers_active++;
-               if(! defined($dumpers_active[$dumpers_active])) {
-                       $dumpers_active[$dumpers_active]=0;
-               }
-               if(! defined($dumpers_held[$dumpers_active])) {
-                       $dumpers_held[$dumpers_active]={};
-               }
-       }
-       elsif(/driver: send-cmd time (\S+) to (dumper\d*): (FILE-DUMP|PORT-DUMP) (\d+-\d+) (\S+) (\S+) (\S+) (\S+) (\S+) (\d+)/) {
-               $current_time=$1;
-               $host=$6;
-               $features=$7;
-               $features=$features;
-               $partition=$8;
-               $device=$9;
-               $device=$device;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial=$4;
-               $serial{$serial}=$hostpart;
-               $dump_started{$hostpart}=1;
-               $dump_time{$hostpart}=$1;
-               $dump_finished{$hostpart}=0;
-               $holding_file{$hostpart}=$5 if $3 eq "FILE-DUMP";
-               if(     $level{$hostpart} != $10 &&
-                  $degr_level{$hostpart} == $10) {
-                       $level{$hostpart}=$degr_level{$hostpart};
-                       $esize{$hostpart}=$degr_size{$hostpart};
-               }
-               if(! defined($busy_time{$2})) {
-                       $busy_time{$2}=0;
-               }
-               $running_dumper{$2} = $hostpart;
-               $error{$hostpart}="";
-               $size{$hostpart} = 0;
-               $dumpers_active++;
-               if(! defined($dumpers_active[$dumpers_active])) {
-                       $dumpers_active[$dumpers_active]=0;
-               }
-               if(! defined($dumpers_held[$dumpers_active])) {
-                       $dumpers_held[$dumpers_active]={};
-               }
-       }
-       elsif(/driver: send-cmd time (\S+) to (chunker\d*): CONTINUE (\d+-\d+) (\S+) (\d+) (\d+)/) {
-               $current_time=$1;
-               $serial=$3;
-               $hostpart=$serial{$serial};
-               if($hostpart ne "") {
-                       $dump_roomq{$hostpart}=undef;
-                       $error{$hostpart}="";
-               }
-       }
-       elsif(/driver: result time (\S+) from (dumper\d+): FAILED (\d+-\d+) (.*)/) {
-               $current_time=$1;
-               $serial=$3;
-               $error=$4;
-               $hostpart=$serial{$serial};
-               $dump_finished{$hostpart}=-1;
-               $busy_time{$2}+=($1-$dump_time{$hostpart});
-               $running_dumper{$2} = "0";
-               $dump_time{$hostpart}=$1;
-               $error{$hostpart}="driver: $error";
-               $dumpers_active--;
-       }
-       elsif(/driver: result time (\S+) from (dumper\d+): TRY-AGAIN (\d+-\d+) (.*)/) {
-               $current_time=$1;
-               $serial=$3;
-               $error=$4;
-               $hostpart=$serial{$serial};
-               $dump_started{$hostpart}=0;
-               $dump_finished{$hostpart}=0;
-               $busy_time{$2}+=($1-$dump_time{$hostpart});
-               $running_dumper{$2} = "0";
-               $dump_time{$hostpart}=$1;
-               $error{$hostpart}="driver: (aborted:$error)";
-               $dumpers_active--;
-       }
-       elsif(/driver: result time (\S+) from (dumper\d+): (DONE|PARTIAL) (\d+-\d+) (\d+) (\d+) (\d+) "?\[.*\]"?/) {
-               $current_time=$1;
-               $serial=$4;
-               $origsize=$5 / $unitdivisor;
-               $outputsize=$6 / $unitdivisor;
-               $hostpart=$serial{$serial};
-               $size{$hostpart}=$outputsize;
-               $dump_finished{$hostpart}=1;
-               $busy_time{$2}+=($1-$dump_time{$hostpart});
-               $running_dumper{$2} = "0";
-               $dump_time{$hostpart}=$1;
-               $error{$hostpart}="";
-               $dumpers_active--;
-               if ($3 eq "PARTIAL") {
-                       $partial{$hostpart} = 1;
-               }
-               else {
-                       $partial{$hostpart} = 0;
-               }
-       }
-       elsif(/driver: result time (\S+) from (chunker\d+): (DONE|PARTIAL) (\d+-\d+) (\d+) "?\[.*\]"?/) {
-               $current_time=$1;
-               $serial=$4;
-               $outputsize=$5 / $unitdivisor;
-               $hostpart=$serial{$serial};
-               $size{$hostpart}=$outputsize;
-               $dump_finished{$hostpart}=1;
-               $busy_time{$2}+=($1-$chunk_time{$hostpart});
-               $running_dumper{$2} = "0";
-               $chunk_time{$hostpart}=$1;
-               $error{$hostpart}="";
-               if ($3 eq "PARTIAL") {
-                       $partial{$hostpart} = 1;
-               }
-               else {
-                       $partial{$hostpart} = 0;
-               }
-       }
-       elsif(/driver: result time (\S+) from (dumper\d+): ABORT-FINISHED (\d+-\d+)/) {
-               $current_time=$1;
-               $serial=$3;
-               $hostpart=$serial{$serial};
-               $dump_started{$hostpart}=0;
-               $dump_finished{$hostpart}=0;
-               $busy_time{$2}+=($1-$dump_time{$hostpart});
-               $running_dumper{$2} = "0";
-               $dump_time{$hostpart}=$1;
-               $error{$hostpart}="driver: (aborted)";
-               $dumpers_active--;
-       }
-       elsif(/driver: result time (\S+) from (chunker\d+): RQ-MORE-DISK (\d+-\d+)/) {
-               $current_time=$1;
-               $serial=$3;
-               $hostpart=$serial{$serial};
-               $dump_roomq{$hostpart}=1;
-               $error{$hostpart}="(waiting for holding disk space)";
-       }
-       elsif(/driver: finished-cmd time (\S+) dumper\d+ dumped (\S+):(\S+)/){
-               $current_time=$1;
-       }
-       elsif(/driver: send-cmd time (\S+) to taper: START-TAPER (\S+)/) {
-               if(!defined $gdatestamp) {
-                       $gdatestamp=$2;
-                       if(!defined $datestamp{$gdatestamp}) {
-                               $datestamp{$gdatestamp} = 1;
-                               push @datestamp, $gdatestamp;
-                       }
-               }
-       }
-       elsif(/driver: send-cmd time (\S+) to taper: FILE-WRITE (\d+-\d+) (\S+) (\S+) (\S+) (\d*) (\S+)/){
-               $current_time=$1;
-               $serial=$2;
-               $host=$4;
-               $partition=$5;
-               $level=$6;
-               $ldatestamp=$7;
-               if(!defined $datestamp{$ldatestamp}) {
-                       $datestamp{$ldatestamp} = 1;
-                       push @datestamp, $ldatestamp;
-               }
-               $hostpart=&make_hostpart($host,$partition,$ldatestamp);
-               $serial{$serial}=$hostpart;
-               if(!defined $level{$hostpart}) {
-                       $level{$hostpart} = $level;
-               }
-               $taper_started{$hostpart}=1;
-               $taper_finished{$hostpart}=0;
-               $taper_time{$hostpart}=$1;
-               $ntchunk_size = 0;
-       }
-       #features (maybe missing features)
-       elsif(/driver: send-cmd time (\S+) to taper: FILE-WRITE (\d+-\d+) (\S+) (\S+) (\S*) (\S+) (\d*) (\S+)/){
-               $current_time=$1;
-               $serial=$2;
-               $host=$4;
-               $features=$5;
-               $features=$features;
-               $partition=$6;
-               $level=$7;
-               $ldatestamp=$8;
-               if(!defined $datestamp{$ldatestamp}) {
-                       $datestamp{$ldatestamp} = 1;
-                       push @datestamp, $ldatestamp;
-               }
-               $hostpart=&make_hostpart($host,$partition,$ldatestamp);
-               $serial{$serial}=$hostpart;
-               if(!defined $level{$hostpart}) {
-                       $level{$hostpart} = $level;
-               }
-               $taper_started{$hostpart}=1;
-               $taper_finished{$hostpart}=0;
-               $taper_time{$hostpart}=$1;
-               $ntchunk_size = 0;
-       }
-       elsif(/driver: send-cmd time (\S+) to taper: PORT-WRITE (\d+-\d+) (\S+) (\S+) \d+( \d+|)/){
-               $current_time=$1;
-               $serial=$2;
-               $host=$3;
-               $partition=$4;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial{$serial}=$hostpart;
-               $taper_started{$hostpart}=1;
-               $taper_finished{$hostpart}=0;
-               $taper_time{$hostpart}=$1;
-               $ntchunk_size = 0;
-       }
-       elsif(/driver: send-cmd time (\S+) to taper: PORT-WRITE (\d+-\d+) (\S+) (\S+) (\S+) \d+ \d+/){
-               $current_time=$1;
-               $serial=$2;
-               $host=$3;
-               $features=$4;
-               $partition=$5;
-               $hostpart=&make_hostpart($host,$partition,$gdatestamp);
-               $serial{$serial}=$hostpart;
-               $taper_started{$hostpart}=1;
-               $taper_finished{$hostpart}=0;
-               $taper_time{$hostpart}=$1;
-               $ntchunk_size = 0;
-       }
-       elsif(/driver: result time (\S+) from taper: (DONE|PARTIAL) (\d+-\d+) (\S+) (\d+) "?\[sec (\S+) kb (\d+) kps/) {
-               $current_time=$1;
-               $serial=$3;
-               $label=$4;
-               $size=$7 / $unitdivisor;
-               $hostpart=$serial{$serial};
-               $taper_finished{$hostpart}=1;
-               $busy_time{"taper"}+=($1-$taper_time{$hostpart});
-               $taper_time{$hostpart}=$1;
-               if(!defined $size{$hostpart}) {
-                       $size{$hostpart}=$size;
-               }
-               $ntpartition{$nb_tape}++;
-               $ntsize{$nb_tape} += $size{$hostpart} - $ntchunk_size;
-               if(defined $esize{$hostpart} && $esize{$hostpart} > 1) {
-                       $ntesize{$nb_tape} += $esize{$hostpart} - $ntchunk_size;
-               }
-               else {
-                       $ntesize{$nb_tape} += $size{$hostpart} - $ntchunk_size;
-               }
-               if ($3 eq "PARTIAL") {
-                       $partial{$hostpart} = 1;
-               }
-               else {
-                       $partial{$hostpart} = 0;
-               }
-               if($ntchunk_size > 0) {
-                       $ntchunk{$nb_tape}++;
-               }
-       }
-       elsif(/driver: result time (\S+) from taper: (TRY-AGAIN|TAPE-ERROR) (\d+-\d+) (.+)/) {
-               $current_time=$1;
-               $serial=$3;
-               $error=$4;
-               $hostpart=$serial{$serial};
-               $taper_finished{$hostpart}= $2 eq 'TAPE-ERROR' ? -2 : -1;
-               $busy_time{"taper"}+=($1-$taper_time{$hostpart});
-               $taper_time{$hostpart}=$1;
-               $error{$hostpart}="driver: $error";
-       }
-       elsif(/driver: dump failed (\S+) (\S+) (\S+), too many dumper retry/) {
-               $serial=$1;
-               $hostpart=$serial{$serial};
-               $dump_started{$hostpart}=-1;
-               $dump_finished{$hostpart}=-2;
-               $error{$hostpart} .= "(too many dumper retry)";
-       }
-       elsif(/driver: tape failed (\S+) (\S+) (\S+), too many taper retry/) {
-               $serial=$1;
-               $hostpart=$serial{$serial};
-               $taper_started{$hostpart}=-1;
-               $taper_finished{$hostpart}=-2;
-               $error{$hostpart} .= "(too many taper retry)";
-       }
-       elsif(/planner: FAILED (\S+) (\S+) (\S+) (-?\d+) (.*)/) {
-               $host=$1;
-               $partition=$2;
-               $datestamp=$3;
-               $hostpart=&make_hostpart($host,$partition,$datestamp);
-               $dump_started{$hostpart}=-1;
-               $level{$hostpart}=$4;
-               $error{$hostpart}="planner: $5";
-       }
-       elsif(/dump of driver schedule after start degraded mode:/) {
-               $start_degraded_mode=1;
-       }
-       elsif(/driver: state time (\S+) free (.*) taper: (\S+) idle-dumpers: (\d+) qlen (.*) driver-idle: (\S+)/) {
-               $current_time=$1;
-               $status_taper=$3;
-               $idle_dumpers=$4;
-
-               %free = split (/ +/, $2);
-               %qlen = split (/ +/, $5);
-
-               if(defined($dumpers_active)) {
-                       if($status_driver ne "") {
-                               $dumpers_active[$dumpers_active_prev]
-                                       +=$current_time-$state_time_prev;
-                               $dumpers_held[$dumpers_active_prev]{$status_driver}
-                                       +=$current_time-$state_time_prev;
-                       }
-                       $state_time_prev=$current_time;
-                       $dumpers_active_prev=$dumpers_active;
-                       $status_driver=$6;
-                       if(! defined($dumpers_held[$dumpers_active]{$status_driver})) {
-                               $dumpers_held[$dumpers_active]{$status_driver}=0;
-                       }
-               }
-       }
-       elsif(/taper: .*wrote label `(\S*)'/) {
-               $nb_tape++;
-               $ntlabel{$nb_tape} = $1;
-               $ntpartition{$nb_tape} = 0;
-               $ntsize{$nb_tape} = 0;
-               $ntesize{$nb_tape} = 0;
-               $ntchunk{$nb_tape} = 0;
-       }
-       elsif(/splitting chunk that started at \d*kb after (\d*)kb/) {
-               $ntchunk{$nb_tape}++;
-               $ntsize{$nb_tape} += $1 / $unitdivisor;
-               $ntesize{$nb_tape} += $1 / $unitdivisor;
-               $ntchunk_size += $1 / $unitdivisor;
-       }
-       elsif(/driver: FINISHED/) {
-               $driver_finished = 1;
-       }
-       else {
-               #print "Ignoring: $_\n";
-       }
-}
-
-close(AMDUMP);
-
-if(defined $current_time) {
-       for ($d = 0; $d < $#dumpers_active; $d++) {
-               $the_dumper = "dumper$d";
-               if(defined($running_dumper{$the_dumper}) &&
-                  $running_dumper{$the_dumper} ne "0") {
-                       $busy_time{$the_dumper}+=($current_time-$dump_time{$running_dumper{$the_dumper}});
-               }
-       }
-}
-
-print "\n";
-
-$nb_partition = 0;
-
-$epartition = 0;
-$estsize = 0;
-$fpartition = 0;
-$fsize = 0;
-$wpartition = 0;
-$wsize = 0;
-
-$flpartition = 0;
-$flsize = 0;
-$wfpartition = 0;
-$wfsize = 0;
-
-$dtpartition = 0;
-$dtesize = 0;
-$dupartition = 0;
-$dusize = 0;
-$duesize = 0;
-$dpartition = 0;
-$dsize = 0;
-$desize = 0;
-
-$twpartition = 0;
-$twsize = 0;
-$twesize = 0;
-$tapartition = 0;
-$tasize = 0;
-$taesize = 0;
-$tfpartition = 0;
-$tfsize = 0;
-$tfesize = 0;
-$tpartition = 0;
-$tsize = 0;
-$tesize = 0;
-
-$maxnamelength = 10;
-foreach $host (sort @hosts) {
-       foreach $partition (sort @$host) {
-               foreach $datestamp (sort @datestamp) {
-                       $hostpart=&make_hostpart($host,$partition,$datestamp);
-                       next if(!defined $estimate{$hostpart} && !defined $flush{$hostpart});
-                       if(length("$host:$partition") > $maxnamelength) {
-                               $maxnamelength = length("$host:$partition");
-                       }
-               }
-       }
-}
-
-foreach $host (sort @hosts) {
-       foreach $partition (sort @$host) {
-          foreach $datestamp (sort @datestamp) {
-                       $hostpart=&make_hostpart($host,$partition,$datestamp);
-                       next if(!defined $estimate{$hostpart} && !defined $flush{$hostpart});
-                       $nb_partition++;
-                       if( (!defined $size{$hostpart} || $size{$hostpart} == 0) &&
-                                defined $holding_file{$hostpart}) {
-                               $size{$hostpart} = &dump_size($holding_file{$hostpart}) / (1024 * $unitdivisor);
-                       }
-                       $in_flush=0;
-                       if($estimate_done != 1 && !defined $flush{$hostpart}) {
-                               if(defined $estimate{$hostpart}) {
-                                       if($estimate{$hostpart} != 1) {
-                                               if( defined $opt_gestimate) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s", "$host:$partition";
-                                                       print "             getting estimate\n";
-                                               }
-                                       }
-                                       else {
-                                               if(defined $opt_estimate ||
-                                                       (defined $opt_gestimate && $partialestimate{$hostpart} == 1)) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s", "$host:$partition";
-                                                       printf "%2d ",  $level{$hostpart};
-                                                       printf "%9d$unit", $esize{$hostpart};
-                                                       if($partialestimate{$hostpart} == 1) {
-                                                               print " partial";
-                                                       }
-                                                       print " estimate done\n";
-                                               }
-                                               $epartition++;
-                                               $estsize += $esize{$hostpart};
-                                       }
-                               }
-                       }
-                       else {
-                               if(defined $estimate{$hostpart}) {
-                                       if($estimate{$hostpart} == 1) {
-                                               $epartition++;
-                                               $estsize += $esize{$hostpart};
-                                       }
-                                       elsif (!defined $dump_started{$hostpart} || $dump_started{$hostpart} == 0) {
-                                               if( defined $opt_failed) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "           no estimate\n";
-                                               }
-                                               $exit_status |= $STATUS_FAILED;
-                                               $fpartition++;
-                                               $fsize+=$esize{$hostpart};
-                                       }
-                               }
-                               else {
-                                       $flpartition++;
-                                       $flsize += $size{$hostpart};
-                                       $in_flush=1;
-                               }
-                               if(defined $taper_started{$hostpart} &&
-                                               $taper_started{$hostpart}==1) {
-                                       if(defined $dump_started{$hostpart}) {
-                                               $dpartition++;
-                                               if(defined($size{$hostpart})) {
-                                                       $dsize += $size{$hostpart};
-                                               }
-                                               else {
-                                                       $dsize += $esize{$hostpart};
-                                               }
-                                               $desize += $esize{$hostpart};
-                                       }
-                                       if(defined $dump_started{$hostpart} &&
-                                                       $dump_started{$hostpart} == 1 &&
-                                                       $dump_finished{$hostpart} == -1) {
-                                               if(defined $opt_failed) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $esize{$hostpart};
-                                                       print " dump to tape failed: " . $error{$hostpart};
-                                                       print "\n";
-                                               }
-                                               $exit_status |= $STATUS_FAILED;
-                                               $fpartition++;
-                                               $fsize+=$esize{$hostpart};
-                                       }
-                                       elsif(defined $dump_started{$hostpart} &&
-                                                       $dump_started{$hostpart} == 1 &&
-                                                       $dump_finished{$hostpart} == 0 &&
-                                                       $taper_started{$hostpart} == 1) {
-                                               if( defined $opt_dumpingtape ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $esize{$hostpart};
-                                                       print " dumping to tape";
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($taper_time{$hostpart}), ")";
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $dtpartition++;
-                                               $dtesize += $esize{$hostpart};
-                                       }
-                                       elsif($taper_finished{$hostpart} == 0) {
-                                               if( defined $opt_writingtape ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $size{$hostpart};
-                                                       if($in_flush == 0) {
-                                                               print " writing to tape";
-                                                       }
-                                                       else {
-                                                               print " flushing to tape";
-                                                       }
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($taper_time{$hostpart}), ")";
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $tapartition++;
-                                               $tasize += $size{$hostpart};
-                                               if(defined $esize{$hostpart}) {
-                                                       $taesize += $esize{$hostpart};
-                                               }
-                                               else {
-                                                       $taesize += $size{$hostpart};
-                                               }
-                                       }
-                                       elsif($taper_finished{$hostpart} < 0) {
-
-                                               if(defined $size{$hostpart}) {
-                                                       $xsize = $size{$hostpart};
-                                               }
-                                               elsif(defined $esize{$hostpart}) {
-                                                       $xsize = $esize{$hostpart};
-                                               }
-                                               else {
-                                                       $xsize = 0;
-                                               }
-
-                                               if(defined $esize{$hostpart}) {
-                                                       $exsize += $esize{$hostpart};
-                                               }
-                                               else {
-                                                       $exsize += $xsize;
-                                               }
-
-                                               if( defined $opt_failed  ||
-                                                        (defined $opt_waittaper && ($taper_finished{$hostpart} == -1))) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $xsize;
-                                                       if($in_flush == 0) {
-                                                               print " failed to tape";
-                                                       }
-                                                       else {
-                                                               print " failed to flush";
-                                                       }
-                                                       print " (will retry)" unless $taper_finished{$hostpart} < -1;
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($taper_time{$hostpart}), ")";
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $exit_status |= $STATUS_TAPE;
-
-                                               $tfpartition++;
-                                               $tfsize += $xsize;
-                                               $tfesize += $exsize;
-
-                                               if($in_flush == 0) {
-                                                       $twpartition++;
-                                                       $twsize += $xsize;
-                                                       $twesize += $exsize;
-                                               }
-                                               else {
-                                                       $wfpartition++;
-                                                       $wfsize += $xsize;
-                                               }
-                                       }
-                                       elsif($taper_finished{$hostpart} == 1) {
-                                               if( defined $opt_finished ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $size{$hostpart};
-                                                       if($in_flush == 0) {
-                                                               print " finished";
-                                                       }
-                                                       else {
-                                                               print " flushed";
-                                                       }
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($taper_time{$hostpart}), ")";
-                                                       }
-                                                       if(defined $partial{$hostpart} && $partial{$hostpart} == 1) {
-                                                               print ", PARTIAL";
-                                                               $exit_status |= $STATUS_FAILED;
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $tpartition++;
-                                               $tsize += $size{$hostpart};
-                                               if(defined $esize{$hostpart} && $esize{$hostpart} > 1) {
-                                                       $tesize += $esize{$hostpart};
-                                               }
-                                               else {
-                                                       $tesize += $size{$hostpart};
-                                               }
-                                       }
-                                       else {
-                                               printf "%8s ", $datestamp if defined $opt_date;
-                                               printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                               print " unknown state TAPER\n";
-                                       }
-                               }
-                               elsif(defined $dump_started{$hostpart}) {
-                                       if($dump_started{$hostpart} == -1) {
-                                               if( defined $opt_failed ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf " " . $error{$hostpart} . "\n";
-                                               }
-                                               $exit_status |= $STATUS_FAILED;
-                                               
-                                               $fpartition++;
-                                               $fsize+=$esize{$hostpart};
-                                       }
-                                       elsif($dump_started{$hostpart} == 0) {
-                                               if($estimate{$hostpart} == 1) {
-                                                       if( defined $opt_waitdumping ) {
-                                                               printf "%8s ", $datestamp if defined $opt_date;
-                                                               printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                               printf "%9d$unit", $esize{$hostpart};
-                                                               print " wait for dumping $error{$hostpart}\n";
-                                                       }
-                                                       if($driver_finished == 1) {
-                                                               $exit_status |= $STATUS_MISSING;
-                                                       }
-                                                       $wpartition++;
-                                                       $wsize += $esize{$hostpart};
-                                               }
-                                       }
-                                       elsif($dump_started{$hostpart} == 1 &&
-                                                       $dump_finished{$hostpart} == -1) {
-                                               if( defined $opt_failed ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       print " ", $error{$hostpart};
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($dump_time{$hostpart}), ")";
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $exit_status |= $STATUS_FAILED;
-                                               $fpartition++;
-                                               $fsize+=$esize{$hostpart};
-                                       }
-                                       elsif($dump_started{$hostpart} == 1 &&
-                                                       $dump_finished{$hostpart} != 1) {
-                                               if( defined $opt_dumping ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $esize{$hostpart};
-                                                       printf " dumping %8d$unit", $size{$hostpart};
-                                                       if($size{$hostpart} != 0) {
-                                                               printf " (%6.2f%%)", (100.0*$size{$hostpart})/$esize{$hostpart};
-                                                       }
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($dump_time{$hostpart}), ")";
-                                                       }
-                                                       if(defined $dump_roomq{$hostpart}) {
-                                                               print " " . $error{$hostpart};
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $dupartition++;
-                                               $dusize += $size{$hostpart};
-                                               $duesize += $esize{$hostpart};
-                                       }
-                                       elsif($dump_finished{$hostpart} == 1 &&
-                                                       $taper_started{$hostpart} != 1) {
-                                               if( defined $opt_waittaper ) {
-                                                       printf "%8s ", $datestamp if defined $opt_date;
-                                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                                       printf "%9d$unit", $size{$hostpart};
-                                                       print " dump done";
-                                                       if( defined $starttime ) {
-                                                               print " (", &showtime($dump_time{$hostpart}), ")";
-                                                       }
-                                                       print ", wait for writing to tape";
-                                                       if(defined $partial{$hostpart} && $partial{$hostpart} == 1) {
-                                                               print ", PARTIAL";
-                                                               $exit_status |= $STATUS_FAILED;
-                                                       }
-                                                       print "\n";
-                                               }
-                                               $dpartition++;
-                                               $dsize += $size{$hostpart};
-                                               $desize += $esize{$hostpart};
-                                               $twpartition++;
-                                               $twsize += $size{$hostpart};
-                                               $twesize += $esize{$hostpart};
-                                       }
-                                       else {
-                                               printf "%8s ", $datestamp if defined $opt_date;
-                                               printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                               print " unknown state DUMPER\n";
-                                       }
-                               }
-                               elsif(defined $flush{$hostpart}) {
-                                       if( defined $opt_waittaper ) {
-                                               printf "%8s ", $datestamp if defined $opt_date;
-                                               printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                               printf "%9d$unit", $size{$hostpart};
-                                               print " waiting to flush";
-                                               if(defined $partial{$hostpart} && $partial{$hostpart} == 1) {
-                                                       print ", PARTIAL";
-                                                       $exit_status |= $STATUS_FAILED;
-                                               }
-                                               print "\n";
-                                       }
-                                       $wfpartition++;
-                                       $wfsize += $size{$hostpart};
-                               }
-                               elsif(defined $level{$hostpart}) {
-                                       printf "%8s ", $datestamp if defined $opt_date;
-                                       printf "%-${maxnamelength}s%2d ", "$host:$partition", $level{$hostpart};
-                                       print " unknown state\n";
-                               }
-                       }
-               }
-       }
-}
-
-if (defined $opt_summary) {
-       print "\n";
-       print  "SUMMARY          part      real  estimated\n";
-       print  "                           size       size\n";
-       printf "partition       : %3d\n", $nb_partition;
-       printf "estimated       : %3d %20d$unit\n", $epartition , $estsize;
-       printf "flush           : %3d %9d$unit\n", $flpartition, $flsize;
-       printf "failed          : %3d %20d$unit           (%6.2f%%)\n",
-               $fpartition , $fsize,
-               $estsize ? ($fsize * 1.0 / $estsize) * 100 : 0.0;
-       printf "wait for dumping: %3d %20d$unit           (%6.2f%%)\n",
-               $wpartition , $wsize,
-               $estsize ? ($wsize * 1.0 / $estsize) * 100 : 0.0;
-       printf "dumping to tape : %3d %20d$unit           (%6.2f%%)\n",
-               $dtpartition, $dtesize,
-               $estsize ? ($dtesize * 1.0 / $estsize) * 100 : 0.0;
-       printf "dumping         : %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $dupartition, $dusize, $duesize,
-               $duesize ? ($dusize * 1.0 / $duesize) * 100 : 0.0,
-               $estsize ? ($dusize * 1.0 / $estsize) * 100 : 0.0;
-       printf "dumped          : %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $dpartition , $dsize , $desize,
-               $desize ? ($dsize * 1.0 / $desize) * 100 : 0.0,
-               $estsize ? ($dsize * 1.0 / $estsize) * 100 : 0.0;
-       printf "wait for writing: %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $twpartition, $twsize, $twesize,
-               $twesize ? ($twsize * 1.0 / $twesize) * 100 : 0.0,
-               $estsize ? ($twsize * 1.0 / $estsize) * 100 : 0.0;
-       printf "wait to flush   : %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $wfpartition, $wfsize, $wfsize, 100, 0;
-       printf "writing to tape : %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $tapartition, $tasize, $taesize,
-               $taesize ? ($tasize * 1.0 / $taesize) * 100 : 0.0,
-               $estsize ? ($tasize * 1.0 / $estsize) * 100 : 0.0;
-       printf "failed to tape  : %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $tfpartition, $tfsize, $tfesize,
-               $tfesize ? ($tfsize * 1.0 / $tfesize) * 100 : 0.0,
-               $estsize ? ($tfsize * 1.0 / $estsize) * 100 : 0.0;
-       printf "taped           : %3d %9d$unit %9d$unit (%6.2f%%) (%6.2f%%)\n",
-               $tpartition , $tsize , $tesize,
-               $tesize ? ($tsize * 1.0 / $tesize) * 100 : 0.0,
-               ($estsize+$flsize) ? ($tsize * 1.0 / ($estsize + $flsize)) * 100 : 0.0;
-       if($nb_tape > 1 || $tape_size != 0) {
-               for($i=1; $i <= $nb_tape; $i++) {
-                       if($tape_size != 0) {
-                               printf "  tape %-3d      : %3d %9d$unit %9d$unit (%6.2f%%) %s",
-                                       $i, $ntpartition{$i}, $ntsize{$i}, $ntesize{$i}, 100*$ntsize{$i}/$tape_size, $ntlabel{$i};
-                               if($ntchunk{$i} > 0) {
-                                       printf " (%d chunks)", $ntchunk{$i};
-                               }
-                               print "\n";
-                       }
-                       else {
-                               printf "  tape %-3d      : %3d %9d$unit %9d$unit %s\n",
-                                       $i, $ntpartition{$i}, $ntsize{$i}, $ntesize{$i}, $ntlabel{$i};
-                       }
-               }
-       }
-       if($idle_dumpers ==0) {
-               printf "all dumpers active\n";
-       }
-       else {
-               $c1 = ($idle_dumpers == 1) ? "" : "s";
-               $c2 = ($idle_dumpers < 10) ? " " : "";
-               $c3 = ($idle_dumpers == 1) ? " " : "";
-               printf "%d dumper%s idle%s %s: %s\n", $idle_dumpers, $c1, $c2, $c3, $status_driver;
-       }
-       if($status_taper eq "writing" && defined($qlen{"tapeq:"})) {
-               printf "taper writing, tapeq: %d\n", $qlen{"tapeq:"};
-       }
-       else {
-               printf "taper idle\n";
-       }
-       if (defined ($free{"kps:"})) {
-               printf "network free kps: %9d\n", $free{"kps:"};
-       }
-       if (defined ($free{"space:"})) {
-               if ($holding_space) {
-                       $hs = ($free{"space:"} * 1.0 / $holding_space) * 100;
-               } else {
-                       $hs = 0.0;
-               }
-               printf "holding space   : %9d$unit (%6.2f%%)\n", ($free{"space:"}/$unitdivisor), $hs;
-       }
-}
-
-if(defined $opt_stats) {
-       if(defined($current_time) && $current_time != $start_time) {
-               $total_time=$current_time-$start_time;
-               foreach $key (sort byprocess keys %busy_time) {
-                       printf "%8s busy   : %8s  (%6.2f%%)\n",
-                               $key, &busytime($busy_time{$key}),
-                               ($busy_time{$key} * 1.0 / $total_time) * 100;
-               }
-               for ($d = 0; $d <= $#dumpers_active; $d++) {
-                       $l = sprintf "%2d dumper%s busy%s : %8s  (%6.2f%%)",
-                               $d, ($d == 1) ? "" : "s", ($d == 1) ? " " : "",
-                               &busytime($dumpers_active[$d]),
-                               ($dumpers_active[$d] * 1.0 / $total_time) * 100;
-                       print $l;
-                       $s1 = "";
-                       $s2 = " " x length($l);
-                       $r = $dumpers_held[$d];
-                       foreach $key (sort valuesort keys %$r) {
-                               next
-                                 unless $dumpers_held[$d]{$key} >= 1;
-                               printf "%s%20s: %8s  (%6.2f%%)\n",
-                                       $s1,
-                                       $key,
-                                       &busytime($dumpers_held[$d]{$key}),
-                                       ($dumpers_held[$d]{$key} * 1.0 / $dumpers_active[$d]) * 100;
-                               $s1 = $s2;
-                       }
-                       if ($s1 eq "") {
-                               print "\n";
-                       }
-               }
-       }
-}
-
-exit $exit_status;
-
-sub make_hostpart() {
-       local($host,$partition,$datestamp) = @_;
-
-       if(! defined($hosts{$host})) {
-               push @hosts, $host;
-               $hosts{$host}=1;
-       }
-       my($new_part) = 1;
-       foreach $pp (sort @$host) {
-               $new_part = 0 if ($pp eq $partition);
-       }
-       push @$host, $partition if $new_part==1;
-
-       my($hostpart) = "$host$partition$datestamp";
-       if(!defined $datestamp{$datestamp}) {
-               $datestamp{$datestamp} = 1;
-               push @datestamp, $datestamp;
-       }
-       return $hostpart;
-}
-
-sub byprocess() {
-       my(@tmp_a) = split(/(\d*)$/, $a, 2);
-       my(@tmp_b) = split(/(\d*)$/, $b, 2);
-       return ($tmp_a[0] cmp $tmp_b[0]) || ($tmp_a[1] <=> $tmp_b[1]);
-}                               
-sub valuesort() {
-       $r->{$b} <=> $r->{$a};
-}
-
-sub dump_size() {
-       local($filename) = @_;
-       local($size);
-       local($dsize) = 0;
-       local($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-                  $atime,$mtime,$ctime,$blksize,$blocks);
-       while ($filename ne "") {
-               $filename = "$filename.tmp" if (!(-e "$filename"));
-               $filename = "/dev/null" if (!(-e "$filename"));
-               ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-                               $atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);
-               $size=$size-32768 if $size > 32768;
-               $dsize += $size;
-               open(DUMP,$filename);
-               $filename = "";
-               while(<DUMP>) {
-                       if(/^CONT_FILENAME=(.*)$/) { $filename = $1; last }
-                       last if /^To restore, position tape at start of file and run/;
-               }
-               close(DUMP);
-       }
-       return $dsize;
-}
-
-sub unctime() {
-       my (@MoY);
-       my (@tl);
-       my ($a);
-       my ($m);
-       my ($month);
-       my ($time);
-
-       @MoY = ('Jan','Feb','Mar','Apr','May','Jun',
-               'Jul','Aug','Sep','Oct','Nov','Dec');
-
-       # Preset an array of values in case some parts are not passed as
-       # arguments.  This lets the date, etc, be omitted and default to
-       # today.
-
-       @tl = localtime;
-
-       foreach $a (@_) {
-               next
-                 if ($a eq '');
-
-               # See if this argument looks like a month name.
-
-               $month = 0;
-               foreach $m (@MoY) {
-                       last
-                         if ($m eq $a);
-                       $month = $month + 1;
-               }
-               if ($month < 12) {
-                       $tl[4] = $month;
-                       next;
-               }
-
-               # See if this is a day of the month.
-
-               if ($a =~ /^\d+$/ && $a >= 1 && $a <= 32) {
-                       $tl[3] = $a;
-                       next;
-               }
-
-               # See if the next argument looks like a time.
-
-               if ($a =~ /^(\d+):(\d+)/) {
-                       $tl[2] = $1;
-                       $tl[1] = $2;
-                       if ($a =~ /^(\d+):(\d+):(\d+)/) {
-                               $tl[0] = $3;
-                       }
-                       next;
-               }
-
-               # See if this is a year.
-
-               if ($a =~ /^\d\d\d\d$/ && $a >= 1900) {
-                       $tl[5] = $a;
-                       next;
-               }
-       }
-
-       $time = &timelocal (@tl);
-
-       return $time;
-}
-
-sub set_starttime() {
-       my (@tl);
-       my ($time);
-       my ($date);
-
-       # Preset an array of values in case some parts are not passed as
-       # arguments.  This lets the date, etc, be omitted and default to
-       # today.
-
-       ($date)=@_;
-       @tl = localtime;
-
-       $tl[5] = substr($date,  0, 4)   if(length($date) >= 4);
-       $tl[4] = substr($date,  4, 2)-1 if(length($date) >= 6);
-       $tl[3] = substr($date,  6, 2)   if(length($date) >= 8);
-       $tl[2] = substr($date,  8, 2)   if(length($date) >= 10);
-       $tl[1] = substr($date, 10, 2)   if(length($date) >= 12);
-       $tl[0] = substr($date, 12, 2)   if(length($date) >= 14);
-
-       $time = &timelocal (@tl);
-
-       return $time;
-}
-
-sub showtime() {
-       my($delta)=shift;
-       my($oneday)=24*60*60;
-
-       @now=localtime($starttime+$delta);
-       if($delta > $oneday) {
-               $result=sprintf("%d+",$delta/$oneday);
-       } else {
-               $result="";
-       }
-       $result.=sprintf("%d:%02d:%02d",$now[2],$now[1],$now[0]);
-       return $result;
-}
-
-sub busytime() {
-       my($busy)=shift;
-       my($oneday)=24*60*60;
-
-       if($busy > $oneday) {
-               $days=int($busy/$oneday);
-               $result=sprintf("%d+",$busy/$oneday);
-               $busy-=$days*$oneday;
-       } else {
-               $result="";
-       }
-       $hours=int($busy/60/60);
-       $busy-=$hours*60*60;
-       $minutes=int($busy/60);
-       $busy-=$minutes*60;
-       $seconds=$busy;
-       $result.=sprintf("%d:%02d:%02d",$hours,$minutes,$seconds);
-       return $result;
-}
-
-sub usage() {
-       print "amstatus [--config] config [--file amdump_file]\n";
-       print "         [--summary] [--dumping] [--waitdumping] [--waittaper]\n";
-       print "         [--dumpingtape] [--writingtape] [--finished] [--failed]\n";
-       print "         [--estimate] [--gestimate] [--stats] [--date]\n";
-       exit 0;
-}