#!/usr/bin/env python """Thomas R. N. Jansson (tjansson@tjansson.dk) 16-MAY-2010 """ # The SNMP traps for the NetApp filer can be found in # /net/netappfiler/vol0/etc/mib/traps.dat if the filer is # NFS automounted mounted on server. # Example: the SNMP id for cpuBusyTimePerCent is # snmp.1.3.6.1.4.1.789.1.2.1.3.0 # and retrival of this value is done by # snmpget -v 1 -c public netappfiler 1.3.6.1.4.1.789.1.2.1.3.0 # # Requires snmpget and assumes public community. import commands import sys import time # Provided a servername and a snmpid it returns the value stripped of bogus information. def snmpget(iservername,isnmpid): runcmd = 'snmpget -v 1 -c public ' + iservername + ' ' + isnmpid output = commands.getoutput(runcmd) return output.split()[3] # Calculates the bps by asking twice divided per second. def calcbps(iservername,isnmpid): val_first = int(snmpget(iservername,isnmpid)) time.sleep(1) val_second = int(snmpget(iservername,isnmpid)) return str(val_second-val_first) # The interface number corresponds to vif1 on my netapp iface = '8' ifEntryDescr = '1.3.6.1.2.1.2.2.1.2.'+iface ifEntrySpeed = '1.3.6.1.2.1.2.2.1.5.'+iface ifEntryStatus = '1.3.6.1.2.1.2.2.1.8.'+iface ifEntryInOctets = '1.3.6.1.2.1.2.2.1.10.'+iface ifEntryOutOctets = '1.3.6.1.2.1.2.2.1.16.'+iface servername = sys.argv[0].split('_')[2] ifacename = snmpget(servername,ifEntryDescr) if len(sys.argv) == 2 and sys.argv[1] == "config": print 'graph_title Network usage on '+servername+' inteface '+ifacename print 'graph_order recv send' print 'graph_args --base 1000' print 'graph_vlabel bits in (-) / out (+) per \${graph_period}' print 'graph_category netapp' print 'graph_info This graph shows traffic for the '+ifacename+' network interface.' print 'recv.label recv' print 'recv.type DERIVE' print 'recv.graph no' print 'recv.cdef recv,8,*' print 'recv.max 2000000000' print 'recv.min 0' print 'send.info Bits sent/received by the '+ifacename+' interface.' print 'send.label bps' print 'send.type DERIVE' print 'send.negative recv' print 'send.cdef send,8,*' print 'send.max 2000000000' print 'send.min 0' sys.exit(0) # Gathers info from the servers and gathers data print 'send.value '+calcbps(servername,ifEntryOutOctets) print 'recv.value '+str(int(calcbps(servername,ifEntryInOctets))*-1)