diff options
-rw-r--r-- | client/test_func.py | 6 | ||||
-rwxr-xr-x | modules/hardware.py | 100 |
2 files changed, 105 insertions, 1 deletions
diff --git a/client/test_func.py b/client/test_func.py index 38ae977..57cf5d7 100644 --- a/client/test_func.py +++ b/client/test_func.py @@ -5,8 +5,9 @@ import xmlrpclib -TEST_VIRT = True +TEST_VIRT = False TEST_SERVICES = True +TEST_HARDWARE = True # get a connecton (to be replaced by client lib logic) s = xmlrpclib.ServerProxy("http://127.0.0.1:51234") @@ -18,6 +19,9 @@ print s.test.add(1, 2) if TEST_SERVICES: print s.service.restart("httpd") +if TEST_HARDWARE: + print s.hardware.info() + # this is so I can remember how the virt module works if TEST_VIRT: diff --git a/modules/hardware.py b/modules/hardware.py new file mode 100755 index 0000000..2c41b9f --- /dev/null +++ b/modules/hardware.py @@ -0,0 +1,100 @@ +#!/usr/bin/python + +## +## Hardware profiler plugin +## requires the "smolt" client package be installed +## +## Copyright 2007, Red Hat, Inc +## Michael DeHaan <mdehaan@redhat.com> +## +## This software may be freely redistributed under the terms of the GNU +## general public license. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +## + + +# other modules +import sys +# hack: smolt is not installed in site-packages +sys.path.append("/usr/share/smolt/client") +import smolt + +# our modules +from codes import * +from modules import func_module + +# ================================= + +class HardwareModule(func_module.FuncModule): + def __init__(self): + self.methods = { + "info": self.info + } + func_module.FuncModule.__init__(self) + + def info(self,with_devices=True): + """ + Returns a struct of hardware information. By default, this pulls down + all of the devices. If you don't care about them, set with_devices to + False. + """ + return hw_info(with_devices) + +# ================================= + +def hw_info(with_devices=True): + + hardware = smolt.Hardware() + host = hardware.host + + # NOTE: casting is needed because these are DBusStrings, not real strings + data = { + 'os' : str(host.os), + 'defaultRunlevel' : str(host.defaultRunlevel), + 'bogomips' : str(host.bogomips), + 'cpuVendor' : str(host.cpuVendor), + 'cpuModel' : str(host.cpuModel), + 'numCpus' : str(host.numCpus), + 'cpuSpeed' : str(host.cpuSpeed), + 'systemMemory' : str(host.systemMemory), + 'systemSwap' : str(host.systemSwap), + 'kernelVersion' : str(host.kernelVersion), + 'language' : str(host.language), + 'platform' : str(host.platform), + 'systemVendor' : str(host.systemVendor), + 'systemModel' : str(host.systemModel), + 'formfactor' : str(host.formfactor), + 'selinux_enabled' : str(host.selinux_enabled), + 'selinux_enforce' : str(host.selinux_enforce) + } + + # if no hardware info requested, just return the above bits + if not with_devices: + return data + + collection = data["devices"] = [] + + for item in hardware.deviceIter(): + + (VendorID,DeviceID,SubsysVendorID,SubsysDeviceID,Bus,Driver,Type,Description) = item + + collection.append({ + "VendorID" : str(VendorID), + "DeviceID" : str(DeviceID), + "SubsysVendorID" : str(SubsysVendorID), + "Bus" : str(Bus), + "Driver" : str(Driver), + "Type" : str(Type), + "Description" : str(Description) + }) + + return data + +methods = HardwareModule() +register_rpc = methods.register_rpc + + + |