1 # Copyright (C) 2003 Shawn Ferry
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
17 # $Id: RFC1697_RDBMS.pm,v 1.1 2010-12-27 00:03:52 ivan Exp $
18 # Shawn Ferry <sferry at sevenspace dot com> <lalartu at obscure dot org>
22 package Torrus::DevDiscover::RFC1697_RDBMS;
28 $Torrus::DevDiscover::registry{'RFC1697_RDBMS'} = {
30 'checkdevtype' => \&checkdevtype,
31 'discover' => \&discover,
32 'buildConfig' => \&buildConfig
38 'rdbms' => '1.3.6.1.2.1.39',
40 'rdbmsDbTable' => '1.3.6.1.2.1.39.1.1.1',
41 'rdbmsDbIndex' => '1.3.6.1.2.1.39.1.1.1.1',
42 'rdbmsDbVendorName' => '1.3.6.1.2.1.39.1.1.1.3',
43 'rdbmsDbName' => '1.3.6.1.2.1.39.1.1.1.4',
44 'rdbmsDbContact' => '1.3.6.1.2.1.39.1.1.1.5',
45 'rdbmsDbPrivateMIBOID' => '1.3.6.1.2.1.39.1.1.1.2',
47 'rdbmsDbInfoTable' => '1.3.6.1.2.1.39.1.2.1',
48 'rdbmsDbInfoProductName' => '1.3.6.1.2.1.39.1.2.1.1',
49 'rdbmsDbInfoVersion' => '1.3.6.1.2.1.39.1.2.1.2',
50 'rdbmsDbInfoSizeUnits' => '1.3.6.1.2.1.39.1.2.1.3',
52 # currently ignored, generally identical to rdbmsDb for oracle
53 'rdbmsSrvTable' => '1.3.6.1.2.1.39.1.5.1',
54 'rdbmsSrvVendorName' => '1.3.6.1.2.1.39.1.5.1.2',
55 'rdbmsSrvProductName' => '1.3.6.1.2.1.39.1.5.1.3',
56 'rdbmsSrvContact' => '1.3.6.1.2.1.39.1.5.1.4',
57 'rdbmsSrvPrivateMIBOID' => '1.3.6.1.2.1.39.1.5.1.1',
60 'ora' => '1.3.6.1.4.1.111',
70 my $devdetails = shift;
72 return $dd->checkSnmpTable('rdbms');
78 my $devdetails = shift;
80 my $session = $dd->session();
81 my $data = $devdetails->data();
83 my $DbInfoSizeUnits = {
86 3 => '1048576', # mbytes
87 4 => '1073741824', # gbytes
88 5 => '1099511627776', # tbytes
92 ora => $dd->oiddef('ora'),
96 my $rdbmsDbTable = $session->get_table( -baseoid =>
97 $dd->oiddef('rdbmsDbTable') );
99 my $rdbmsDbInfoTable =
100 $session->get_table( -baseoid =>
101 $dd->oiddef('rdbmsDbInfoTable') );
103 if( defined( $rdbmsDbTable ) )
105 $devdetails->storeSnmpVars($rdbmsDbTable);
106 $devdetails->setCap('RDBMS::DbTable');
108 if( defined( $rdbmsDbInfoTable ) )
110 $devdetails->storeSnmpVars($rdbmsDbInfoTable);
111 $devdetails->setCap('RDBMS::DbInfoTable');
115 Debug("No Actively Opened Instances");
119 $ref->{'indices'} = [];
120 $data->{'DbTable'} = $ref;
123 ( $devdetails->getSnmpIndices( $dd->oiddef('rdbmsDbIndex') ) )
126 push( @{$ref->{'indices'}}, $INDEX );
129 $devdetails->snmpVar( $dd->oiddef('rdbmsDbVendorName') .
133 $devdetails->snmpVar( $dd->oiddef('rdbmsDbInfoProductName') .
137 $devdetails->snmpVar( $dd->oiddef('rdbmsDbInfoVersion') .
141 $devdetails->snmpVar( $dd->oiddef('rdbmsDbInfoSizeUnits') .
143 $sizeUnits = $DbInfoSizeUnits->{$sizeUnits};
146 $devdetails->snmpVar( $dd->oiddef('rdbmsDbName') .
150 $devdetails->snmpVar( $dd->oiddef('rdbmsDbContact') .
154 $devdetails->snmpVar( $dd->oiddef('rdbmsDbPrivateMIBOID')
157 my $nick = "Vendor_" . $vendor . "_DB_" . $dbName;
162 my $descr = "Vendor: $vendor DB: $dbName";
163 $descr .= " Contact: $dbContact" if $dbContact;
164 $descr .= " Version: $version" if $version;
167 $ref->{$INDEX}->{'param'} = $param;
168 $param->{'vendor'} = $vendor;
169 $param->{'product'} = $product;
170 $param->{'dbVersion'} = $version;
171 $param->{'dbSizeUnits'} = $sizeUnits;
172 $param->{'dbName'} = $dbName;
173 $param->{'dbMIBOID'} = $dbMIBOID;
174 $param->{'nick'} = $nick;
175 $param->{'comment'} = $descr;
176 $param->{'precedence'} = 1000 - $INDEX;
178 foreach my $dbType ( keys %{ $dbTypes } )
180 if( Net::SNMP::oid_base_match
181 ( $dbTypes->{$dbType}, $dbMIBOID ) )
183 if( not exists $data->{$dbType} )
185 $data->{$dbType} = {};
187 $data->{$dbType}->{$dbName}->{'index'} = $INDEX;
188 Debug(" Added $dbName -> $INDEX to $dbType ");
203 my $devdetails = shift;
206 my $data = $devdetails->data();
208 return unless $devdetails->isDevType("RDBMS");
211 'precedence' => -100000,
214 my $appNode = $cb->addSubtree( $devNode, 'Applications', $appParam );
217 my $oraNode = $cb->addSubtree( $appNode, 'Oracle', $param );
219 if( $devdetails->hasCap('RDBMS::DbTable') )
221 my $ref = $data->{'DbTable'};
223 foreach my $INDEX ( @{ $ref->{'indices'} } )
225 my $param = $ref->{$INDEX}->{'param'};
226 $cb->addSubtree( $oraNode, $param->{'nick'}, $param,
227 [ 'RFC1697_RDBMS::rdbms-dbtable' ], );
239 # indent-tabs-mode: nil
240 # perl-indent-level: 4