--- parse_bind9stat.pl 2002/07/01 20:01:25 1.4 +++ parse_bind9stat.pl 2002/07/26 10:10:02 1.7 @@ -1,9 +1,16 @@ #!/usr/bin/perl -w +# Parse output from bind9 rndc stats command +# Dobrica Pavlinusic, +# http://www.rot13.org/~dpavlin/sysadm.html +# +# Usage: parse_bind9stat.pl [/var/log/stats.dump [/usr/sbin/rndc]] + use strict; -my $bind9_dump = shift @ARGV || "/var/log/stats.dump"; +my $log = shift @ARGV || "/var/log/stats.dump"; my $rndc = shift @ARGV || "/usr/sbin/rndc"; +my $delta="/var/tmp/"; system "$rndc stats"; @@ -13,8 +20,24 @@ my %forward; my %reverse; -open(D,$bind9_dump) || die "$bind9_dump: $!"; -while() { +my $tmp=$log; +$tmp=~s/\W/_/g; +$delta.=$tmp.".offset"; + +open(DUMP,$log) || die "$log: $!"; + +if (-e $delta) { + open(D,$delta) || die "can't open delta file '$delta' for '$log': $!"; + my $offset=; + chomp $offset; + close(D); + my $log_size = -s $log; + if ($offset <= $log_size) { + seek(DUMP,$offset,0); + } +} + +while() { next if /^(---|\+\+\+)/; chomp; my ($what,$nr,$direction) = split(/\s+/,$_,3); @@ -27,8 +50,13 @@ } } + +open(D,"> $delta") || die "can't open delta file '$delta' for log '$log': $!"; +print D tell(DUMP); close(D); +close(DUMP); + foreach (@counters) { print $total{$_},"\n",$forward{$_},"\n",$reverse{$_},"\n"; }