-1

我必须用主动监控,我需要监控到windos的整个硬盘,盘符通过传递参数的方式。如果我达到我想要的,你需要这三个脚本。谁能帮我改进下一个?我想要一个脚本来完成这两个脚本的工作。如何合并?

1:编码光盘

import sys
import os
import commands
warning = sys.argv[2]
critical = sys.argv[3]
ip =sys.argv[5]
#val = sys.argv[1]
StorageAllocationUnitsC="1.3.6.1.2.1.25.2.3.1.4.1"#last4.1=Cdisk,4.2=Ddisk....
StorageSizeC="1.3.6.1.2.1.25.2.3.1.5.1"#last5.1=Cdisk,5.2=Ddisk....
StorageUsedC="1.3.6.1.2.1.25.2.3.1.6.1"#last6.1=Cdisk,5.2=Ddisk....

StorageAll = "snmpwalk -v 2c -c public %s %s" % (ip,StorageAllocationUnitsC)
(r_c,r_e) = commands.getstatusoutput(StorageAll)
if r_c != 0:
    print "C - snmpwalk is Error."
else:
    StorageAllC = r_e.split("INTEGER: ")[-1][:4]

StorageSize = "snmpwalk -v 2c -c public %s %s" % (ip,StorageSizeC)
(r_c,r_e) = commands.getstatusoutput(StorageSize)
if r_c != 0:
     print "C - snmpwalk is Error."
else:
     StorageSize = r_e.split("INTEGER: ")[1]

StorageUsed = "snmpwalk -v 2c -c public %s %s" % (ip,StorageUsedC)
(r_c,r_e) = commands.getstatusoutput(StorageUsed)
if r_c !=0:
    print "C - snmpwalk is not value."
else:
    StorageUsed =  r_e.split("INTEGER: ")[1]



diskall = int(StorageAllC)*int(StorageSize)/1024/1024/1024
diskusd = int(StorageAllC)*int(StorageUsed)/1024/1024/1024
diskrate = round(float(diskusd)/float(diskall)*100,2)

if int(sys.argv[2]) > int(diskrate):
    print "Critical - pls check Cdiskrate %s" % diskrate + "%"
    ret = 2
elif int (sys.argv[3]) > int(diskrate):
    print "Warning - pls check Cdiskrate %s" % diskrate + "%"
    ret = 1
else:
    print "OK - good! %s" % diskrate + "%"
    ret =0
sys.exit(ret)

2:编码Ddisk

import sys
import os
import commands
warning = sys.argv[2]
critical = sys.argv[3]
ip =sys.argv[5]
#val = sys.argv[1]
StorageAllocationUnitsC="1.3.6.1.2.1.25.2.3.1.4.2"#last4.1=Cdisk,4.2=Ddisk....
StorageSizeC="1.3.6.1.2.1.25.2.3.1.5.2"#last5.1=Cdisk,5.2=Ddisk....
StorageUsedC="1.3.6.1.2.1.25.2.3.1.6.2"#last6.1=Cdisk,5.2=Ddisk....

StorageAll = "snmpwalk -v 2c -c public %s %s" % (ip,StorageAllocationUnitsC)
(r_c,r_e) = commands.getstatusoutput(StorageAll)
if r_c != 0:
    print "C - snmpwalk is Error."
else:
    StorageAllC = r_e.split("INTEGER: ")[-1][:4]

StorageSize = "snmpwalk -v 2c -c public %s %s" % (ip,StorageSizeC)
(r_c,r_e) = commands.getstatusoutput(StorageSize)
if r_c != 0:
     print "C - snmpwalk is Error."
else:
     StorageSize = r_e.split("INTEGER: ")[1]

StorageUsed = "snmpwalk -v 2c -c public %s %s" % (ip,StorageUsedC)
(r_c,r_e) = commands.getstatusoutput(StorageUsed)
if r_c !=0:
    print "C - snmpwalk is not value."
else:
    StorageUsed =  r_e.split("INTEGER: ")[1]



diskall = int(StorageAllC)*int(StorageSize)/1024/1024/1024
diskusd = int(StorageAllC)*int(StorageUsed)/1024/1024/1024
diskrate = round(float(diskusd)/float(diskall)*100,2)

if int(sys.argv[2]) > int(diskrate):
    print "Critical - pls check Cdiskrate %s" % diskrate + "%"
    ret = 2
elif int (sys.argv[3]) > int(diskrate):
    print "Warning - pls check Cdiskrate %s" % diskrate + "%"
    ret = 1
else:
    print "OK - good! %s" % diskrate + "%"
    ret =0
sys.exit(ret)
4

1 回答 1

1

您真正需要做的就是结合一些变量。有更好的方法来构建 snmp 查询,但这超出了这个问题的范围。

import sys
import os
import commands

warning = sys.argv[2]
critical = sys.argv[3]
ip =sys.argv[5]
#val = sys.argv[1]

StorageAllocationUnitsC ="1.3.6.1.2.1.25.2.3.1.4.1"
StorageAllocationUnitsD ="1.3.6.1.2.1.25.2.3.1.4.2"
StorageSizeC="1.3.6.1.2.1.25.2.3.1.5.1"
StorageSizeD="1.3.6.1.2.1.25.2.3.1.5.2"
StorageUsedC="1.3.6.1.2.1.25.2.3.1.6.1"
StorageUsedD="1.3.6.1.2.1.25.2.3.1.6.2"

results = dict()

for oid,descr in [(StorageAllocationUnitsC,"C_StorageUnits"), 
    (StorageAllocationUnitsD,"D_StorageUnits")]:
    StorageAll = "snmpwalk -v 2c -c public %s %s" % (ip,oid)
    (r_c,r_e) = commands.getstatusoutput(StorageAll)
    if r_c != 0:
        print "%s - snmpwalk is Error." % descr
    else:
        results[descr] = r_e.split("INTEGER: ")[-1][:4]

for oid,descr in [(StorageSizeC, "C_StorageSize"), 
    (StorageSizeD, "D_StorageSize"), (StorageUsedC, "C_StorageUsed"), 
    (StorageUsedD, "D_StorageUsed")]:
    Storage = "snmpwalk -v 2c -c public %s %s" % (ip,oid)
    (r_c,r_e) = commands.getstatusoutput(Storage)
    if r_c != 0:
         print "%s - snmpwalk is Error." % descr
    else:
         results[descr] = r_e.split("INTEGER: ")[1]

所有结果都存储在名为的 python 字典中results

于 2012-06-06T05:03:26.233 回答