# Copyright (C) 2008 Jon Nistor # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. # $Id: RFC1628_UPS_MIB.pm,v 1.1 2010-12-27 00:03:56 ivan Exp $ # Jon Nistor # Discovery module for UPS-MIB (RFC 1628) # # Tested with: # ConnectUPS Web/SNMP Card V4.20 [powerware 9390] # # Issues with: # ConnectUPS Web/SNMP Card V3.16 [powerware 9155] # - InputFrequency and InputTruePower are missing from RFC UPS-MIB # package Torrus::DevDiscover::RFC1628_UPS_MIB; use strict; use Torrus::Log; $Torrus::DevDiscover::registry{'RFC1628_UPS_MIB'} = { 'sequence' => 100, 'checkdevtype' => \&checkdevtype, 'discover' => \&discover, 'buildConfig' => \&buildConfig }; our %oiddef = ( # UPS-MIB 'upsIdent' => '1.3.6.1.2.1.33.1.1', 'upsIdentManufacturer' => '1.3.6.1.2.1.33.1.1.1.0', 'upsIdentModel' => '1.3.6.1.2.1.33.1.1.2.0', 'upsIdentUPSSoftwareVersion' => '1.3.6.1.2.1.33.1.1.3.0', 'upsIdentAgentSoftwareVersion' => '1.3.6.1.2.1.33.1.1.4.0', 'upsIdentName' => '1.3.6.1.2.1.33.1.1.5.0', 'upsInputNumLines' => '1.3.6.1.2.1.33.1.3.2.0', 'upsOutputNumLines' => '1.3.6.1.2.1.33.1.4.3.0', 'upsBypassNumLines' => '1.3.6.1.2.1.33.1.5.2.0' ); sub checkdevtype { my $dd = shift; my $devdetails = shift; my $session = $dd->session(); my $data = $devdetails->data(); return $dd->checkSnmpTable( 'upsIdent' ); } sub discover { my $dd = shift; my $devdetails = shift; my $data = $devdetails->data(); my $session = $dd->session(); my $upsInfo = $dd->retrieveSnmpOIDs('upsIdentManufacturer', 'upsIdentModel', 'upsIdentUPSSoftwareVersion', 'upsIdentAgentSoftwareVersion', 'upsIdentName', 'upsInputNumLines', 'upsOutputNumLines', 'upsBypassNumLines'); $data->{'param'}{'comment'} = $upsInfo->{'upsIdentManufacturer'} . " " . $upsInfo->{'upsIdentModel'} . " " . $upsInfo->{'upsIdentUPSSoftwareVersion'}; # PROG: Discover number of lines (in,out,bypass)... $data->{'numInput'} = $upsInfo->{'upsInputNumLines'}; $data->{'numOutput'} = $upsInfo->{'upsOutputNumLines'}; $data->{'numBypass'} = $upsInfo->{'upsBypassNumLines'}; Debug("UPS Lines Input: " . $data->{'numInput'} . ", Output: " . $data->{'numOutput'} . ", Bypass: " . $data->{'numBypass'} ); if( $devdetails->param('RFC1628_UPS::disable-input') ne 'yes' ) { $devdetails->setCap('UPS-input'); } if( $devdetails->param('RFC1628_UPS::disable-output') ne 'yes' ) { $devdetails->setCap('UPS-output'); } if( $devdetails->param('RFC1628_UPS::disable-bypass') ne 'yes' ) { $devdetails->setCap('UPS-bypass'); } return 1; } sub buildConfig { my $devdetails = shift; my $cb = shift; my $devNode = shift; my $data = $devdetails->data(); # PROG: Add static battery information $cb->addSubtree( $devNode, 'Battery', { 'precedence' => 999 }, [ 'RFC1628_UPS_MIB::battery-subtree' ] ); if( $devdetails->hasCap('UPS-input') ) { my $nodeInput = $cb->addSubtree( $devNode, 'Input', { 'comment' => 'Input feeds' }, [ 'RFC1628_UPS_MIB::ups-input-subtree' ] ); foreach my $INDEX ( 1 .. $data->{'numInput'} ) { $cb->addSubtree( $nodeInput, sprintf('Phase_%d', $INDEX), { 'ups-input-idx' => $INDEX }, [ 'RFC1628_UPS::ups-input-leaf' ] ); } } if( $devdetails->hasCap('UPS-output') ) { my $nodeOutput = $cb->addSubtree( $devNode, 'Output', { 'comment' => 'Output feeds' }, [ 'RFC1628_UPS_MIB::ups-output-subtree' ] ); foreach my $INDEX ( 1 .. $data->{'numOutput'} ) { $cb->addSubtree( $nodeOutput, sprintf('Phase_%d', $INDEX), { 'ups-output-idx' => $INDEX }, [ 'RFC1628_UPS::ups-output-leaf' ] ); } } if( $devdetails->hasCap('UPS-bypass') ) { my $nodeBypass = $cb->addSubtree( $devNode, 'Bypass', { 'comment' => 'Bypass feeds' }, [ 'RFC1628_UPS_MIB::ups-bypass-subtree' ] ); foreach my $INDEX ( 1 .. $data->{'numBypass'} ) { $cb->addSubtree( $nodeBypass, sprintf('Phase_%d', $INDEX), { 'ups-bypass-idx' => $INDEX }, [ 'RFC1628_UPS::ups-bypass-leaf' ] ); } } } 1; # Local Variables: # mode: perl # indent-tabs-mode: nil # perl-indent-level: 4 # End: