From 4797cddbd0ac922d03943d63ef9ff131e67c71e4 Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Fri, 19 Aug 2011 16:20:01 -0400 Subject: Log each command in a batch separately. This also fixes command logging in general, it wasn't working in most cases as a regression in ticket 1322. https://fedorahosted.org/freeipa/ticket/1598 --- ipalib/plugins/batch.py | 26 +++++++++++++++++++++++++- ipaserver/rpcserver.py | 7 ++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/ipalib/plugins/batch.py b/ipalib/plugins/batch.py index 973526a62..b95e5d028 100644 --- a/ipalib/plugins/batch.py +++ b/ipalib/plugins/batch.py @@ -51,6 +51,7 @@ from ipalib import Str, List from ipalib.output import Output from ipalib import output from ipalib.text import _ +from ipalib.request import context from ipapython.version import API_VERSION class batch(Command): @@ -81,17 +82,40 @@ class batch(Command): def execute(self, *args, **options): results=[] for arg in args[0]: + params = dict() + name = None try: + if 'method' not in arg: + raise errors.RequirementError(name='method') + if 'params' not in arg: + raise errors.RequirementError(name='params') + name = arg['method'] + if name not in self.Command: + raise errors.CommandError(name=name) a = arg['params'][0] kw = arg['params'][1] newkw = {} for k in kw: newkw[str(k)] = kw[k] - result = api.Command[arg['method']](*a, **newkw) + params = api.Command[name].args_options_2_params(*a, **newkw) + + result = api.Command[name](*a, **newkw) + self.info( + 'batch: %s(%s): SUCCESS', name, ', '.join(api.Command[name]._repr_iter(**params)) + ) result['error']=None except Exception, e: result = dict() result['error'] = unicode(e) + if isinstance(e, errors.RequirementError) or \ + isinstance(e, errors.CommandError): + self.info( + '%s: batch: %s', context.principal, e.__class__.__name__ + ) + else: + self.info( + '%s: batch: %s(%s): %s', context.principal, name, ', '.join(api.Command[name]._repr_iter(**params)), e.__class__.__name__ + ) results.append(result) return dict(count=len(results) , results=results) diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py index cf0deed8c..39cdbcc7f 100644 --- a/ipaserver/rpcserver.py +++ b/ipaserver/rpcserver.py @@ -195,6 +195,9 @@ class WSGIExecutioner(Executioner): error = None _id = None lang = os.environ['LANG'] + name = None + args = () + options = {} if not 'KRB5CCNAME' in environ: return self.marshal(result, CCacheError(), _id) try: @@ -227,12 +230,14 @@ class WSGIExecutioner(Executioner): error = InternalError() finally: os.environ['LANG'] = lang - if error is None: + if name: params = self.Command[name].args_options_2_params(*args, **options) if error: self.info('%s: %s(%s): %s', context.principal, name, ', '.join(self.Command[name]._repr_iter(**params)), e.__class__.__name__) else: self.info('%s: %s(%s): SUCCESS', context.principal, name, ', '.join(self.Command[name]._repr_iter(**params))) + else: + self.info('%s: %s', context.principal, e.__class__.__name__) return self.marshal(result, error, _id) def simple_unmarshal(self, environ): -- cgit