diff --git a/plugins/other/ipmi_ b/plugins/other/ipmi_ new file mode 100755 index 00000000..acaa9fcd --- /dev/null +++ b/plugins/other/ipmi_ @@ -0,0 +1,95 @@ +#!/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() +