OhLee
#!/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()

 

分类:

技术点:

相关文章: