X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethod.py;h=5e7d09a12197616d79ceddd784d96913a5fc62ed;hb=refs%2Fheads%2Fplanetlab-4_0-branch;hp=976dfe1776112ce3ca28a9d98c72f36d85c5c637;hpb=b0ac4d1dbd0c54de97dfd695258811cfb16cd3aa;p=plcapi.git diff --git a/PLC/Method.py b/PLC/Method.py index 976dfe17..5e7d09a1 100644 --- a/PLC/Method.py +++ b/PLC/Method.py @@ -4,7 +4,7 @@ # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id: Method.py,v 1.19 2006/11/29 17:57:27 tmack Exp $ +# $Id: Method.py 5574 2007-10-25 20:33:17Z thierry $ # import xmlrpclib @@ -92,34 +92,49 @@ class Method: result = self.call(*args, **kwds) runtime = time.time() - start - if self.api.config.PLC_API_DEBUG: - self.log(0, runtime, *args) + if self.api.config.PLC_API_DEBUG or hasattr(self, 'message'): + self.log(None, runtime, *args) return result except PLCFault, fault: - # Prepend method name to expected faults - fault.faultString = self.name + ": " + fault.faultString + + caller = "" + if isinstance(self.caller, Person): + caller = 'person_id %s' % self.caller['person_id'] + elif isinstance(self.caller, Node): + caller = 'node_id %s' % self.caller['node_id'] + + # Prepend caller and method name to expected faults + fault.faultString = caller + ": " + self.name + ": " + fault.faultString runtime = time.time() - start - self.log(fault.faultCode, runtime, *args) + self.log(fault, runtime, *args) raise fault - def log(self, fault_code, runtime, *args): + def log(self, fault, runtime, *args): """ Log the transaction """ # Do not log system or Get calls - if self.name.startswith('system') or self.name.startswith('Get'): - return False + #if self.name.startswith('system') or self.name.startswith('Get'): + # return False # Create a new event event = Event(self.api) - event['fault_code'] = fault_code + event['fault_code'] = 0 + if fault: + event['fault_code'] = fault.faultCode event['runtime'] = runtime # Redact passwords and sessions if args and isinstance(args[0], dict): + # what type of auth this is + if args[0].has_key('AuthMethod'): + auth_methods = ['session', 'password', 'capability', 'gpg', 'hmac','anonymous'] + auth_method = args[0]['AuthMethod'] + if auth_method in auth_methods: + event['auth_type'] = auth_method for password in 'AuthString', 'session': if args[0].has_key(password): auth = args[0].copy() @@ -139,17 +154,20 @@ class Method: event.sync(commit = False) - # XXX object_ids is currently defined as a class variable - if hasattr(self, 'object_ids'): - for object_id in self.object_ids: - event.add_object(object_id, commit = False) + if hasattr(self, 'event_objects') and isinstance(self.event_objects, dict): + for key in self.event_objects.keys(): + for object_id in self.event_objects[key]: + event.add_object(key, object_id, commit = False) + - # Get message for this event - if hasattr(self, 'message'): - event['message'] = self.message + # Set the message for this event + if fault: + event['message'] = fault.faultString + elif hasattr(self, 'message'): + event['message'] = self.message # Commit - event.sync(commit = True) + event.sync() def help(self, indent = " "): """