From fd0d038492b267a81f2f3a9ca2f2c29bb3fa1434 Mon Sep 17 00:00:00 2001 From: Jennings Zhang Date: Sat, 19 Mar 2022 18:11:41 -0400 Subject: [PATCH] Fix log overflow --- .../plugininstances/services/manager.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/chris_backend/plugininstances/services/manager.py b/chris_backend/plugininstances/services/manager.py index 25660903..63716147 100755 --- a/chris_backend/plugininstances/services/manager.py +++ b/chris_backend/plugininstances/services/manager.py @@ -70,6 +70,8 @@ class PluginInstanceManager(object): + __NONASCII = re.compile(r'[^\x00-\x7F]') + def __init__(self, plugin_instance): self.c_plugin_inst = plugin_instance @@ -670,8 +672,8 @@ def _register_output_files(self, filenames): total_size += plg_inst_file.fname.size self.c_plugin_inst.size += total_size - @staticmethod - def get_job_status_summary(d_response=None): + @classmethod + def get_job_status_summary(cls, d_response=None): """ Get a job status summary JSON string from pfcon response. """ @@ -704,5 +706,15 @@ def get_job_status_summary(d_response=None): logs = d_jobStatusSummary['compute']['return']['job_logs'] = d_c['logs'] if len(logs) > 3000: - d_jobStatusSummary['compute']['return']['job_logs'] = logs[-3000:] + # Workaround which fixes https://github.com/FNNDSC/ChRIS_ultron_backEnd/issues/364 + # Better solution discussed in https://github.com/FNNDSC/ChRIS_ultron_backEnd/issues/374 + # + # JSON serialization causes string to be longer than you might expect + # because of escape sequences, e.g. json.dumps('\n') -> '"\\n"' + + # replace non-ASCII characters, such as emojis and Chinese characters + logs_ascii = cls.__NONASCII.sub('?', logs) + + # truncate logs, assuming worst case where every character needs to be escaped + d_jobStatusSummary['compute']['return']['job_logs'] = logs_ascii[-1800:] return json.dumps(d_jobStatusSummary)