summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorAdrian Likins <alikins@redhat.com>2007-09-24 14:53:52 -0400
committerAdrian Likins <alikins@redhat.com>2007-09-24 14:53:52 -0400
commitbcbdab56d02a09ecda8a70acd6e5990073dd6b3e (patch)
treefc6e86d4199adb327a96540bcd1869714a5c0efc /server
parent412671ee48804867fc6707fa12409ae9365f5ea3 (diff)
downloadthird_party-func-bcbdab56d02a09ecda8a70acd6e5990073dd6b3e.tar.gz
third_party-func-bcbdab56d02a09ecda8a70acd6e5990073dd6b3e.tar.xz
third_party-func-bcbdab56d02a09ecda8a70acd6e5990073dd6b3e.zip
add a basic AuditLogger class
at the moment, it just logs ever call method and args to /var/log/func/audit.log server.py: some refactor in preperation for better logging (mostly changing stuff so I can get to the xmlrpcserver innards for things like client ip's)
Diffstat (limited to 'server')
-rwxr-xr-xserver/logger.py30
-rwxr-xr-xserver/server.py20
2 files changed, 39 insertions, 11 deletions
diff --git a/server/logger.py b/server/logger.py
index fa56a3a..1e60dc0 100755
--- a/server/logger.py
+++ b/server/logger.py
@@ -30,7 +30,7 @@ class Singleton(object):
# so make sure we do that mess only once
class Logger(Singleton):
- __no_handlers = True
+ _no_handlers = True
def __init__(self, logfilepath ="/var/log/func/func.log"):
@@ -39,18 +39,34 @@ class Logger(Singleton):
self.loglevel = logging._levelNames[self.config["log_level"]]
else:
self.loglevel = logging.INFO
- self.__setup_logging()
- if self.__no_handlers:
- self.__setup_handlers(logfilepath=logfilepath)
+ self._setup_logging()
+ if self._no_handlers:
+ self._setup_handlers(logfilepath=logfilepath)
- def __setup_logging(self):
+ def _setup_logging(self):
self.logger = logging.getLogger("svc")
- def __setup_handlers(self, logfilepath="/var/log/func/func.log"):
+ def _setup_handlers(self, logfilepath="/var/log/func/func.log"):
handler = logging.FileHandler(logfilepath, "a")
self.logger.setLevel(self.loglevel)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
self.logger.addHandler(handler)
- self.__no_handlers = False
+ self._no_handlers = False
+
+class AuditLogger(Logger):
+ def __init__(self, logfilepath = "/var/log/func/audit.log"):
+ self.loglevel = logging.INFO
+ self._setup_logging()
+ if self._no_handlers:
+ self._setup_handlers(logfilepath=logfilepath)
+
+ def log_call(self, method, params):
+ # square away a good parseable format at some point -akl
+ self.logger.info("%s called with %s" % (method, params))
+
+
+
+
+
diff --git a/server/server.py b/server/server.py
index bfdf5a9..73ef114 100755
--- a/server/server.py
+++ b/server/server.py
@@ -35,7 +35,7 @@ import utils
class XmlRpcInterface(object):
- def __init__(self, modules={}):
+ def __init__(self, modules={}, server=None):
"""
Constructor.
@@ -45,7 +45,11 @@ class XmlRpcInterface(object):
self.config = config_obj.get()
self.modules = modules
self.logger = logger.Logger().logger
+ self.audit_logger = logger.AuditLogger()
self.__setup_handlers()
+
+ # need a reference so we can log ip's, certs, etc
+ self.server = server
def __setup_handlers(self):
@@ -93,6 +97,10 @@ class XmlRpcInterface(object):
if method == 'trait_names' or method == '_getAttributeNames':
return self.handlers.keys()
+ # XXX FIXME - need to figure out how to dig into the server base classes
+ # so we can get client ip, and eventually cert id info -akl
+ self.audit_logger.log_call(method, params)
+
return self.get_dispatch_method(method)(*params)
# ======================================================================================
@@ -139,15 +147,20 @@ class FuncApiMethod:
# ======================================================================================
-def serve(websvc):
+def serve():
"""
Code for starting the XMLRPC service.
FIXME: make this HTTPS (see RRS code) and make accompanying Rails changes..
"""
+ modules = module_loader.load_modules()
+
server =FuncXMLRPCServer(('', 51234))
server.logRequests = 0 # don't print stuff to console
+
+ websvc = XmlRpcInterface(modules=modules,server=server)
+
server.register_instance(websvc)
server.serve_forever()
@@ -184,7 +197,7 @@ def main(argv):
print "Seriously.\n\n"
try:
- websvc = XmlRpcInterface(modules=modules)
+ serve()
except codes.FuncException, e:
print >> sys.stderr, 'error: %s' % e
sys.exit(1)
@@ -194,7 +207,6 @@ def main(argv):
else:
print "serving...\n"
- serve(websvc)
# ======================================================================================