清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | #!/usr/bin/env python #coding:utf-8 """ Author: Edward.Zhou -- <edgeman_03@163.com> Purpose: 监控精密空调DataMate3000状态 Created: 2015年05月02日 """ import unittest import netsnmp import sys import argparse #DataMate3000MIB库 DaTaMate3000MIB = { 'SmartOutput' : { 'Temperature' : '.1.3.6.1.4.1.13400.2.10.1.2.2.1' , #温度 'Humidity' : '.1.3.6.1.4.1.13400.2.10.1.2.2.2' , #湿度 }, 'BaseStatus' : { #'''Status: unknown ( 1 ) , ok ( 2 ) , lostCommunication ( 3 ) , notEstablished ( 4 )''' 'Communication' : '.1.3.6.1.4.1.13400.2.10.1.3.1.1' , #通信状态 }, 'SmartStatus' : { #'''Status: #unknown ( 1 ) , on ( 2 ) , off ( 3 )''' 'UnitOnOff' : '.1.3.6.1.4.1.13400.2.10.1.3.2.1' , #开关机 'MainFan' : '.1.3.6.1.4.1.13400.2.10.1.3.2.2' , #风机 'CoolMode' : '.1.3.6.1.4.1.13400.2.10.1.3.2.3' , #制冷 'HeatMode' : '.1.3.6.1.4.1.13400.2.10.1.3.2.4' , #加热 'HumidifyMode' : '.1.3.6.1.4.1.13400.2.10.1.3.2.5' , #加湿 'DehumidifyMode' : '.1.3.6.1.4.1.13400.2.10.1.3.2.6' , #除湿 'HighPressure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.7' , #高压告警 'LowPressure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.8' , #低压告警 'HighTemperature' : '.1.3.6.1.4.1.13400.2.10.1.3.2.9' , #高温告警 'LowTemperature' : '.1.3.6.1.4.1.13400.2.10.1.3.2.10' , #低温告警 'HighHumidify' : '.1.3.6.1.4.1.13400.2.10.1.3.2.11' , #高湿告警 'LowHumidify' : '.1.3.6.1.4.1.13400.2.10.1.3.2.12' , #低湿告警 'PowerFailure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.13' , #电源故障告警 'ShortCycle' : '.1.3.6.1.4.1.13400.2.10.1.3.2.14' , #短周期告警 'CustomAlarm1' : '.1.3.6.1.4.1.13400.2.10.1.3.2.15' , #自定义告警1 'CustomAlaarm2' : '.1.3.6.1.4.1.13400.2.10.1.3.2.16' , #自定义告警2 'MainFanServiceRequired' : '.1.3.6.1.4.1.13400.2.10.1.3.2.17' , #主风机维护请求 'HumidifierServiceRequired' : '.1.3.6.1.4.1.13400.2.10.1.3.2.18' , #加湿器维护请求 'FilterServiceRequired' : '.1.3.6.1.4.1.13400.2.10.1.3.2.19' , #过滤网维护请求 'CoilFroze' : '.1.3.6.1.4.1.13400.2.10.1.3.2.20' , #盘管冻结 'HumidifierFailure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.21' , #加湿器故障 'SensorBoardFailure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.22' , #传感器板故障 'DischargeTemperatureFailure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.23' , #排气温度故障 'PowerLost' : '.1.3.6.1.4.1.13400.2.10.1.3.2.24' , #电源丢失 'InnerCommFailure' : '.1.3.6.1.4.1.13400.2.10.1.3.2.25' , #空调通讯状态 }, } #设置返回状态码 ''' ST_OK=0 #正常 ST_WR=1 #错误 ST_CR=2 #严重警告 ST_UK=3 #未知 ''' #采用snmp协议获取相应OID值 def snmpGet(oid, version = 1 , community = 'public' , host = 'localhost' ): try : result = netsnmp.snmpwalk(oid, Version = version, Community = community, DestHost = host) except Exception, err: print err sys.exit() if result: return result[ 0 ] else : return None def main(): parser = argparse.ArgumentParser(description = 'DataMate 3000 status check' ) parser.add_argument( '-i' , '--host' , dest = 'host' , nargs = '?' , default = 'localhost' , required = False , help = 'The specified monitoring DataMate 3000 IP or Host' ) parser.add_argument( '-v' , '--version' , dest = 'version' , nargs = '?' , default = 1 , type = int, required = False , help = 'The specified snmp version' ) parser.add_argument( '-C' , '--Community' , dest = 'Community' , nargs = '?' , default = 'public' , required = False , help = 'The specified snmp community' ) parser.add_argument( '-V' , '--Variable' , dest = 'Variable' , nargs = '?' , default = 'Temperature' , required = True , choices = [ 'Temperature' , 'Humidity' ], help = 'The specified check object' ) parser.add_argument( '-w' , '--warning' , dest = 'warning' , type = int, nargs = '?' , required = True , default = None , help = 'Threshold which will result in a warning status' ) parser.add_argument( '-c' , '--critical' , dest = 'critical' , type = int, nargs = '?' , required = True , default = None , help = 'Threshold which will result in a critical status' ) args = parser.parse_args() #检测环境温度 if args.Variable = = 'Temperature' : toid = DaTaMate3000MIB[ 'SmartOutput' ][ 'Temperature' ] _result = snmpGet(toid, args.version, args.Community, args.host) result = float(_result) if (result / 10 ) < args.warning: print "DataMate 3000 Teamperature is %s ℃,status is ok." % (result / 10 ) sys.exit( 0 ) elif (result / 10 ) > = args.warning and (result / 10 ) < = args.critical: print "DataMate 3000 Teamperature is %s ℃,status is warning." % (result / 10 ) sys.exit( 1 ) elif (result / 10 ) > = args.critical: print "DataMate 3000 Teamperature is %s ℃,status is critical." % (result / 10 ) sys.exit( 2 ) else : print "DataMate 3000 Teamperature is unknown ℃,status is unknown." sys.exit( 3 ) #检测环境湿度 if args.Variable = = 'Humidity' : hoid = DaTaMate3000MIB[ 'SmartOutput' ][ 'Humidity' ] _result = snmpGet(hoid, args.version, args.Community, args.host) result = float(_result) if result < args.warning: print "DataMate 3000 Humidity is %s %%RH,status is ok." % result sys.exit( 0 ) elif result > = args.warning and result < = args.critical: print "DataMate 3000 Humidity is %s %%RH,status is warning." % result sys.exit( 1 ) elif result > = args.critical: print "DataMate 3000 Humidity is %s %%RH,status is critical." % result sys.exit( 2 ) else : print "DataMate 3000 Humidity is unknown %%RH,status is unknown." sys.exit( 3 ) if __name__ = = '__main__' : main() |