blob: 886438a183cff0cd6183fdde373d5ca7f6872c01 [file] [log] [blame]
Norman James90baede2015-09-02 20:32:49 -05001#!/usr/bin/env python
2
3import sys
Norman James6f8d0422015-09-14 18:48:00 -05004#from gi.repository import GObject
5import gobject
Norman James90baede2015-09-02 20:32:49 -05006import dbus
7import dbus.service
8import dbus.mainloop.glib
9
10if (len(sys.argv) < 2):
11 print "Usage: sensor_manager.py [system name]"
12 exit(1)
Norman James5d78b4d2015-09-05 13:34:34 -050013System = __import__(sys.argv[1])
Norman James90baede2015-09-02 20:32:49 -050014import Openbmc
15
16DBUS_NAME = 'org.openbmc.managers.Sensors'
Norman James362a80f2015-09-14 14:04:39 -050017OBJ_NAME = '/org/openbmc/managers/Sensors'
Norman James90baede2015-09-02 20:32:49 -050018
19class SensorManager(dbus.service.Object):
20 def __init__(self,bus,name):
21 dbus.service.Object.__init__(self,bus,name)
Norman James362a80f2015-09-14 14:04:39 -050022 bus.add_signal_receiver(self.SensorChangedHandler,
Norman James9e6acf92015-09-08 07:00:04 -050023 dbus_interface = 'org.openbmc.SensorValue',
24 signal_name = 'Changed', path_keyword='path')
Norman James32e74e22015-09-15 21:28:06 -050025 bus.add_signal_receiver(self.SensorErrorHandler,
26 dbus_interface = 'org.openbmc.SensorValue',
27 signal_name = 'Error', path_keyword='path')
Norman James90baede2015-09-02 20:32:49 -050028 bus.add_signal_receiver(self.NormalThreshold,
Norman James5d78b4d2015-09-05 13:34:34 -050029 dbus_interface = 'org.openbmc.SensorThreshold',
Norman James90baede2015-09-02 20:32:49 -050030 signal_name = 'Normal', path_keyword='path')
31 bus.add_signal_receiver(self.WarningThreshold,
Norman James5d78b4d2015-09-05 13:34:34 -050032 dbus_interface = 'org.openbmc.SensorThreshold',
Norman James90baede2015-09-02 20:32:49 -050033 signal_name = 'Warning', path_keyword='path')
34 bus.add_signal_receiver(self.CriticalThreshold,
Norman James5d78b4d2015-09-05 13:34:34 -050035 dbus_interface = 'org.openbmc.SensorThreshold',
Norman James90baede2015-09-02 20:32:49 -050036 signal_name = 'Critical', path_keyword='path')
37
38 self.sensor_cache = {}
Norman Jamesdfdaca92015-09-27 22:11:15 -050039 @dbus.service.signal('org.openbmc.EventLog')
40 def EventLog(self, priority, message, rc):
41 pass
Norman James362a80f2015-09-14 14:04:39 -050042
43 @dbus.service.method(DBUS_NAME,
Norman James2d1ee892015-09-16 23:13:45 -050044 in_signature='', out_signature='a{sa{sv}}')
Norman James65a295a2015-09-26 22:21:10 -050045 def getSensors(self):
Norman James362a80f2015-09-14 14:04:39 -050046 return self.sensor_cache;
47
Norman James362a80f2015-09-14 14:04:39 -050048
Norman James90baede2015-09-02 20:32:49 -050049 @dbus.service.method(DBUS_NAME,
Norman James5d78b4d2015-09-05 13:34:34 -050050 in_signature='s', out_signature='v')
Norman James90baede2015-09-02 20:32:49 -050051 def getSensor(self,path):
Norman James362a80f2015-09-14 14:04:39 -050052 val = 0
Norman James90baede2015-09-02 20:32:49 -050053 if (self.sensor_cache.has_key(path) == True):
54 val = self.sensor_cache[path]['value']
Norman James362a80f2015-09-14 14:04:39 -050055 else:
Norman Jamesdfdaca92015-09-27 22:11:15 -050056 self.EventLog(1,"Unknown sensor: "+path,1)
Norman James90baede2015-09-02 20:32:49 -050057 return val
Norman James362a80f2015-09-14 14:04:39 -050058
Norman James32e74e22015-09-15 21:28:06 -050059 ## Signal handlers
60 def SensorErrorHandler(self,path = None):
61 self.initSensorEntry(path)
62 self.sensor_cache[path]['error'] = True
63
Norman James362a80f2015-09-14 14:04:39 -050064 def SensorChangedHandler(self,value,units,path = None):
Norman James9e6acf92015-09-08 07:00:04 -050065 self.initSensorEntry(path)
66 self.sensor_cache[path]['value'] = value
67 self.sensor_cache[path]['units'] = units
Norman James90baede2015-09-02 20:32:49 -050068
69 @dbus.service.signal(DBUS_NAME)
70 def CriticalThreshold(self, path = None):
71 print "Critical: "+path
Norman James5d78b4d2015-09-05 13:34:34 -050072 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050073 self.sensor_cache[path]['threshold'] = "CRITICAL"
74
Norman James90baede2015-09-02 20:32:49 -050075 @dbus.service.signal(DBUS_NAME)
76 def WarningThreshold(self, path = None):
Norman James5d78b4d2015-09-05 13:34:34 -050077 print "Warning:"+path
78 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050079 self.sensor_cache[path]['threshold'] = "WARNING"
80
Norman James90baede2015-09-02 20:32:49 -050081 @dbus.service.signal(DBUS_NAME)
82 def NormalThreshold(self, path = None):
83 print "Normal: "+path
Norman James5d78b4d2015-09-05 13:34:34 -050084 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050085 self.sensor_cache[path]['threshold'] = "NORMAL"
86
Norman James5d78b4d2015-09-05 13:34:34 -050087 def initSensorEntry(self,path):
88 if (self.sensor_cache.has_key(path) == False):
89 self.sensor_cache[path] = {}
Norman James90baede2015-09-02 20:32:49 -050090
Norman James5d78b4d2015-09-05 13:34:34 -050091
Norman James90baede2015-09-02 20:32:49 -050092if __name__ == '__main__':
93 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
94 bus = dbus.SessionBus()
95 name = dbus.service.BusName(DBUS_NAME,bus)
96 obj = SensorManager(bus,OBJ_NAME)
Norman James6f8d0422015-09-14 18:48:00 -050097 mainloop = gobject.MainLoop()
Norman James90baede2015-09-02 20:32:49 -050098
99 print "Running Sensor Manager"
100 mainloop.run()
101