X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Famstatus.pl.in;h=2becac57f1477986343292964dc5ed39fbcd2f39;hb=eefb15c5c04acb3c75f0c704ea664feb1bbae75c;hp=9a702534fdb00ade0a35afd3633be934d7c60ad3;hpb=bde83ad58d800ae004caccab6531234272181da2;p=debian%2Famanda diff --git a/server-src/amstatus.pl.in b/server-src/amstatus.pl.in index 9a70253..2becac5 100644 --- a/server-src/amstatus.pl.in +++ b/server-src/amstatus.pl.in @@ -53,10 +53,22 @@ else { } } +#untaint user input $ARGV[0] + +if ($conf =~ /^([\w.-]+)$/) { # $1 is untainted + $conf = $1; +} else { + die "filename '$conf' has invalid characters.\n"; +} + + if ( ! -d "$confdir/$conf" ) { die "amstatus$suf: could not find directory $confdir/$conf"; } +$oldPATH = $ENV{'PATH'}; +$ENV{'PATH'} = "/bin:/usr/bin:/usr/sbin:/sbin"; # force known path + $pwd = `pwd`; chomp $pwd; chdir "$confdir/$conf"; @@ -93,6 +105,7 @@ if($nb_options == 0 ) { } $unit=`$sbindir/amgetconf$suf displayunit`; +$ENV{'PATH'} = $oldPATH; chomp($unit); $unitdivisor=1; if($unit eq 'K') { @@ -346,7 +359,6 @@ while() { $dump_started{$hostpart}=1; $dump_time{$hostpart}=$1; $dump_finished{$hostpart}=0; - $holding_file{$hostpart}=$5; if( $level{$hostpart} != $8 && $degr_level{$hostpart} == $8) { $level{$hostpart}=$degr_level{$hostpart}; @@ -365,6 +377,32 @@ while() { $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; @@ -429,7 +467,7 @@ while() { $dumpers_held[$dumpers_active]={}; } } - elsif(/driver: send-cmd time (\S+) to (dumper\d*): CONTINUE (\d+-\d+) (\S+) (\d+) (\d+)/) { + elsif(/driver: send-cmd time (\S+) to (chunker\d*): CONTINUE (\d+-\d+) (\S+) (\d+) (\d+)/) { $current_time=$1; $serial=$3; $hostpart=$serial{$serial}; @@ -463,11 +501,11 @@ while() { $error{$hostpart}="driver: (aborted:$error)"; $dumpers_active--; } - elsif(/driver: result time (\S+) from (dumper\d+): DONE (\d+-\d+) (\d+) (\d+) (\d+) \[.*\]/) { + elsif(/driver: result time (\S+) from (dumper\d+): (DONE|PARTIAL) (\d+-\d+) (\d+) (\d+) (\d+) \[.*\]/) { $current_time=$1; - $serial=$3; - $origsize=$4 / $unitdivisor; - $outputsize=$5 / $unitdivisor; + $serial=$4; + $origsize=$5 / $unitdivisor; + $outputsize=$6 / $unitdivisor; $hostpart=$serial{$serial}; $size{$hostpart}=$outputsize; $dump_finished{$hostpart}=1; @@ -476,6 +514,20 @@ while() { $dump_time{$hostpart}=$1; $error{$hostpart}=""; $dumpers_active--; + $partial{$hostpart}=1 if $3 eq "PARTIAL" ; + } + 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-$dump_time{$hostpart}); + $running_dumper{$2} = "0"; + $dump_time{$hostpart}=$1; + $error{$hostpart}=""; + $partial{$hostpart}=1 if $3 eq "PARTIAL" ; } elsif(/driver: result time (\S+) from (dumper\d+): ABORT-FINISHED (\d+-\d+)/) { $current_time=$1; @@ -489,7 +541,7 @@ while() { $error{$hostpart}="driver: (aborted)"; $dumpers_active--; } - elsif(/driver: result time (\S+) from (dumper\d+): RQ-MORE-DISK (\d+-\d+)/) { + elsif(/driver: result time (\S+) from (chunker\d+): RQ-MORE-DISK (\d+-\d+)/) { $current_time=$1; $serial=$3; $hostpart=$serial{$serial}; @@ -576,11 +628,11 @@ while() { $taper_finished{$hostpart}=0; $taper_time{$hostpart}=$1; } - elsif(/driver: result time (\S+) from taper: DONE (\d+-\d+) (\S+) (\d+) \[sec (\S+) kb (\d+) kps/) { + elsif(/driver: result time (\S+) from taper: (DONE|PARTIAL) (\d+-\d+) (\S+) (\d+) \[sec (\S+) kb (\d+) kps/) { $current_time=$1; - $serial=$2; - $label=$3; - $size=$6 / $unitdivisor; + $serial=$3; + $label=$4; + $size=$7 / $unitdivisor; $hostpart=$serial{$serial}; $taper_finished{$hostpart}=1; $busy_time{"taper"}+=($1-$taper_time{$hostpart}); @@ -596,6 +648,7 @@ while() { else { $ntesize{$nb_tape} += $size{$hostpart}; } + $partial{$hostpart}=1 if $3 eq "PARTIAL" ; } elsif(/driver: result time (\S+) from taper: (TRY-AGAIN|TAPE-ERROR) (\d+-\d+) (.+)/) { $current_time=$1; @@ -904,6 +957,7 @@ foreach $host (sort @hosts) { if( defined $starttime ) { print " (", &showtime($taper_time{$hostpart}), ")"; } + print ", PARTIAL" if defined $partial{$hostpart}; print "\n"; } $tpartition++; @@ -989,7 +1043,9 @@ foreach $host (sort @hosts) { if( defined $starttime ) { print " (", &showtime($dump_time{$hostpart}), ")"; } - print ", wait for writing to tape\n"; + print ", wait for writing to tape"; + print ", PARTIAL" if defined $partial{$hostpart}; + print "\n"; } $dpartition++; $dsize += $size{$hostpart}; @@ -1009,7 +1065,9 @@ foreach $host (sort @hosts) { printf "%8s ", $datestamp if defined $opt_date; printf "%-${maxnamelength}s%2d", "$host:$partition", $level{$hostpart}; printf "%9d$unit", $size{$hostpart}; - print " waiting to flush\n"; + print " waiting to flush"; + print ", PARTIAL" if defined $partial{$hostpart}; + print "\n"; } $wfpartition++; $wfsize += $size{$hostpart};