-
-
Save kenmoini/3e64e8feafd732f6ceb71f963289b013 to your computer and use it in GitHub Desktop.
Simple usage of python-daemon
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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