lots of changes
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 7d0bf12..65d8683 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -2,6 +2,10 @@
import dbus
import Openbmc
+HOME_PATH = '/media/sf_vbox/openbmc/'
+BIN_PATH = HOME_PATH+'bin/'
+CACHE_PATH = HOME_PATH+'cache/'
+
CACHED_INTERFACES = {
'org.openbmc.Fru' : True
}
@@ -9,7 +13,8 @@
SYSTEM_CONFIG = {}
SYSTEM_CONFIG['org.openbmc.managers.Sensors'] = {
- 'exe_name' : 'bin/sensor_manager.py',
+ 'start_process' : True,
+ 'process_name' : 'sensor_manager.py',
'heartbeat' : 'no',
'rest_name' : 'sensors',
'instances' : [
@@ -20,21 +25,9 @@
]
}
-#SYSTEM_CONFIG['org.openbmc.managers.Frus'] = {
-# 'exe_name' : 'bin/fru_manager.py',
-# 'heartbeat' : 'no',
-# 'rest_name' : 'frus',
-# 'instances' : [
-# {
-# 'name' : 'Barreleye',
-# 'user_label': 'Fru Manager',
-# }
-# ]
-# }
-
-
SYSTEM_CONFIG['org.openbmc.loggers.EventLogger'] = {
- 'exe_name' : 'bin/eventlogger.py',
+ 'start_process' : True,
+ 'process_name' : 'eventlogger.py',
'heartbeat' : 'no',
'rest_name' : 'events',
'instances' : [
@@ -46,7 +39,8 @@
}
SYSTEM_CONFIG['org.openbmc.managers.IpmiTranslator'] = {
- 'exe_name' : 'bin/ipmi_translator.py',
+ 'start_process' : True,
+ 'process_name' : 'ipmi_translator.py',
'heartbeat' : 'no',
'instances' : [
{
@@ -58,7 +52,8 @@
SYSTEM_CONFIG['org.openbmc.control.Power'] = {
- 'exe_name' : 'bin/power_control.exe',
+ 'start_process' : True,
+ 'process_name' : 'power_control.exe',
'heartbeat' : 'yes',
'instances' : [
{
@@ -69,9 +64,10 @@
}
SYSTEM_CONFIG['org.openbmc.sensors.Temperature.Ambient'] = {
- 'exe_name' : 'bin/sensor_ambient.exe',
+ 'start_process' : True,
+ 'process_name' : 'sensor_ambient.exe',
'heartbeat' : 'yes',
- 'init_methods' : ['org.openbmc.SensorInteger'],
+ 'init_methods' : ['org.openbmc.SensorValue'],
'poll_interval': 5000,
'instances' : [
{
@@ -79,7 +75,7 @@
'user_label': 'Ambient Temperature 1',
'sensor_id' : 41,
'properties' : {
- 'org.openbmc.SensorIntegerThreshold' : {
+ 'org.openbmc.SensorThreshold' : {
'lower_critical': 5,
'lower_warning' : 10,
'upper_warning' : 15,
@@ -95,7 +91,7 @@
'name' : 'AmbientTemperature2',
'user_label': 'Ambient Temperature 2',
'properties' : {
- 'org.openbmc.SensorIntegerThreshold' : {
+ 'org.openbmc.SensorThreshold' : {
'lower_critical': 5,
'lower_warning' : 10,
'upper_warning' : 15,
@@ -110,7 +106,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.buttons.ButtonPower'] = {
- 'exe_name' : 'bin/button_power.exe',
+ 'start_process' : True,
+ 'process_name' : 'button_power.exe',
'heartbeat' : 'no',
'instances' : [
{
@@ -120,7 +117,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.sensors.HostStatus'] = {
- 'exe_name' : 'bin/sensor_host_status.exe',
+ 'start_process' : True,
+ 'process_name' : 'sensor_host_status.exe',
'heartbeat' : "no",
'instances' : [
{
@@ -131,7 +129,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.leds.ChassisIdentify'] = {
- 'exe_name' : 'bin/chassis_identify.exe',
+ 'start_process' : True,
+ 'process_name' : 'chassis_identify.exe',
'heartbeat' : 'no',
'instances' : [
{
@@ -141,7 +140,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.flash.BIOS'] = {
- 'exe_name' : 'bin/flash_bios.exe',
+ 'start_process' : True,
+ 'process_name' : 'flash_bios.exe',
'heartbeat' : 'no',
'rest_name' : 'flash',
'instances' : [
@@ -152,7 +152,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.control.Host'] = {
- 'exe_name' : 'bin/control_host.exe',
+ 'start_process' : True,
+ 'process_name' : 'control_host.exe',
'heartbeat' : 'no',
'instances' : [
{
@@ -162,7 +163,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.control.Chassis'] = {
- 'exe_name' : 'bin/chassis_control.py',
+ 'start_process' : True,
+ 'process_name' : 'chassis_control.py',
'heartbeat' : 'no',
'rest_name' : 'chassis',
'instances' : [
@@ -173,7 +175,8 @@
]
}
SYSTEM_CONFIG['org.openbmc.frus.Fan'] = {
- 'exe_name' : 'bin/fan.exe',
+ 'start_process' : True,
+ 'process_name' : 'fan.exe',
'heartbeat' : 'no',
'instances' : [
{
@@ -253,7 +256,8 @@
}
SYSTEM_CONFIG['org.openbmc.frus.Board'] = {
- 'exe_name' : 'bin/fru_board.exe',
+ 'start_process' : True,
+ 'process_name' : 'fru_board.exe',
'init_methods' : ['org.openbmc.Fru'],
'heartbeat' : 'no',
'instances' : [
@@ -277,7 +281,8 @@
}
SYSTEM_CONFIG['org.openbmc.frus.Fru'] = {
- 'exe_name' : 'bin/fru_generic.exe',
+ 'start_process' : True,
+ 'process_name' : 'fru_generic.exe',
'heartbeat' : 'no',
'instances' : [
{
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index ffa38dd..4b10739 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -18,11 +18,22 @@
['NONE','CPU','DIMM','BACKPLANE','RISER_CARD','FAN']
}
+
+def object_to_bus_name(obj):
+ parts = obj.split('/')
+ parts.pop(0)
+ parts.pop()
+ return ".".join(parts)
+
+def bus_to_object_name(bus_name):
+ return "/"+bus_name.replace('.','/')
+
+
class DbusProperty:
def __init__(self,name,value):
self.dbusBaseType = {
'dbus.Byte' : 'int',
- 'dbus.Float' : 'float',
+ 'dbus.Double' : 'float',
'dbus.Int32' : 'int',
'dbus.UInt32' : 'long',
'dbus.String' : 'str',
@@ -30,23 +41,28 @@
}
self.name = str(name)
self.dbusType = str(type(value)).split("'")[1]
+ self.variant_level = value.variant_level
self.value = None
+
try:
self.value = eval(self.dbusBaseType[self.dbusType]+"(value)")
except:
raise Exception("Unknown dbus type: "+self.dbusType)
- def changeValue(self,value):
+ def setValue(self,value):
try:
self.value = eval(self.dbusBaseType[self.dbusType]+"(value)")
except:
raise Exception("Unknown dbus type: "+self.dbusType)
+ def setVariant(self,variant_level):
+ self.variant_level = variant_level
def getName(self):
return self.name
+
def getValue(self):
- e = self.dbusType+"(self.value)"
+ e = self.dbusType+"(self.value, variant_level="+str(self.variant_level)+")"
return eval(e)
#def __getstate__(self):
diff --git a/bin/PropertyManager.py b/bin/PropertyManager.py
index 312c688..ff0e200 100644
--- a/bin/PropertyManager.py
+++ b/bin/PropertyManager.py
@@ -4,81 +4,84 @@
import cPickle
import os
import Openbmc
-import gobject
import dbus
import dbus.service
import dbus.mainloop.glib
+from gi.repository import Gio, GLib, GObject
-SAVE_PATH = 'data/'
-
-def loadProperties(bus,bus_name,obj_path,properties):
- ## Load properties from system config
- obj = bus.get_object(bus_name,obj_path)
- dbus_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
- for prop_interface in properties.keys():
- print "Intf: "+prop_interface
- for prop in properties[prop_interface]:
- tmp_val = dbus_properties.Get(prop_interface,prop)
- dbus_prop = Openbmc.DbusProperty(prop,tmp_val)
- value = properties[prop_interface][prop]
- dbus_prop.changeValue(value)
- dbus_properties.Set(prop_interface,prop,dbus_prop.getValue())
-
- ## if save file exists, overlay properties from file
- directory = obj_path.replace('/','.')
- directory = SAVE_PATH+directory.lstrip('.')
- filename = directory+"/"+prop_interface
- if (os.path.isfile(filename) == False):
- ## not an error
- print "No cache available for: "+filename
- else:
- try:
- print "Loading from disk: "+obj_path
- output = open(filename, 'rb')
- dbus_props = cPickle.load(output)
- output.close()
- save_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
- for dbus_prop in dbus_props:
- save_properties.Set(prop_interface,dbus_prop.getName(),dbus_prop.getValue())
-
- except Exception as e:
- ## TODO: Error handling
- print "Error loadFru: "+str(e)
-
- return None
-
-def saveProperties(bus,bus_name,obj_path,interface_name,cache,properties):
- obj = bus.get_object(bus_name,obj_path)
- prop_intf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
-
- for prop in properties.keys():
- print "Saving properties: "+prop
- prop_intf.Set(interface_name,prop,properties[prop])
-
-
- dbus_props = []
- if (cache):
- print "Caching: "+obj_path
- all_properties = prop_intf.GetAll(interface_name)
- for prop in all_properties.keys():
- dbus_prop = Openbmc.DbusProperty(prop,all_properties[prop])
- dbus_props.append(dbus_prop)
-
- try:
+class PropertyManager():
+ def __init__(self,bus,save_path):
+ self.bus = bus
+ self.save_path = save_path
+
+ def loadProperties(self,bus_name,obj_path,properties):
+ ## Load properties from system config
+ obj = self.bus.get_object(bus_name,obj_path)
+ dbus_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+ for prop_interface in properties.keys():
+ for prop in properties[prop_interface]:
+ tmp_val = dbus_properties.Get(prop_interface,prop)
+ dbus_prop = Openbmc.DbusProperty(prop,tmp_val)
+ value = properties[prop_interface][prop]
+ dbus_prop.setValue(value)
+ dbus_properties.Set(prop_interface,prop,dbus_prop.getValue())
+
+ ## if save file exists, overlay properties from file
directory = obj_path.replace('/','.')
- directory = SAVE_PATH+directory.lstrip('.')
- filename = directory+"/"+interface_name
- if not os.path.exists(directory):
- os.makedirs(directory)
-
- output = open(filename, 'wb')
- cPickle.dump(dbus_props,output)
- output.close()
- except Exception as e:
- ## TODO: error handling
- print str(e)
+ directory = self.save_path+directory.lstrip('.')
+ filename = directory+"/"+prop_interface
+ if (os.path.isfile(filename) == False):
+ ## not an error
+ print "No cache available for: "+filename
+ else:
+ try:
+ print "Loading from disk: "+obj_path
+ output = open(filename, 'rb')
+ dbus_props = cPickle.load(output)
+ output.close()
+ save_properties = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+ for dbus_prop in dbus_props:
+ save_properties.Set(prop_interface,dbus_prop.getName(),dbus_prop.getValue())
- return None
+ except Exception as e:
+ ## TODO: Error handling
+ print "Error loadFru: "+str(e)
+
+ return None
+
+ def saveProperties(self,bus_name,obj_path,interface_name,cache,properties):
+ obj = self.bus.get_object(bus_name,obj_path)
+ prop_intf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
+
+ for prop in properties.keys():
+ print "Saving properties: "+prop
+ ## convert property to correct dbus type
+ print type(properties[prop])
+ prop_intf.Set(interface_name,prop,properties[prop])
+
+ dbus_props = []
+ if (cache):
+ print "Caching: "+obj_path
+ all_properties = prop_intf.GetAll(interface_name)
+ for prop in all_properties.keys():
+ dbus_prop = Openbmc.DbusProperty(prop,all_properties[prop])
+ dbus_props.append(dbus_prop)
+
+ try:
+ directory = obj_path.replace('/','.')
+ directory = self.save_path+directory.lstrip('.')
+ filename = directory+"/"+interface_name
+ if not os.path.exists(directory):
+ os.makedirs(directory)
+
+ output = open(filename, 'wb')
+ cPickle.dump(dbus_props,output)
+ output.close()
+ except Exception as e:
+ ## TODO: error handling
+ print str(e)
+
+ return None
diff --git a/bin/chassis_control.py b/bin/chassis_control.py
index ccea354..15a8feb 100644
--- a/bin/chassis_control.py
+++ b/bin/chassis_control.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
import sys
-import gobject
+from gi.repository import GObject
import dbus
import dbus.service
import dbus.mainloop.glib
@@ -143,7 +143,7 @@
bus = dbus.SessionBus()
name = dbus.service.BusName(DBUS_NAME, bus)
obj = ChassisControlObject(bus, OBJ_NAME)
- mainloop = gobject.MainLoop()
+ mainloop = GObject.MainLoop()
print "Running ChassisControlService"
mainloop.run()
diff --git a/bin/eventlogger.py b/bin/eventlogger.py
index 113bd03..3701d28 100644
--- a/bin/eventlogger.py
+++ b/bin/eventlogger.py
@@ -1,12 +1,13 @@
#!/usr/bin/env python
import sys
-import gobject
+import syslog
+import json
+from gi.repository import GObject
import dbus
import dbus.service
import dbus.mainloop.glib
-import syslog
-import json
+
DBUS_NAME = 'org.openbmc.loggers.EventLogger'
OBJ_NAME = '/org/openbmc/loggers/EventLogger/'+sys.argv[1]
@@ -30,7 +31,7 @@
bus = dbus.SessionBus()
name = dbus.service.BusName(DBUS_NAME, bus)
obj = EventLogger(bus, OBJ_NAME)
- mainloop = gobject.MainLoop()
+ mainloop = GObject.MainLoop()
print "Running EventLogger"
mainloop.run()
diff --git a/bin/ipmi_bt.py b/bin/ipmi_bt.py
index 8e4566e..375eb2a 100644
--- a/bin/ipmi_bt.py
+++ b/bin/ipmi_bt.py
@@ -2,11 +2,10 @@
import sys
import subprocess
-import gobject
import dbus
+from gi.repository import GObject
import dbus.service
import dbus.mainloop.glib
-import xml.etree.ElementTree as ET
if (len(sys.argv) < 2):
print "Usage: ipmi_bt.py [system name]"
@@ -62,7 +61,7 @@
bus = dbus.SessionBus()
name = dbus.service.BusName(DBUS_NAME,bus)
obj = IpmiBt(bus,OBJ_NAME)
- mainloop = gobject.MainLoop()
+ mainloop = GObject.MainLoop()
if (cmd == 'updatefru'):
obj.emitUpdateFru(ipmi_id,data)
diff --git a/bin/ipmi_translator.py b/bin/ipmi_translator.py
index ec56057..f7a7aab 100644
--- a/bin/ipmi_translator.py
+++ b/bin/ipmi_translator.py
@@ -2,11 +2,11 @@
import sys
import subprocess
-import gobject
+from gi.repository import GObject
+
import dbus
import dbus.service
import dbus.mainloop.glib
-import xml.etree.ElementTree as ET
import PropertyManager
if (len(sys.argv) < 2):
@@ -28,6 +28,7 @@
class IpmiTranslator(dbus.service.Object):
def __init__(self,bus,name):
dbus.service.Object.__init__(self,bus,name)
+ self.property_manager = PropertyManager.PropertyManager(bus,System.CACHE_PATH)
bus.add_signal_receiver(self.UpdateFruHandler,
dbus_interface = 'org.openbmc.control.IpmiBt',
signal_name = "UpdateFru")
@@ -59,7 +60,7 @@
## save fru object to object and disk
interface_name = 'org.openbmc.Fru'
cache = System.CACHED_INTERFACES.has_key(interface_name)
- PropertyManager.saveProperties(bus,bus_name,obj_path,interface_name,cache,data)
+ self.property_manager.saveProperties(bus_name,obj_path,interface_name,cache,data)
else:
## TODO: error handling
pass
@@ -68,21 +69,25 @@
if (ID_LOOKUP['SENSOR'].has_key(sensor_id)):
obj_path = ID_LOOKUP['SENSOR'][sensor_id]
bus_name = ID_LOOKUP['BUS_NAME'][sensor_id]
- data = { 'value' : value }
+
+ ## change to variant data type
+ ## comes in off dbus from ipmi_bt as a basic data type
+ dvalue = Openbmc.DbusProperty('value',value)
+ dvalue.setVariant(2)
+ data = { 'value' : dvalue.getValue() }
## save sensor value
## TODO: need to accomodate any sensor interface
- interface_name = 'org.openbmc.SensorInteger'
- #cache = System.CACHED_INTERFACES.has_key(interface_name)
+ interface_name = 'org.openbmc.SensorValue'
+ cache = System.CACHED_INTERFACES.has_key(interface_name)
obj = bus.get_object(bus_name,obj_path)
intf = dbus.Interface(obj, interface_name)
- #intf.setValue(value)
- PropertyManager.saveProperties(bus,bus_name,obj_path,interface_name,cache,data)
+ self.property_manager.saveProperties(bus_name,obj_path,interface_name,cache,data)
else:
## TODO: error handling
pass
@dbus.service.method(DBUS_NAME,
- in_signature='i', out_signature='i')
+ in_signature='i', out_signature='v')
def getSensor(self,sensor_id):
val = 0
if (ID_LOOKUP['SENSOR'].has_key(sensor_id)):
@@ -104,7 +109,7 @@
bus = dbus.SessionBus()
name = dbus.service.BusName(DBUS_NAME,bus)
obj = IpmiTranslator(bus,OBJ_NAME)
- mainloop = gobject.MainLoop()
+ mainloop = GObject.MainLoop()
print "Running IpmiTranslator"
mainloop.run()
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 33feebf..2314a7f 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
import sys
-import gobject
+from gi.repository import GObject
import dbus
import dbus.service
import dbus.mainloop.glib
@@ -9,7 +9,7 @@
if (len(sys.argv) < 2):
print "Usage: sensor_manager.py [system name]"
exit(1)
-
+System = __import__(sys.argv[1])
import Openbmc
DBUS_NAME = 'org.openbmc.managers.Sensors'
@@ -19,66 +19,67 @@
def __init__(self,bus,name):
dbus.service.Object.__init__(self,bus,name)
bus.add_signal_receiver(self.UpdateSensor,
- dbus_interface = 'org.openbmc.SensorInteger',
- signal_name = 'Changed', path_keyword='path')
+ dbus_interface = 'org.freedesktop.DBus.Properties',
+ signal_name = 'PropertiesChanged', path_keyword='path')
bus.add_signal_receiver(self.NormalThreshold,
- dbus_interface = 'org.openbmc.SensorIntegerThreshold',
+ dbus_interface = 'org.openbmc.SensorThreshold',
signal_name = 'Normal', path_keyword='path')
bus.add_signal_receiver(self.WarningThreshold,
- dbus_interface = 'org.openbmc.SensorIntegerThreshold',
+ dbus_interface = 'org.openbmc.SensorThreshold',
signal_name = 'Warning', path_keyword='path')
bus.add_signal_receiver(self.CriticalThreshold,
- dbus_interface = 'org.openbmc.SensorIntegerThreshold',
+ dbus_interface = 'org.openbmc.SensorThreshold',
signal_name = 'Critical', path_keyword='path')
self.sensor_cache = {}
@dbus.service.method(DBUS_NAME,
- in_signature='s', out_signature='i')
+ in_signature='s', out_signature='v')
def getSensor(self,path):
val = None
if (self.sensor_cache.has_key(path) == True):
val = self.sensor_cache[path]['value']
return val
- def UpdateSensor(self,value, units, path = None):
- if (self.sensor_cache.has_key(path) == False):
- self.sensor_cache[path] = {}
- self.sensor_cache[path]['value'] = value
- self.sensor_cache[path]['units'] = units
+ def UpdateSensor(self,interface,prop_dict,props, path = None):
+ if (interface == "org.openbmc.SensorValue"):
+ self.initSensorEntry(path)
+ for p in prop_dict.keys():
+ self.sensor_cache[path][p] = prop_dict[p]
@dbus.service.signal(DBUS_NAME)
def CriticalThreshold(self, path = None):
print "Critical: "+path
- if (self.sensor_cache.has_key(path) == False):
- self.sensor_cache[path] = {}
+ self.initSensorEntry(path)
self.sensor_cache[path]['threshold'] = "CRITICAL"
-
@dbus.service.signal(DBUS_NAME)
def WarningThreshold(self, path = None):
- print "Warning: "+path
- if (self.sensor_cache.has_key(path) == False):
- self.sensor_cache[path] = {}
+ print "Warning:"+path
+ self.initSensorEntry(path)
self.sensor_cache[path]['threshold'] = "WARNING"
-
@dbus.service.signal(DBUS_NAME)
def NormalThreshold(self, path = None):
print "Normal: "+path
- if (self.sensor_cache.has_key(path) == False):
- self.sensor_cache[path] = {}
+ self.initSensorEntry(path)
self.sensor_cache[path]['threshold'] = "NORMAL"
+ def initSensorEntry(self,path):
+ if (self.sensor_cache.has_key(path) == False):
+ self.sensor_cache[path] = {}
+ obj = bus.get_object(Openbmc.object_to_bus_name(path),path)
+ intf = dbus.Interface(obj,'org.freedesktop.DBus.Properties')
+ self.sensor_cache[path]['units'] = intf.Get('org.openbmc.SensorValue','units')
+
-
-
+
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
name = dbus.service.BusName(DBUS_NAME,bus)
obj = SensorManager(bus,OBJ_NAME)
- mainloop = gobject.MainLoop()
+ mainloop = GObject.MainLoop()
print "Running Sensor Manager"
mainloop.run()
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 3275dc9..e96e547 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -2,11 +2,11 @@
import sys
import subprocess
-import gobject
+from gi.repository import GObject
+
import dbus
import dbus.service
import dbus.mainloop.glib
-#import xml.etree.ElementTree as ET
import os
import PropertyManager
@@ -25,20 +25,12 @@
class SystemManager(dbus.service.Object):
def __init__(self,bus,name):
dbus.service.Object.__init__(self,bus,name)
- #self.sensor_manager_running = False
- #self.fru_manager_running = False
- #self.inited = False
+ self.property_manager = PropertyManager.PropertyManager(bus,System.CACHE_PATH)
## Signal handlers
bus.add_signal_receiver(self.NewBusHandler,
dbus_interface = 'org.freedesktop.DBus',
signal_name = "NameOwnerChanged")
- #bus.add_signal_receiver(self.FruRunningHandler,
- # dbus_interface = 'org.openbmc.managers.Frus'
- # signal_name = "OpenBmcRunning")
- #bus.add_signal_receiver(self.SensorRunningHandler,
- # dbus_interface = 'org.openbmc.managers.Sensors'
- # signal_name = "OpenBmcRunning")
bus.add_signal_receiver(self.CacheMeHandler,
signal_name = 'CacheMe', path_keyword='path',interface_keyword='interface')
@@ -52,56 +44,58 @@
pass
bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
- gobject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
+ GObject.timeout_add(HEARTBEAT_CHECK_INTERVAL, self.heartbeat_check)
def CacheMeHandler(self,busname,path=None,interface=None):
#interface_name = 'org.openbmc.Fru'
print "CacheME: "+busname+","+path+","+interface
data = {}
cache = System.CACHED_INTERFACES.has_key(interface)
- PropertyManager.saveProperties(bus,busname,path,interface,cache,data)
+ self.property_manager.saveProperties(busname,path,interface,cache,data)
def start_process(self,bus_name):
- exe_name = System.SYSTEM_CONFIG[bus_name]['exe_name']
- cmdline = [ ]
- cmdline.append(exe_name)
- for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
- cmdline.append(instance['name'])
- try:
- print "Starting process: "+" ".join(cmdline)
- System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline);
- except Exception as e:
- ## TODO: error
- print "Error starting process: "+" ".join(cmdline)
+ if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
+ process_name = System.BIN_PATH+System.SYSTEM_CONFIG[bus_name]['process_name']
+ cmdline = [ ]
+ cmdline.append(process_name)
+ for instance in System.SYSTEM_CONFIG[bus_name]['instances']:
+ cmdline.append(instance['name'])
+ try:
+ print "Starting process: "+" ".join(cmdline)
+ System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline);
+ except Exception as e:
+ ## TODO: error
+ print "Error starting process: "+" ".join(cmdline)
def heartbeat_check(self):
print "heartbeat check"
for bus_name in System.SYSTEM_CONFIG.keys():
- ## even if process doesn't request heartbeat check,
- ## make sure process is still alive
- p = System.SYSTEM_CONFIG[bus_name]['popen']
- p.poll()
- if (p.returncode != None):
- print "Process for "+bus_name+" appears to be dead"
- self.start_process(bus_name)
-
- ## process is alive, now check if heartbeat received
- ## during previous interval
- elif (System.SYSTEM_CONFIG[bus_name]['heartbeat'] == 'yes'):
- if (System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] == 0):
- print "Heartbeat error: "+bus_name
- p = System.SYSTEM_CONFIG[bus_name]['popen']
- ## TODO: error checking
- p.poll()
- if (p.returncode == None):
- print "Process must be hung, so killing"
- p.kill()
+ if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
+ ## even if process doesn't request heartbeat check,
+ ## make sure process is still alive
+ p = System.SYSTEM_CONFIG[bus_name]['popen']
+ p.poll()
+ if (p.returncode != None):
+ print "Process for "+bus_name+" appears to be dead"
+ self.start_process(bus_name)
+
+ ## process is alive, now check if heartbeat received
+ ## during previous interval
+ elif (System.SYSTEM_CONFIG[bus_name]['heartbeat'] == 'yes'):
+ if (System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] == 0):
+ print "Heartbeat error: "+bus_name
+ p = System.SYSTEM_CONFIG[bus_name]['popen']
+ ## TODO: error checking
+ p.poll()
+ if (p.returncode == None):
+ print "Process must be hung, so killing"
+ p.kill()
- self.start_process(bus_name)
- else:
- System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
- print "Heartbeat ok: "+bus_name
+ self.start_process(bus_name)
+ else:
+ System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
+ print "Heartbeat ok: "+bus_name
return True
@@ -121,7 +115,7 @@
obj_path = obj_root+'/'+instance['name']
obj_paths.append(obj_path)
if (instance.has_key('properties')):
- PropertyManager.loadProperties(bus,bus_name,obj_path, instance['properties'])
+ self.property_manager.loadProperties(bus_name,obj_path, instance['properties'])
## After object properties are setup, call init method if requested
if (System.SYSTEM_CONFIG[bus_name].has_key('init_methods')):
@@ -154,7 +148,7 @@
bus = dbus.SessionBus()
name = dbus.service.BusName(DBUS_NAME,bus)
obj = SystemManager(bus,OBJ_NAME)
- mainloop = gobject.MainLoop()
+ mainloop = GObject.MainLoop()
print "Running SystemManager"
mainloop.run()