blob: 2314a7f0839f8fafa8fdb46f86ba748345b92a0b [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 James5d78b4d2015-09-05 13:34:34 -050022 dbus_interface = 'org.freedesktop.DBus.Properties',
23 signal_name = 'PropertiesChanged', 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 James5d78b4d2015-09-05 13:34:34 -050044 def UpdateSensor(self,interface,prop_dict,props, path = None):
45 if (interface == "org.openbmc.SensorValue"):
46 self.initSensorEntry(path)
47 for p in prop_dict.keys():
48 self.sensor_cache[path][p] = prop_dict[p]
Norman James90baede2015-09-02 20:32:49 -050049
50 @dbus.service.signal(DBUS_NAME)
51 def CriticalThreshold(self, path = None):
52 print "Critical: "+path
Norman James5d78b4d2015-09-05 13:34:34 -050053 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050054 self.sensor_cache[path]['threshold'] = "CRITICAL"
55
Norman James90baede2015-09-02 20:32:49 -050056 @dbus.service.signal(DBUS_NAME)
57 def WarningThreshold(self, path = None):
Norman James5d78b4d2015-09-05 13:34:34 -050058 print "Warning:"+path
59 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050060 self.sensor_cache[path]['threshold'] = "WARNING"
61
Norman James90baede2015-09-02 20:32:49 -050062 @dbus.service.signal(DBUS_NAME)
63 def NormalThreshold(self, path = None):
64 print "Normal: "+path
Norman James5d78b4d2015-09-05 13:34:34 -050065 self.initSensorEntry(path)
Norman James90baede2015-09-02 20:32:49 -050066 self.sensor_cache[path]['threshold'] = "NORMAL"
67
Norman James5d78b4d2015-09-05 13:34:34 -050068 def initSensorEntry(self,path):
69 if (self.sensor_cache.has_key(path) == False):
70 self.sensor_cache[path] = {}
71 obj = bus.get_object(Openbmc.object_to_bus_name(path),path)
72 intf = dbus.Interface(obj,'org.freedesktop.DBus.Properties')
73 self.sensor_cache[path]['units'] = intf.Get('org.openbmc.SensorValue','units')
74
Norman James90baede2015-09-02 20:32:49 -050075
Norman James5d78b4d2015-09-05 13:34:34 -050076
Norman James90baede2015-09-02 20:32:49 -050077if __name__ == '__main__':
78 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
79 bus = dbus.SessionBus()
80 name = dbus.service.BusName(DBUS_NAME,bus)
81 obj = SensorManager(bus,OBJ_NAME)
Norman James5d78b4d2015-09-05 13:34:34 -050082 mainloop = GObject.MainLoop()
Norman James90baede2015-09-02 20:32:49 -050083
84 print "Running Sensor Manager"
85 mainloop.run()
86