#!/usr/bin/python
#__*__ coding:utf-8 __*__
import os
import time
import commands
from multiprocessing import Queue,Event,Process,Pool,Manager
#指定交换机snmp community和日志文件路径
community='public'
logfile='/root/switch_bagg_monitor/switch_bagg_monitor.log'
#判断交换机所属厂家
def switch_provider(ip,community):
global provider
provider_oid='SNMPv2-MIB::sysDescr.0'
cmd='snmpwalk -c %s -v 2c %s %s'%(community,ip,provider_oid)
code,result=commands.getstatusoutput(cmd)
if 'Cisco' in result:
provider='Cisco'
elif 'H3C' in result:
provider='H3C'
#定义一个写日志的函数,供后面调用
def log_write(msg):
file=open(logfile,'a+')
file.write(msg)
file.close()
def BAGG_Monitor(ip,community):
switch_provider(ip,community)
if provider=='H3C':
bagg_conf_oid='iso.2.840.10006.300.43.1.2.1.1.13'
cmd='snmpwalk -c %s -v 2c %s %s'%(community,ip,bagg_conf_oid)
code,result=commands.getstatusoutput(cmd)
result=result.split('\n')
bagg_conf_int=[item for item in result if 'INTEGER: 0' not in item]
#print bagg_conf_int
for item in bagg_conf_int:
bagg_index=item.split('=')[-1].strip()
bagg_int_status_oid='IF-MIB::ifOperStatus.%s'%(bagg_index.split(':')[-1].strip())
cmd='snmpwalk -c %s -v 2c %s %s'%(community,ip,bagg_int_status_oid)
code,result=commands.getstatusoutput(cmd)
if 'INTEGER: down(2)' not in result:
#print result
#print bagg_index
bagg_mem_count=0
for i in bagg_conf_int:
if bagg_index in i:
bagg_mem_count += 1
if bagg_mem_count >= 2:
int_index=item.split('=')[0].split('.')[-1]
#print item
#print int_index
bagg_run_oid='iso.2.840.10006.300.43.1.2.1.1.12.%s'%int_index
cmd='snmpwalk -c %s -v 2c %s %s'%(community,ip,bagg_run_oid)
code,result=commands.getstatusoutput(cmd)
if 'INTEGER: 0' in result:
int_adminstatus_oid='IF-MIB::ifAdminStatus.%s'%int_index
cmd='snmpwalk -c %s -v 2c %s %s'%(community,ip,int_adminstatus_oid)
code,result=commands.getstatusoutput(cmd)
if 'down' not in result:
int_desc_oid='IF-MIB::ifDescr.%s'%int_index
cmd='snmpwalk -c %s -v 2c %s %s'%(community,ip,int_desc_oid)
code,result=commands.getstatusoutput(cmd)
error_int=result.split(':')[-1].strip()
current_time=time.strftime('%Y-%m-%d %H:%M:%S')
msg='%s\t%s\t\t%s\t\t端口聚合异常\n' %(current_time,ip,error_int)
#print msg
log_write(msg)
elif provider == 'Cisco':
pass
if __name__ == '__main__':
pool = Pool(30)
for ip in open("/root/switch_bagg_monitor/switch_ip.txt") :
ip = ip.strip()
result = pool.apply_async(BAGG_Monitor,(ip,community,))
pool.close()
pool.join()