blob: cb0904ea722277207b36184d3043b9468bfcd28f [file] [log] [blame]
Norman James90baede2015-09-02 20:32:49 -05001#!/usr/bin/env python
2
3import sys
Norman James5d78b4d2015-09-05 13:34:34 -05004from gi.repository import GObject
Norman James90baede2015-09-02 20:32:49 -05005import dbus
6import dbus.service
7import dbus.mainloop.glib
8
9if (len(sys.argv) < 2):
10 print "Usage: sensor_manager.py [system name]"
11 exit(1)
Norman James5d78b4d2015-09-05 13:34:34 -050012System = __import__(sys.argv[1])
Norman James90baede2015-09-02 20:32:49 -050013import Openbmc
14
15DBUS_NAME = 'org.openbmc.managers.Sensors'
16OBJ_NAME = '/org/openbmc/managers/Sensors/'+sys.argv[1]
17
18class SensorManager(dbus.service.Object):
19 def __init__(self,bus,name):
20 dbus.service.Object.__init__(self,bus,name)
21 bus.add_signal_receiver(self.UpdateSensor,
Norman James9e6acf92015-09-08 07:00:04 -050022 dbus_interface = 'org.openbmc.SensorValue',
23 signal_name = 'Changed', path_keyword='path')
Norman James90baede2015-09-02 20:32:49 -050024 bus.add_signal_receiver(self.NormalThreshold,
Norman James5d78b4d2015-09-05 13:34:34 -050025 dbus_interface = 'org.openbmc.SensorThreshold',
Norman James90baede2015-09-02 20:32:49 -050026 signal_name = 'Normal', path_keyword='path')
27 bus.add_signal_receiver(self.WarningThreshold,
Norman James5d78b4d2015-09-05 13:34:34 -050028 dbus_interface = 'org.openbmc.SensorThreshold',
Norman James90baede2015-09-02 20:32:49 -050029 signal_name = 'Warning', path_keyword='path')
30 bus.add_signal_receiver(self.CriticalThreshold,
Norman James5d78b4d2015-09-05 13:34:34 -050031 dbus_interface = 'org.openbmc.SensorThreshold',
Norman James90baede2015-09-02 20:32:49 -050032 signal_name = 'Critical', path_keyword='path')
33
34 self.sensor_cache = {}
35
36 @dbus.service.method(DBUS_NAME,
Norman James5d78b4d2015-09-05 13:34:34 -050037 in_signature='s', out_signature='v')
Norman James90baede2015-09-02 20:32:49 -050038 def getSensor(self,path):
39 val = None
40 if (self.sensor_cache.has_key(path) == True):
41 val = self.sensor_cache[path]['value']
42 return val
43
Norman James9e6acf92015-09-08 07:00:04 -050044 def UpdateSensor(self,value,units,path = None):
45 self.initSensorEntry(path)
46 self.sensor_cache[path]['value'] = value
47 self.sensor_cache[path]['units'] = units
Norman James90baede2015-09-02 20:32:49 -050048
49 @dbus.service.signal(DBUS_NAME)
50 def CriticalThreshold(self, path = None):
51 print "Critical: "+path
Norman James5d78b4d2015-09-05 13:34:34 -050052 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050053 self.sensor_cache[path]['threshold'] = "CRITICAL"
54
Norman James90baede2015-09-02 20:32:49 -050055 @dbus.service.signal(DBUS_NAME)
56 def WarningThreshold(self, path = None):
Norman James5d78b4d2015-09-05 13:34:34 -050057 print "Warning:"+path
58 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050059 self.sensor_cache[path]['threshold'] = "WARNING"
60
Norman James90baede2015-09-02 20:32:49 -050061 @dbus.service.signal(DBUS_NAME)
62 def NormalThreshold(self, path = None):
63 print "Normal: "+path
Norman James5d78b4d2015-09-05 13:34:34 -050064 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050065 self.sensor_cache[path]['threshold'] = "NORMAL"
66
Norman James5d78b4d2015-09-05 13:34:34 -050067 def initSensorEntry(self,path):
68 if (self.sensor_cache.has_key(path) == False):
69 self.sensor_cache[path] = {}
Norman James90baede2015-09-02 20:32:49 -050070
Norman James5d78b4d2015-09-05 13:34:34 -050071
Norman James90baede2015-09-02 20:32:49 -050072if __name__ == '__main__':
73 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
74 bus = dbus.SessionBus()
75 name = dbus.service.BusName(DBUS_NAME,bus)
76 obj = SensorManager(bus,OBJ_NAME)
Norman James5d78b4d2015-09-05 13:34:34 -050077 mainloop = GObject.MainLoop()
Norman James90baede2015-09-02 20:32:49 -050078
79 print "Running Sensor Manager"
80 mainloop.run()
81