Skip to content

Instantly share code, notes, and snippets.

@amitsaha
Created February 17, 2013 00:30
Show Gist options
  • Save amitsaha/4969431 to your computer and use it in GitHub Desktop.
Save amitsaha/4969431 to your computer and use it in GitHub Desktop.
Simple usage of python-daemon
import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:9900')
print s.uptime()
users = s.users()
for user in users:
for login in users[user]:
print user, login
print s.distribution()
#!/usr/bin/env python
"""
XML-RPC Server to act as a system monitoring agent to report system statistics
"""
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
import os
import platform
import subprocess
import sys
from daemon import runner
# functions that we want to "publish"
def distro():
return platform.dist()
def uptime():
uptime_seconds = open('/proc/uptime').read()
return float(uptime_seconds.split()[0])/3600.0
def users():
users = {}
for line in subprocess.check_output(['w','-hs']).split('\n')[:-1]:
user = line.split()[0]
user_data = {}
user_data['host'] = line.split()[1]
user_data['duration'] = line.split()[2]
user_data['process'] = line.split()[3]
if user in users.keys():
users[user].append(user_data)
else:
users[user] = [user_data]
return users
def processes():
pids = []
for subdir in os.listdir('/proc'):
if subdir.isdigit():
pids.append(subdir)
return len(pids)
# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
# Class to wrap around the XML-RPC server
class Server():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/tmp/sysmon_daemon.log'
self.stderr_path = '/tmp/sysmon_daemon.log'
self.pidfile_path = '/tmp/sysmond.pid'
self.pidfile_timeout = 5
def run(self):
self.server = SimpleXMLRPCServer(("localhost", 9900),
requestHandler=RequestHandler)
self.server.register_introspection_functions()
# Register functions
self.server.register_function(distro,'distribution')
self.server.register_function(uptime)
self.server.register_function(users)
self.server.register_function(processes)
self.server.serve_forever()
if __name__=='__main__':
daemon = runner.DaemonRunner(Server())
# Set the owning UID and GID the daemon
daemon.daemon_context.uid = 1001
daemon.daemon_context.gid = 1001
# perfom the action - start, stop, restart
daemon.do_action()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment