summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/test_func.py6
-rwxr-xr-xmodules/hardware.py100
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
+
+
+