From 51b94f536c0e809fea14e8a1d7355f1c258f7cc6 Mon Sep 17 00:00:00 2001 From: Marty Winkler Date: Tue, 6 Feb 2024 16:21:42 +0100 Subject: [PATCH] Feat/add summary only option to profile callbacks (#511) * profile_tasks callback: add parameter to show only summary --- ...e-callbacks-add-summary-only-parameter.yml | 3 ++ plugins/callback/profile_roles.py | 32 +++++++++++++++++-- plugins/callback/profile_tasks.py | 25 +++++++++++++-- 3 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 changelogs/fragments/511_profile-callbacks-add-summary-only-parameter.yml diff --git a/changelogs/fragments/511_profile-callbacks-add-summary-only-parameter.yml b/changelogs/fragments/511_profile-callbacks-add-summary-only-parameter.yml new file mode 100644 index 0000000..2347dd3 --- /dev/null +++ b/changelogs/fragments/511_profile-callbacks-add-summary-only-parameter.yml @@ -0,0 +1,3 @@ +--- +minor_changes: + - "Add summary_only parameter to profile_roles and profile_tasks callbacks." diff --git a/plugins/callback/profile_roles.py b/plugins/callback/profile_roles.py index 13dae0c..59a437f 100644 --- a/plugins/callback/profile_roles.py +++ b/plugins/callback/profile_roles.py @@ -14,6 +14,19 @@ DOCUMENTATION = ''' - This callback module provides profiling for ansible roles. requirements: - whitelisting in configuration + options: + summary_only: + description: + - Only show summary, not individual task profiles. + Especially usefull in combination with C(DISPLAY_SKIPPED_HOSTS=false) and/or C(ANSIBLE_DISPLAY_OK_HOSTS=false). + type: bool + default: False + env: + - name: PROFILE_ROLES_SUMMARY_ONLY + ini: + - section: callback_profile_roles + key: summary_only + version_added: 1.5.0 ''' import collections @@ -76,13 +89,26 @@ class CallbackModule(CallbackBase): self.stats = collections.Counter() self.totals = collections.Counter() self.current = None + + self.summary_only = None + super(CallbackModule, self).__init__() + def set_options(self, task_keys=None, var_options=None, direct=None): + + super(CallbackModule, self).set_options(task_keys=task_keys, var_options=var_options, direct=direct) + + self.summary_only = self.get_option('summary_only') + + def _display_tasktime(self): + if not self.summary_only: + self._display.display(tasktime()) + def _record_task(self, task): """ Logs the start of each task """ - self._display.display(tasktime()) + self._display_tasktime() timestamp(self) if task._role: @@ -99,10 +125,10 @@ class CallbackModule(CallbackBase): self._record_task(task) def playbook_on_setup(self): - self._display.display(tasktime()) + self._display_tasktime() def playbook_on_stats(self, stats): - self._display.display(tasktime()) + self._display_tasktime() self._display.display(filled("", fchar="=")) timestamp(self) diff --git a/plugins/callback/profile_tasks.py b/plugins/callback/profile_tasks.py index 944b222..5fb7972 100644 --- a/plugins/callback/profile_tasks.py +++ b/plugins/callback/profile_tasks.py @@ -40,6 +40,18 @@ DOCUMENTATION = ''' ini: - section: callback_profile_tasks key: sort_order + summary_only: + description: + - Only show summary, not individual task profiles. + Especially usefull in combination with C(DISPLAY_SKIPPED_HOSTS=false) and/or C(ANSIBLE_DISPLAY_OK_HOSTS=false). + type: bool + default: False + env: + - name: PROFILE_TASKS_SUMMARY_ONLY + ini: + - section: callback_profile_tasks + key: summary_only + version_added: 1.5.0 ''' EXAMPLES = ''' @@ -120,6 +132,7 @@ class CallbackModule(CallbackBase): self.current = None self.sort_order = None + self.summary_only = None self.task_output_limit = None super(CallbackModule, self).__init__() @@ -137,6 +150,8 @@ class CallbackModule(CallbackBase): elif self.sort_order == 'none': self.sort_order = None + self.summary_only = self.get_option('summary_only') + self.task_output_limit = self.get_option('output_limit') if self.task_output_limit is not None: if self.task_output_limit == 'all': @@ -144,11 +159,15 @@ class CallbackModule(CallbackBase): else: self.task_output_limit = int(self.task_output_limit) + def _display_tasktime(self): + if not self.summary_only: + self._display.display(tasktime()) + def _record_task(self, task): """ Logs the start of each task """ - self._display.display(tasktime()) + self._display_tasktime() timestamp(self) # Record the start time of the current task @@ -171,10 +190,10 @@ class CallbackModule(CallbackBase): self._record_task(task) def playbook_on_setup(self): - self._display.display(tasktime()) + self._display_tasktime() def playbook_on_stats(self, stats): - self._display.display(tasktime()) + self._display_tasktime() self._display.display(filled("", fchar="=")) timestamp(self)