Below is the file 'client/phonehome.py' from this revision. You can also download the file.
#!/usr/bin/python # # the phonehome client # # python program with plugins that run various tests # also sends information about the machine to server # client<->server communication happens over SOAP # import sys import os import config import traceback import ZSI from ZSI.client import Binding urgency = { 'info' : 0, 'notice' : 1, 'warning' : 2, 'alert' : 3, 'critical' : 4 } if __name__ == '__main__': # load each of the plugins results = [] sys.path.insert(0, config.plugin_path) # SOAP connection to send information back soap_password = open(os.path.join(config.install_path, 'etc', 'client.pass')).readline().strip() b = Binding(url=config.soap_address, host=config.soap_host, auth=(ZSI.AUTH.httpbasic, 'phonehome', soap_password), tracefile=open('trace.txt', 'w')) # run each plugin for plugin_name in config.plugins: def run_plugin(): mod = __import__(plugin_name, globals(), locals(), ['']) return mod.run() # each plugin should return a list of results # if there are no results it should return the empty list, [] # the format of results is (urgency, description) try: result = run_plugin() except: exc_info = sys.exc_info() exception = '\n'.join(traceback.format_exception(exc_info[0], exc_info[1], exc_info[2])) sys.stderr.write("Exception in plugin %s\n" % plugin_name + exception) result = [ (urgency['alert'], exception) ] result = [(plugin_name,) + t for t in result] results += result b.plugin_results(results) sys.exit(0) # not for now.. perhaps do this as a plugin instead # # unreachable.. # we also want to send over information about this machine def cpuinfo(): rv = [] if not os.access('/proc/cpuinfo', os.R_OK): return rv for line in open('/proc/cpuinfo'): fields = [t.strip() for t in line.split(':', 1)] if len(fields) != 2: continue key, value = fields if key == 'cpu MHz': rv.append(value) return rv cpus = cpuinfo() b.cpu_info(cpus) def memoryinfo(): if not os.access('/proc/meminfo', os.R_OK): return None return open('/proc/meminfo').readline().split(':', 1)[1].strip() mem = memoryinfo() b.memory_info(mem)