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: OracleDatabase.pm,v 1.1 2010-12-27 00:03:49 ivan Exp $
18 # Shawn Ferry <sferry at sevenspace dot com> <lalartu at obscure dot org>
22 package Torrus::DevDiscover::OracleDatabase;
28 $Torrus::DevDiscover::registry{'OracleDatabase'} = {
30 'checkdevtype' => \&checkdevtype,
31 'discover' => \&discover,
32 'buildConfig' => \&buildConfig
38 'oraDb' => '1.3.6.1.4.1.111.4.1',
40 'oraDbConfigDbBlockSize' => '1.3.6.1.4.1.111.4.1.7.1.3',
42 'oraDbSysTable' => '1.3.6.1.4.1.111.4.1.1.1',
44 'oraDbTablespace' => '1.3.6.1.4.1.111.4.1.2.1',
45 'oraDbTablespaceIndex' => '1.3.6.1.4.1.111.4.1.2.1.1',
46 'oraDbTablespaceName' => '1.3.6.1.4.1.111.4.1.2.1.2',
48 'oraDbDataFile' => '1.3.6.1.4.1.111.4.1.3.1',
49 'oraDbDataFileIndex' => '1.3.6.1.4.1.111.4.1.3.1.1',
50 'oraDbDataFileName' => '1.3.6.1.4.1.111.4.1.3.1.2',
52 'oraDbLibraryCache' => '1.3.6.1.4.1.111.4.1.4.1',
53 'oraDbLibraryCacheIndex' => '1.3.6.1.4.1.111.4.1.4.1.1',
54 'oraDbLibraryCacheNameSpace' => '1.3.6.1.4.1.111.4.1.4.1.2',
56 'oraDbLibraryCacheSumTable' => '1.3.6.1.4.1.111.4.1.5.1',
58 'oraDbSGATable' => '1.3.6.1.4.1.111.4.1.6.1',
66 3 => '1048576', # mbytes
67 4 => '1073741824', # gbytes
68 5 => '1099511627776', # tbytes
74 my $devdetails = shift;
76 return $dd->checkSnmpTable('oraDb');
82 my $devdetails = shift;
84 my $session = $dd->session();
85 my $data = $devdetails->data();
87 if( not defined( $data->{'param'}{'snmp-oids-per-pdu'} ) )
89 $data->{'param'}{'snmp-oids-per-pdu'} = '10';
92 my $dbType = $data->{'ora'};
94 # my $oraTableSpaceCols = (
95 # $dd->oiddef('oraDbTablespaceIndex'),
96 # $dd->oiddef('oraDbTablespaceName'),
99 # my $oraTableSpace = $session->get_entries( -columns => [
100 # $dd->oiddef('oraDbTablespaceIndex'),
101 # $dd->oiddef('oraDbTablespaceName'),
104 my $oraTableSpace = $session->get_table( -baseoid =>
105 $dd->oiddef('oraDbTablespace'),
109 if( defined($oraTableSpace) )
111 $devdetails->setCap('oraTableSpace');
112 $devdetails->storeSnmpVars($oraTableSpace);
118 # my @oraDbDataFileCols = (
119 # $dd->oiddef('oraDbDataFileIndex'),
120 # $dd->oiddef('oraDbDataFileName'),
123 # my $oraDbDataFile = $session->get_entries( -columns => [
124 # @oraDbDataFileCols ], );
127 $session->get_table( -baseoid => $dd->oiddef('oraDbDataFile') );
129 if( defined($oraDbDataFile) )
131 $devdetails->setCap('oraDbDataFile');
132 $devdetails->storeSnmpVars($oraDbDataFile);
137 # my @oraDbLibraryCacheCols = (
138 # $dd->oiddef('oraDbLibraryCacheIndex'),
139 # $dd->oiddef('oraDbLibraryCacheNameSpace'),
142 # my $oraDbLibraryCache = $session->get_entries( -columns => [
143 # @oraDbLibraryCacheCols ], );
145 my $oraDbLibraryCache =
146 $session->get_table( -baseoid => $dd->oiddef('oraDbLibraryCache') );
148 if( defined($oraDbLibraryCache) )
150 $devdetails->setCap('oraDbLibraryCache');
151 $devdetails->storeSnmpVars($oraDbLibraryCache);
154 Debug("Looking For dbNames");
156 foreach my $dbName ( keys %{ $dbType } )
158 Debug("DBName: $dbName");
160 my $dbIndex = $dbType->{$dbName}->{'index'};
161 Debug("DBIndex: $dbIndex");
164 $dbType->{$dbName} = $db;
166 my $oid = $dd->oiddef('oraDbConfigDbBlockSize') . '.' . $dbIndex;
167 my $result = $session->get_request( -varbindlist => [ $oid ] );
170 if( $session->error_status() == 0 and $result->{$oid} > 0 )
172 my $blocksize = $result->{$oid};
173 $dbType->{$dbName}->{'dbBlockSize'} = $blocksize;
174 Debug("DB Block Size: $blocksize");
176 Debug($session->error());
178 if( $devdetails->hasCap('oraTableSpace') )
181 $db->{'oraTableSpace'} = $ref;
186 getSnmpIndices( $dd->oiddef('oraDbTablespaceIndex') .
190 $devdetails->snmpVar( $dd->oiddef('oraDbTablespaceName') .
191 '.' . $dbIndex . '.' . $tsIndex );
193 $ref->{$tsName} = $tsIndex;
197 if( $devdetails->hasCap('oraDbDataFile') )
200 $db->{'oraDbDataFile'} = $ref;
205 getSnmpIndices( $dd->oiddef('oraDbDataFileIndex') .
209 $devdetails->snmpVar( $dd->oiddef('oraDbDataFileName') .
210 '.' . $dbIndex . '.' . $dfIndex );
212 $ref->{$dfName} = $dfIndex;
216 if( $devdetails->hasCap('oraDbLibraryCache') )
219 $db->{'oraDbLibraryCache'} = $ref;
224 getSnmpIndices( $dd->oiddef('oraDbLibraryCacheIndex') .
229 snmpVar( $dd->oiddef('oraDbLibraryCacheNameSpace') .
230 '.' . $dbIndex . '.' . $lcIndex );
232 $ref->{$lcName} = $lcIndex;
243 my $devdetails = shift;
246 my $data = $devdetails->data();
248 my $dbType = $data->{'ora'};
250 my $appNode = $cb->addSubtree($devNode, 'Applications' );
251 my $vendorNode = $cb->addSubtree($appNode, 'Oracle' );
253 foreach my $dbName ( keys %{ $dbType } )
255 my $db = $dbType->{$dbName};
256 my $dbIndex = $dbType->{$dbName}->{'index'};
257 my $dbBlockSize = $dbType->{$dbName}->{'dbBlockSize'};
259 my $dbNick = $dbName;
266 'precedence' => sprintf("%d", 10000 - $dbIndex),
267 'vendor' => 'Oracle',
272 'OracleDatabase::Sys',
273 'OracleDatabase::CacheSum',
274 'OracleDatabase::SGA',
277 my $dbNode = $cb->addSubtree($vendorNode, "Vendor_Oracle_DB_$dbNick",
278 $dbParam, [ @dbTemplates ] );
280 if( $devdetails->hasCap('oraTableSpace') )
283 'comment' => "Table space for $dbName",
284 'precedence' => "600",
287 my $tsNode = $cb->addSubtree($dbNode, 'Table_Space', $tsParam );
289 foreach my $tsName ( keys %{ $db->{'oraTableSpace'} } )
291 my $INDEX = $db->{'oraTableSpace'}->{$tsName};
298 my $title = '%system-id%' . " $dbName $tsName";
301 'comment' => "Table Space: $tsName",
302 'precedence' => sprintf("%d", 10000 - $INDEX),
303 'table-space-nick' => $nick,
304 'table-space-name' => $tsName,
305 'graph-title' => $title,
306 'descriptive-nickname' => $title,
309 $cb->addSubtree( $tsNode, $nick, $tsParam,
310 [ 'OracleDatabase::table-space' ] );
311 Debug("Will add TableSpace: $tsName");
315 if( $devdetails->hasCap('oraDbDataFile') )
318 'comment' => "Data Files for $dbName",
319 'precedence' => "500",
322 my $dfNode = $cb->addSubtree($dbNode, 'Data_Files', $dfParam );
324 foreach my $dfName ( keys %{ $db->{'oraDbDataFile'} } )
326 my $INDEX = $db->{'oraDbDataFile'}->{$dfName};
333 my $title = '%system-id%' . " $dbName $dfName";
337 'comment' => "Data File: $dfName",
338 'precedence' => sprintf("%d", 10000 - $INDEX),
339 'data-file-nick' => $nick,
340 'data-file-name' => $dfName,
341 'graph-title' => $title,
342 'dbBlockSize' => $dbBlockSize,
345 $cb->addSubtree( $dfNode, $nick, $dfParam,
346 ['OracleDatabase::data-file' ] );
347 Debug("Will add DataFile: $dfName");
351 if( $devdetails->hasCap('oraDbLibraryCache') )
354 'comment' => "Library Cache for $dbName",
355 'precedence' => "400",
358 my $lcNode = $cb->addSubtree($dbNode, 'Library_Cache', $lcParam );
360 foreach my $lcName ( keys %{ $db->{'oraDbLibraryCache'} } )
362 my $INDEX = $db->{'oraDbLibraryCache'}->{$lcName};
369 my $title = '%system-id%' . " $dbName $lcName";
372 'comment' => "Library Cache: $lcName",
373 'precedence' => sprintf("%d", 10000 - $INDEX),
374 'library-cache-nick' => $nick,
375 'library-cache-name' => $lcName,
376 'graph-title' => $title,
379 $cb->addSubtree( $lcNode, $nick, $lcParam,
380 ['OracleDatabase::library-cache'] );
381 Debug("Will add LibraryCache: $lcName");
393 # indent-tabs-mode: nil
394 # perl-indent-level: 4