diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 4d94be13f6..c16500bef5 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2489,6 +2489,16 @@ class JobEventSerializer(BaseSerializer): pass return d + def to_representation(self, obj): + ret = super(JobEventSerializer, self).to_representation(obj) + # Show full stdout for event detail view, truncate only for list view. + if hasattr(self.context.get('view', None), 'retrieve'): + return ret + max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY + if max_bytes > 0 and 'stdout' in ret and len(ret['stdout']) >= max_bytes: + ret['stdout'] = ret['stdout'][:(max_bytes - 1)] + u'\u2026' + return ret + class AdHocCommandEventSerializer(BaseSerializer): @@ -2510,6 +2520,16 @@ class AdHocCommandEventSerializer(BaseSerializer): res['host'] = reverse('api:host_detail', args=(obj.host.pk,)) return res + def to_representation(self, obj): + ret = super(JobEventSerializer, self).to_representation(obj) + # Show full stdout for event detail view, truncate only for list view. + if hasattr(self.context.get('view', None), 'retrieve'): + return ret + max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY + if max_bytes > 0 and 'stdout' in ret and len(ret['stdout']) >= max_bytes: + ret['stdout'] = ret['stdout'][:(max_bytes - 1)] + u'\u2026' + return ret + class JobLaunchSerializer(BaseSerializer): diff --git a/awx/main/conf.py b/awx/main/conf.py index b2ed431e87..8aada426c6 100644 --- a/awx/main/conf.py +++ b/awx/main/conf.py @@ -157,6 +157,16 @@ register( category_slug='jobs', ) +register( + 'EVENT_STDOUT_MAX_BYTES_DISPLAY', + field_class=fields.IntegerField, + min_value=0, + label=_('Job Event Standard Output Maximum Display Size'), + help_text=_(u'Maximum Size of Standard Output in bytes to display for a single job or ad hoc command event. `stdout` will end with `\u2026` when truncated.'), + category=_('Jobs'), + category_slug='jobs', +) + register( 'SCHEDULE_MAX_JOBS', field_class=fields.IntegerField, diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 92cf2052c1..040bbb2ee0 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -151,6 +151,9 @@ REMOTE_HOST_HEADERS = ['REMOTE_ADDR', 'REMOTE_HOST'] # Note: This setting may be overridden by database settings. STDOUT_MAX_BYTES_DISPLAY = 1048576 +# Note: This setting may be overridden by database settings. +EVENT_STDOUT_MAX_BYTES_DISPLAY = 1024 + TEMPLATE_CONTEXT_PROCESSORS = ( # NOQA 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug',