forked from platypush/platypush
Do exception logging at Request level and discard duplicate exception messages between retries
This commit is contained in:
parent
8ea0519954
commit
db4e68e247
2 changed files with 14 additions and 17 deletions
|
@ -215,12 +215,15 @@ class Request(Message):
|
||||||
format(plugin, self.action, str(response)))
|
format(plugin, self.action, str(response)))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Retry mechanism
|
# Retry mechanism
|
||||||
|
plugin.logger.exception(e)
|
||||||
logger.warning(('Uncaught exception while processing response ' +
|
logger.warning(('Uncaught exception while processing response ' +
|
||||||
'from action {}.{}: {}').format(
|
'from action {}.{}: {}').format(
|
||||||
plugin, self.action, str(e)))
|
plugin, self.action, str(e)))
|
||||||
|
|
||||||
errors = errors or []
|
errors = errors or []
|
||||||
errors.append(str(e))
|
if str(e) not in errors:
|
||||||
|
errors.append(str(e))
|
||||||
|
|
||||||
response = Response(output=None, errors=errors)
|
response = Response(output=None, errors=errors)
|
||||||
if n_tries-1 > 0:
|
if n_tries-1 > 0:
|
||||||
logger.info('Reloading plugin {} and retrying'.format(module_name))
|
logger.info('Reloading plugin {} and retrying'.format(module_name))
|
||||||
|
|
|
@ -14,23 +14,17 @@ def action(f):
|
||||||
output = None
|
output = None
|
||||||
errors = []
|
errors = []
|
||||||
|
|
||||||
try:
|
output = f(*args, **kwargs)
|
||||||
output = f(*args, **kwargs)
|
if output and isinstance(output, Response):
|
||||||
if output and isinstance(output, Response):
|
errors = output.errors \
|
||||||
errors = output.errors \
|
if isinstance(output.errors, list) else [output.errors]
|
||||||
if isinstance(output.errors, list) else [output.errors]
|
output = output.output
|
||||||
output = output.output
|
elif isinstance(output, tuple) and len(output) == 2:
|
||||||
elif isinstance(output, tuple) and len(output) == 2:
|
errors = output[1] \
|
||||||
errors = output[1] \
|
if isinstance(output[1], list) else [output[1]]
|
||||||
if isinstance(output[1], list) else [output[1]]
|
|
||||||
|
|
||||||
if len(errors) == 1 and errors[0] is None: errors = []
|
if len(errors) == 1 and errors[0] is None: errors = []
|
||||||
output = output[0]
|
output = output[0]
|
||||||
except Exception as e:
|
|
||||||
if isinstance(args[0], Plugin):
|
|
||||||
args[0].logger.exception(e)
|
|
||||||
raise e
|
|
||||||
# errors.append(str(e) + '\n' + traceback.format_exc())
|
|
||||||
|
|
||||||
return Response(output=output, errors=errors)
|
return Response(output=output, errors=errors)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue