From 19859177020e6ee06103ace4c4959cdfd9bf05cb Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Thu, 15 Oct 2020 15:55:33 +0200 Subject: [PATCH] [FIX] runbot: add limit on log length --- runbot/models/batch.py | 3 +++ runbot/models/build.py | 4 ++-- runbot/models/build_config.py | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/runbot/models/batch.py b/runbot/models/batch.py index 0ca08f46..01810fd8 100644 --- a/runbot/models/batch.py +++ b/runbot/models/batch.py @@ -357,6 +357,9 @@ class Batch(models.Model): self._log(message, *args, level='WARNING') def _log(self, message, *args, level='INFO'): + message = message % args if args else message + if len(message) > 300000: + message = message[:300000] + '[Truncate, message too long]' self.env['runbot.batch.log'].create({ 'batch_id': self.id, 'message': message % args if args else message, diff --git a/runbot/models/build.py b/runbot/models/build.py index bc34558a..ed67ea2d 100644 --- a/runbot/models/build.py +++ b/runbot/models/build.py @@ -670,9 +670,9 @@ class BuildResult(models.Model): results = build.active_step._make_results(build) except Exception as e: if isinstance(e, RunbotException): - message = e.args[0] + message = e.args[0][:300000] else: - message = 'An error occured while computing results of %s:\n %s' % (build.job, str(e).replace('\\n', '\n').replace("\\'", "'")) + message = 'An error occured while computing results of %s:\n %s' % (build.job, str(e).replace('\\n', '\n').replace("\\'", "'")[:10000]) _logger.exception(message) build._log('_make_results', message, level='ERROR') results = {'local_result': 'ko'} diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py index 81747b21..45b61a49 100644 --- a/runbot/models/build_config.py +++ b/runbot/models/build_config.py @@ -858,6 +858,7 @@ class ConfigStep(models.Model): eval_ctx = self.make_python_ctx(build) safe_eval(self.python_result_code.strip(), eval_ctx, mode="exec", nocopy=True) return_value = eval_ctx.get('return_value') + # todo check return_value or write in try except. Example: local result setted to wrong value if not isinstance(return_value, dict): raise RunbotException('python_result_code must set return_value to a dict values on build') return return_value