96 lines
2.8 KiB
Plaintext
96 lines
2.8 KiB
Plaintext
|
#!/usr/bin/env python
|
||
|
from commands import getstatusoutput as gso
|
||
|
|
||
|
def safe(s):
|
||
|
s=s.replace("-", "_")
|
||
|
s=s.replace(" ", "_")
|
||
|
s=s.replace(".", "_")
|
||
|
return s
|
||
|
|
||
|
def config(data,title):
|
||
|
for i in data:
|
||
|
print "%s.label %s"%(safe(i[0]), i[0])
|
||
|
|
||
|
# check for non-critical thresholds
|
||
|
if i[6] != 'na':
|
||
|
if i[7] != 'na':
|
||
|
warning = "%s:%s"%(i[6],i[7])
|
||
|
else:
|
||
|
warning = "%s:"%i[6]
|
||
|
else:
|
||
|
if i[7] != 'na':
|
||
|
warning = "%s"%i[7]
|
||
|
else:
|
||
|
warning = ""
|
||
|
if warning:
|
||
|
print "%s.warning %s"%(safe(i[0]),warning)
|
||
|
|
||
|
# check for critical thresholds
|
||
|
if i[5] == 'na':
|
||
|
i[5] == i[4] # N/A, so see if there is a non-recoverable threshold
|
||
|
if i[8] == 'na':
|
||
|
i[8] == i[9] # N/A, so see if there is a non-recoverable threshold
|
||
|
if i[5] != 'na':
|
||
|
if i[8] != 'na':
|
||
|
critical = "%s:%s"%(i[5],i[8])
|
||
|
else:
|
||
|
critical = "%s:"%i[5]
|
||
|
else:
|
||
|
if i[8] != 'na':
|
||
|
critical = "%s"%i[8]
|
||
|
else:
|
||
|
critical = ""
|
||
|
if critical:
|
||
|
print "%s.critical %s"%(safe(i[0]),critical)
|
||
|
|
||
|
print "graph_title %s"%title
|
||
|
if title == "Voltages":
|
||
|
print "graph_args -X 0 --logarithmic -l 1 -u 15"
|
||
|
#print "graph_args --base 1000 --logarithmic"
|
||
|
else:
|
||
|
print "graph_args -l 0"
|
||
|
print "graph_vlabel %s"%i[2]
|
||
|
print "graph_period minute"
|
||
|
print "graph_category IPMI"
|
||
|
|
||
|
def get_data():
|
||
|
import sys
|
||
|
category = sys.argv[0].split("_",1)[1]
|
||
|
data = []
|
||
|
if category =="Fans":
|
||
|
ids = ("Fan 1 Tach", "Fan 2 Tach", "Fan 3 Tach",
|
||
|
"Fan 4 Tach", "Fan 5 Tach", "Fan 6 Tach",)
|
||
|
title = "Fan Speed"
|
||
|
elif category == "Temperature":
|
||
|
ids = ("Ambient Temp", "Memory Temp",)
|
||
|
title = "Temperatures"
|
||
|
elif category == "Voltage":
|
||
|
ids = ("Planar 1.5V", "Planar 1.8V",
|
||
|
"Planar 3.3V", "Planar 5V", "Planar 12V",
|
||
|
"Planar VBAT", "CPU 1 VCore", "CPU 2 VCore",)
|
||
|
title = "Voltages"
|
||
|
|
||
|
status, output = gso("ipmitool sensor")
|
||
|
for row in output.split("\n"):
|
||
|
items = map(str.strip,row.split("|"))
|
||
|
field,value,units,status,lower_nonrecoverable,lower_critical,lower_non_critical,upper_non_critical,upper_critical,upper_nonrecoverable=items
|
||
|
if field in ids:
|
||
|
if value == 'na': continue
|
||
|
data.append(items)
|
||
|
return data,title
|
||
|
|
||
|
def sample(data):
|
||
|
for i in data:
|
||
|
print "%s.value %s"%(safe(i[0]),i[1])
|
||
|
|
||
|
def main():
|
||
|
import sys
|
||
|
data,title = get_data()
|
||
|
if 'config' in sys.argv:
|
||
|
return config(data,title)
|
||
|
sample(data)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|
||
|
|