#!/usr/bin/perl -w

use 5.006;
use strict;
use warnings;

use File::ReadBackwards ();
use Getopt::Long qw(GetOptions);

GetOptions
  'stats-file=s' => \( our $StatsFile = '/var/log/named/named.stats' ),
  'help|?'       => \our $Help;

exec perldoc => -F => $0 or die "exec('perldoc -F $0'): $!\n" if $Help;

my $bw = File::ReadBackwards->new($StatsFile)
  or exit 0;

my $ts;
while ( defined( my $line = $bw->readline ) ) {
    ($ts) = $line =~ /^--- Statistics Dump --- \((\d+)\)$/ and last;
}
die qq(Habe in der Stats-Datei "$StatsFile" keinen alten Timestamp gefunden.)
  unless defined $ts;

my %v;
while ( defined( my $line = $bw->readline ) ) {
    if ( $line =~ /^(\w+) (\d+)$/ ) { $v{SUM} += $v{$1} = $2 }
    elsif ( $line =~ /^\+\+\+ Statistics Dump \+\+\+ \($ts\)$/ ) { last }
    else {
        die qq(Unbekannter Eintrag in der Stats-Datei "$StatsFile": $line);
    }
}

print "timestamp=$ts\n", map "$_=$v{$_}\n",
  qw(success referral nxrrset nxdomain recursion failure);

=head1 NAME

capman_named-stats -
CapMan-Plugin zur Ermittlung von BIND9-Nutzungsstatistiken

=head1 SYNOPSE

	capman_named-stats --stats-file /var/named/var/log/named.stats

Liest den neuesten Eintrag aus der angegebenen Datei und gibt auf der
Standardausgabe die einzelnen Zhlerwerte im Format C<NAME=WERT> aus,
ebenso den zugehrigen Zeitstempel (als "timestamp").

=head1 OPTIONEN

=over 4

=item stats-file=s

legt den Namen der Stats-Datei fest; Default s. Synopse

=item help|?

um (nur) diese Dokumentation anzeigen zu lassen

=head1 AUTOR

 Martin H. Sluka <fany@noris.net>
 fr die noris network AG
 RT#209469

=cut

