| SNMP-Info documentation | Contained in the SNMP-Info distribution. |
SNMP::Info::CiscoStats - Perl5 Interface to CPU and Memory stats for Cisco Devices
Eric Miller, Max Baker, Sam Stickland
# Let SNMP::Info determine the correct subclass for you.
my $ciscostats = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly on to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $ciscostats->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
SNMP::Info::CiscoStats is a subclass of SNMP::Info that provides cpu, memory, os and version information about Cisco Devices.
Use or create in a subclass of SNMP::Info. Do not use directly.
None.
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
Returns ios_cpu() or cat_cpu(), whichever is available.
Returns ios_cpu_1min() or cat_cpu1min(), whichever is available.
Returns ios_cpu_5min() or cat_cpu5min(), whichever is available.
Returns mem_free() + mem_used()
Tries to parse if device is running IOS or CatOS from description()
'cisco'
Available values :
Cisco PIX
Cisco ASA
Single-mode FWSM
Admin context of multi-context FWSM
Standard context of multi-context FWSM
Admin context of ACE module
Standard context of ACE module (NB: No OS version detection is available, but will be the same as it's 'ace admin')
Cisco Content Switch
Cisco Content Switch Secure Content Acceleration
Tries to parse device operating system version from description()
Tries to parse ROMMON version from rom_id() string
Current CPU usage in percent.
1.3.6.1.4.1.9.2.1.56.0 =
OLD-CISCO-CPU-MIB:avgBusyPer
Average CPU Usage in percent over the last minute.
1.3.6.1.4.1.9.2.1.57.0
Average CPU Usage in percent over the last 5 minutes.
1.3.6.1.4.1.9.2.1.58.0
Current CPU usage in percent.
CISCO-PROCESS-MIB::cpmCPUTotal5sec.9
Average CPU Usage in percent over the last minute.
CISCO-PROCESS-MIB::cpmCPUTotal1min.9
Average CPU Usage in percent over the last 5 minutes.
CISCO-PROCESS-MIB::cpmCPUTotal5min.9
Main DRAM free of the device in bytes.
CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree
Main DRAM used of the device in bytes.
CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed
Main DRAM of the device in bytes.
CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolFree +
CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolUsed
Flash memory of the device in bytes.
CISCO-FLASH-MIB::ciscoFlashDeviceSize
ciscoMemoryPoolTable)The number of bytes from the memory pool that are currently unused on the managed device.
(ciscoMemoryPoolFree)
The number of bytes from the memory pool that are currently in use by applications on the managed device.
(ciscoMemoryPoolUsed)
ciscoFlashDeviceTable)Total size of the Flash device. For a removable device, the size will be zero if the device has been removed.
(ciscoFlashDeviceSize)
| SNMP-Info documentation | Contained in the SNMP-Info distribution. |
# SNMP::Info::CiscoStats # $Id$ # # Changes since Version 0.7 Copyright (c) 2008-2009 Max Baker and SNMP::Info Developers # All rights reserved. # # Copyright (c) 2003 Regents of the University of California # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the University of California, Santa Cruz nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. package SNMP::Info::CiscoStats; use strict; use Exporter; use SNMP::Info; @SNMP::Info::CiscoStats::ISA = qw/SNMP::Info Exporter/; @SNMP::Info::CiscoStats::EXPORT_OK = qw//; use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/; $VERSION = '2.05'; %MIBS = ( 'SNMPv2-MIB' => 'sysDescr', 'CISCO-PROCESS-MIB' => 'cpmCPUTotal5sec', 'CISCO-MEMORY-POOL-MIB' => 'ciscoMemoryPoolUsed', 'OLD-CISCO-SYSTEM-MIB' => 'writeMem', 'CISCO-PRODUCTS-MIB' => 'sysName', 'ENTITY-MIB' => 'entPhysicalSoftwareRev', # some older catalysts live here 'CISCO-STACK-MIB' => 'wsc1900sysID', 'CISCO-ENTITY-VENDORTYPE-OID-MIB' => 'cevChassis', 'CISCO-FLASH-MIB' => 'ciscoFlashDeviceSize', ); %GLOBALS = ( 'description' => 'sysDescr', 'ent_physical_software_rev' => 'entPhysicalSoftwareRev.1', # We will use the numeric OID's so that we don't require people # to install v1 MIBs, which can conflict. # OLD-CISCO-CPU-MIB:avgBusyPer 'ios_cpu' => '1.3.6.1.4.1.9.2.1.56.0', 'ios_cpu_1min' => '1.3.6.1.4.1.9.2.1.57.0', 'ios_cpu_5min' => '1.3.6.1.4.1.9.2.1.58.0', # CISCO-PROCESS-MIB 'cat_cpu' => 'cpmCPUTotal5sec.9', 'cat_cpu_1min' => 'cpmCPUTotal1min.9', 'cat_cpu_5min' => 'cpmCPUTotal5min.9', # OLD-CISCO-SYSTEM-MIB 'write_mem' => 'writeMem', 'rom_id' => 'romId', ); %FUNCS = ( # CISCO-MEMORY-POOL-MIB::ciscoMemoryPoolTable 'cisco_mem_free' => 'ciscoMemoryPoolFree', 'cisco_mem_used' => 'ciscoMemoryPoolUsed', # CISCO-FLASH-MIB::ciscoFlashDeviceTable 'cisco_flash_size' => 'ciscoFlashDeviceSize', ); %MUNGE = (); sub vendor { return 'cisco'; } sub os { my $l2 = shift; my $descr = $l2->description() || ''; # order here matters - there are Catalysts that run IOS and have catalyst # in their description field. return 'ios' if ( $descr =~ /IOS/ ); return 'catalyst' if ( $descr =~ /catalyst/i ); return 'css' if ( $descr =~ /Content Switch SW/ ); return 'css-sca' if ( $descr =~ /Cisco Systems Inc CSS-SCA-/ ); return 'pix' if ( $descr =~ /Cisco PIX Security Appliance/ ); return 'asa' if ( $descr =~ /Cisco Adaptive Security Appliance/ ); if ( $descr =~ /Application Control Engine Service Module/ ) { # Only the admin context implements the entity MIB return 'ace-admin' if defined $l2->ent_physical_software_rev(); return 'ace-context'; } # Pre-version 3 FWSMs return 'fwsm' if ( $descr =~ /Cisco Secure FWSM Firewall/ ); # Version 3+ FWSMs (currently untested against version 4) if ( $descr =~ /Firewall Services Module/ ) { my $model = $l2->model(); if ( defined $model && $model eq "WsSvcFwm1sc" ) { # Only the admin context implements the entity MIB return 'fwsm-admin' if defined $l2->ent_physical_software_rev(); return 'fwsm-context'; } # Non context mode FWSM return 'fwsm'; } return; } sub os_ver { my $l2 = shift; my $os = $l2->os(); my $descr = $l2->description(); # Older Catalysts if ( defined $os and $os eq 'catalyst' and defined $descr and $descr =~ m/V(\d{1}\.\d{2}\.\d{2})/ ) { return $1; } if ( defined $os and $os eq 'css' and defined $descr and $descr =~ m/Content Switch SW Version ([0-9\.\(\)]+) with SNMPv1\/v2c Agent/ ) { return $1; } if ( defined $os and $os eq 'css-sca' and defined $descr and $descr =~ m/Cisco Systems Inc CSS-SCA-2FE-K9, ([0-9\.\(\)]+) Release / ) { return $1; } if ( defined $os and $os eq 'pix' and defined $descr and $descr =~ m/Cisco PIX Security Appliance Version ([0-9\.\(\)]+)/ ) { return $1; } if ( defined $os and $os eq 'asa' and defined $descr and $descr =~ m/Cisco Adaptive Security Appliance Version ([0-9\.\(\)]+)/ ) { return $1; } if ( defined $os and $os =~ /^ace/ ) { return $l2->ent_physical_software_rev(); } if ( defined $os and $os =~ /^fwsm/ and defined $descr and $descr =~ m/Version (\d+\.\d+(\(\d+\)){0,1})/ ) { return $1; } # Newer Catalysts and IOS devices if ( defined $descr and $descr =~ m/Version (\d+\.\d+\([^)]+\)[^,\s]*)(,|\s)+/ ) { return $1; } return; } sub os_bin { my $self = shift; my $rom_id = $self->rom_id(); if ($rom_id =~ m/Version ([^,]+),/) { return $1; } return; } sub cpu { my $self = shift; my $ios_cpu = $self->ios_cpu(); return $ios_cpu if defined $ios_cpu; my $cat_cpu = $self->cat_cpu(); return $cat_cpu; } sub cpu_1min { my $self = shift; my $ios_cpu_1min = $self->ios_cpu_1min(); return $ios_cpu_1min if defined $ios_cpu_1min; my $cat_cpu_1min = $self->cat_cpu_1min(); return $cat_cpu_1min; } sub cpu_5min { my $self = shift; my $ios_cpu_5min = $self->ios_cpu_5min(); return $ios_cpu_5min if defined $ios_cpu_5min; my $cat_cpu_5min = $self->cat_cpu_5min(); return $cat_cpu_5min; } sub mem_free { my $self = shift; my $mem_free; my $cisco_mem_free = $self->cisco_mem_free() || {}; foreach my $mem_free_val ( values %$cisco_mem_free ) { $mem_free += $mem_free_val; } return $mem_free; } sub mem_used { my $self = shift; my $mem_used; my $cisco_mem_used = $self->cisco_mem_used() || {}; foreach my $mem_used_val ( values %$cisco_mem_used ) { $mem_used += $mem_used_val; } return $mem_used; } sub mem_total { my $self = shift; my $mem_total; my $cisco_mem_free = $self->cisco_mem_free() || {}; my $cisco_mem_used = $self->cisco_mem_used() || {}; foreach my $mem_entry ( keys %$cisco_mem_free ) { my $mem_free = $cisco_mem_free->{$mem_entry} || 0; my $mem_used = $cisco_mem_used->{$mem_entry} || 0; $mem_total += ( $mem_free + $mem_used ); } return $mem_total; } sub flashmem_total { my $self = shift; my $flashmem_total; my $flash_sizes = $self->cisco_flash_size; foreach my $flash_index ( keys %$flash_sizes ) { $flashmem_total += $flash_sizes->{$flash_index}; } return $flashmem_total; } 1; __END__