Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose host connection stats #1374

Open
sivel opened this issue Jun 12, 2024 · 0 comments
Open

Expose host connection stats #1374

sivel opened this issue Jun 12, 2024 · 0 comments
Labels
needs_triage New item that needs to be triaged

Comments

@sivel
Copy link
Member

sivel commented Jun 12, 2024

Dependent on ansible/ansible#83354

In the awx_display callback plugin we need to capture per host/task/loop connection stats, and then include those connection stats in the event data created by v2_playbook_on_stats

Basically for all reachable, non skipped tasks, we need to count the number of times a host uses an individual connection plugin.

A PoC of what that would look like in a standalone callback plugin:

callback plugin poc...

# Copyright: Contributors to the Ansible project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

from __future__ import annotations

DOCUMENTATION = '''
    name: track_connections
    short_description: Track connection plugins used for hosts
    description:
        - Track connection plugins used for hosts
    type: aggregate
'''

import json
from collections import defaultdict

from ansible.plugins.callback import CallbackBase


class CallbackModule(CallbackBase):
    CALLBACK_VERSION = 2.0
    CALLBACK_TYPE = 'aggregate'
    CALLBACK_NAME = 'track_connections'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._conntrack = defaultdict(lambda : defaultdict(int))

    def _track(self, result, *args, **kwargs):
        host = result._host.get_name()
        task = result._task

        self._conntrack[host][task.connection] += 1

    v2_runner_on_ok = v2_runner_on_failed = _track
    v2_runner_on_async_poll = v2_runner_on_async_ok = v2_runner_on_async_failed = _track
    v2_runner_item_on_ok = v2_runner_item_on_failed = _track

    def v2_playbook_on_stats(self, stats):
        self._display.display(json.dumps(self._conntrack, indent=4))

@github-actions github-actions bot added the needs_triage New item that needs to be triaged label Jun 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs_triage New item that needs to be triaged
Projects
None yet
Development

No branches or pull requests

1 participant