##
## OSSP snmpdx - SNMP Daemon Extension
## Copyright (c) 2003-2007 The OSSP Project
## Copyright (c) 2003-2007 Ralf S. Engelschall
## Copyright (c) 2003-2005 Cable & Wireless
##
## This file is part of OSSP snmpdx, a SNMP daemon extension which
## can be found at http://www.ossp.org/pkg/tool/snmpdx/.
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version
## 2.0 of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this file; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
## USA, or contact Ralf S. Engelschall .
##
## swBind.pm: probe for Software, Bind (aka named)
##
package My::Probe::swBind;
our @ISA = qw(My::Probe);
sub oids ($) {
my ($self) = @_;
return $self->{-ctx}->{-mib}->oids("*.snmpdx.host.software.swBind.*");
}
sub probe ($$) {
my ($self, $obj) = @_;
my $openpkg = $self->{-ctx}->{-opt}->{openpkg};
# local workspace
my $out; my $raw;
my $rndc = "$openpkg/sbin/rndc";
my $file = "$openpkg/var/bind/named.stats"; # "statistics-file" setting in "option" section in named.conf
# query status via rndc(8)
$out = $self->{-ctx}->{-sys}->run("$rndc status 2>/dev/null", "1m");
$raw = $out->{-stdout};
my $swBindStatusNumberOfZones = $1 if ($raw =~ m/number of zones: (\d+)/s );
my $swBindStatusDebugLevel = $1 if ($raw =~ m/debug level: (\d+)/s );
my $swBindStatusXfersRunning = $1 if ($raw =~ m/xfers running: (\d+)/s );
my $swBindStatusXfersDeferred = $1 if ($raw =~ m/xfers deferred: (\d+)/s );
my $swBindStatusSoaQueries = $1 if ($raw =~ m/soa queries in progress: (\d+)/s );
my $swBindStatusQueryLogging = $1 if ($raw =~ m/query logging is (^\n)+/s );
my $swBindStatusRecClientsActive = $1 if ($raw =~ m/recursive clients: (\d+)\/\d+/s );
my $swBindStatusRecClientsMax = $1 if ($raw =~ m/recursive clients: \d+\/(\d+)/s );
my $swBindStatusTcpClientsActive = $1 if ($raw =~ m/tcp clients: (\d+)\/\d+/s );
my $swBindStatusTcpClientsMax = $1 if ($raw =~ m/tcp clients: \d+\/(\d+)/s );
## query stats via rndc(8)
$self->{-ctx}->{-sys}->run("$rndc stats 2>/dev/null", "1m");
$raw = "";
open(STATS, "<$file");
if (defined STATS) {
while () {
if (m/^\+\+\+/) {
$raw = ""
} else {
$raw .= $_
}
}
close(STATS);
};
my $swBindStatsSuccess = $1 if ($raw =~ m/success (\d+)/s );
my $swBindStatsReferral = $1 if ($raw =~ m/referral (\d+)/s );
my $swBindStatsNxrrset = $1 if ($raw =~ m/nxrrset (\d+)/s );
my $swBindStatsNxdomain = $1 if ($raw =~ m/nxdomain (\d+)/s );
my $swBindStatsRecursion = $1 if ($raw =~ m/recursion (\d+)/s);
my $swBindStatsFailure = $1 if ($raw =~ m/failure (\d+)/s );
# provide results
if ($obj->{-name} =~ m|\.swBindStatusNumberOfZones$| ) { $obj->{-value} = $swBindStatusNumberOfZones; }
elsif ($obj->{-name} =~ m|\.swBindStatusDebugLevel$| ) { $obj->{-value} = $swBindStatusDebugLevel; }
elsif ($obj->{-name} =~ m|\.swBindStatusXfersRunning$| ) { $obj->{-value} = $swBindStatusXfersRunning; }
elsif ($obj->{-name} =~ m|\.swBindStatusXfersDeferred$| ) { $obj->{-value} = $swBindStatusXfersDeferred; }
elsif ($obj->{-name} =~ m|\.swBindStatusSoaQueries$| ) { $obj->{-value} = $swBindStatusSoaQueries; }
elsif ($obj->{-name} =~ m|\.swBindStatusQueryLogging$| ) { $obj->{-value} = $swBindStatusQueryLogging; }
elsif ($obj->{-name} =~ m|\.swBindStatusRecClientsActive$|) { $obj->{-value} = $swBindStatusRecClientsActive; }
elsif ($obj->{-name} =~ m|\.swBindStatusRecClientsMax$| ) { $obj->{-value} = $swBindStatusRecClientsMax; }
elsif ($obj->{-name} =~ m|\.swBindStatusTcpClientsActive$|) { $obj->{-value} = $swBindStatusTcpClientsActive; }
elsif ($obj->{-name} =~ m|\.swBindStatusTcpClientsMax$| ) { $obj->{-value} = $swBindStatusTcpClientsMax; }
elsif ($obj->{-name} =~ m|\.swBindStatsSuccess$| ) { $obj->{-value} = $swBindStatsSuccess; }
elsif ($obj->{-name} =~ m|\.swBindStatsReferral$| ) { $obj->{-value} = $swBindStatsReferral; }
elsif ($obj->{-name} =~ m|\.swBindStatsNxrrset$| ) { $obj->{-value} = $swBindStatsNxrrset; }
elsif ($obj->{-name} =~ m|\.swBindStatsNxdomain$| ) { $obj->{-value} = $swBindStatsNxdomain; }
elsif ($obj->{-name} =~ m|\.swBindStatsRecursion$| ) { $obj->{-value} = $swBindStatsRecursion; }
elsif ($obj->{-name} =~ m|\.swBindStatsFailure$| ) { $obj->{-value} = $swBindStatsFailure; }
return;
}
1;