diff options
Diffstat (limited to 'torrus/perllib/Torrus/DevDiscover/NetBotz.pm')
-rw-r--r-- | torrus/perllib/Torrus/DevDiscover/NetBotz.pm | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/torrus/perllib/Torrus/DevDiscover/NetBotz.pm b/torrus/perllib/Torrus/DevDiscover/NetBotz.pm new file mode 100644 index 000000000..f91af5e25 --- /dev/null +++ b/torrus/perllib/Torrus/DevDiscover/NetBotz.pm @@ -0,0 +1,197 @@ +# Copyright (C) 2009 Stanislav Sinyagin +# +# 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 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 program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# $Id: NetBotz.pm,v 1.1 2010-12-27 00:03:47 ivan Exp $ + +# NetBotz modular sensors + +package Torrus::DevDiscover::NetBotz; + +use strict; +use Torrus::Log; + + +$Torrus::DevDiscover::registry{'NetBotz'} = { + 'sequence' => 500, + 'checkdevtype' => \&checkdevtype, + 'discover' => \&discover, + 'buildConfig' => \&buildConfig + }; + + +our %oiddef = + ( + 'netBotzV2Products' => '1.3.6.1.4.1.5528.100.20', + ); + + +our %sensor_types = + ('temp' => { + 'oid' => '1.3.6.1.4.1.5528.100.4.1.1.1', + 'template' => 'NetBotz::netbotz-temp-sensor', + 'max' => 'NetBotz::temp-max', + }, + 'humi' => { + 'oid' => '1.3.6.1.4.1.5528.100.4.1.2.1', + 'template' => 'NetBotz::netbotz-humi-sensor', + 'max' => 'NetBotz::humi-max', + }, + 'dew' => { + 'oid' => '1.3.6.1.4.1.5528.100.4.1.3.1', + 'template' => 'NetBotz::netbotz-dew-sensor', + 'max' => 'NetBotz::dew-max', + }, + 'audio' => { + 'oid' => '1.3.6.1.4.1.5528.100.4.1.4.1', + 'template' => 'NetBotz::netbotz-audio-sensor' + }, + 'air' => { + 'oid' => '1.3.6.1.4.1.5528.100.4.1.5.1', + 'template' => 'NetBotz::netbotz-air-sensor' + }, + 'door' => { + 'oid' => '1.3.6.1.4.1.5528.100.4.2.2.1', + 'template' => 'NetBotz::netbotz-door-sensor' + }, + ); + + + +sub checkdevtype +{ + my $dd = shift; + my $devdetails = shift; + + if( not $dd->oidBaseMatch + ( 'netBotzV2Products', + $devdetails->snmpVar( $dd->oiddef('sysObjectID') ) ) ) + { + return 0; + } + + $devdetails->setCap('interfaceIndexingPersistent'); + + return 1; +} + + +sub discover +{ + my $dd = shift; + my $devdetails = shift; + + my $data = $devdetails->data(); + my $session = $dd->session(); + + foreach my $stype (sort keys %sensor_types) + { + my $oid = $sensor_types{$stype}{'oid'}; + + my $sensorTable = $session->get_table( -baseoid => $oid ); + + if( defined( $sensorTable ) ) + { + $devdetails->storeSnmpVars( $sensorTable ); + + # store the sensor names to guarantee uniqueness + my %sensorNames; + + foreach my $INDEX ($devdetails->getSnmpIndices($oid . '.1')) + { + my $label = $devdetails->snmpVar( $oid . '.4.' . $INDEX ); + + if( $sensorNames{$label} ) + { + Warn('Duplicate sensor names: ' . $label); + $sensorNames{$label}++; + } + else + { + $sensorNames{$label} = 1; + } + + if( $sensorNames{$label} > 1 ) + { + $label .= sprintf(' %d', $sensorNames{$label}); + } + + my $leafName = $label; + $leafName =~ s/\W/_/g; + + my $param = { + 'netbotz-sensor-index' => $INDEX, + 'node-display-name' => $label, + 'graph-title' => $label, + 'precedence' => sprintf('%d', 1000 - $INDEX) + }; + + if( defined( $sensor_types{$stype}{'max'} ) ) + { + my $max = + $devdetails->param($sensor_types{$stype}{'max'}); + + if( defined($max) and $max > 0 ) + { + $param->{'upper-limit'} = $max; + } + } + + + $data->{'NetBotz'}{$INDEX} = { + 'param' => $param, + 'leafName' => $leafName, + 'template' => $sensor_types{$stype}{'template'}}; + } + } + } + + if( not defined($data->{'param'}{'comment'}) or + length($data->{'param'}{'comment'}) == 0 ) + { + $data->{'param'}{'comment'} = 'NetBotz environment sensors'; + } + + return 1; +} + + +sub buildConfig +{ + my $devdetails = shift; + my $cb = shift; + my $devNode = shift; + + my $data = $devdetails->data(); + + foreach my $INDEX ( sort {$a<=>$b} keys %{$data->{'NetBotz'}} ) + { + my $ref = $data->{'NetBotz'}{$INDEX}; + + $cb->addLeaf( $devNode, $ref->{'leafName'}, $ref->{'param'}, + [$ref->{'template'}] ); + } +} + + + +1; + + +# Local Variables: +# mode: perl +# indent-tabs-mode: nil +# perl-indent-level: 4 +# End: |