mirror of
https://github.com/ansible/awx.git
synced 2026-02-22 05:30:18 -03:30
* Enable new fancy asyncio metrics for dispatcherd Remove old dispatcher metrics and patch in new data from local whatever Update test fixture to new dispatcherd version * Update dispatcherd again * Handle node filter in URL, and catch more errors * Add test for metric filter * Split module for dispatcherd metrics
67 lines
2.8 KiB
Python
67 lines
2.8 KiB
Python
from django.conf import settings
|
|
|
|
from ansible_base.lib.utils.db import get_pg_notify_params
|
|
from awx.main.dispatch import get_task_queuename
|
|
from awx.main.utils.common import get_auto_max_workers
|
|
|
|
|
|
def get_dispatcherd_config(for_service: bool = False, mock_publish: bool = False) -> dict:
|
|
"""Return a dictionary config for dispatcherd
|
|
|
|
Parameters:
|
|
for_service: if True, include dynamic options needed for running the dispatcher service
|
|
this will require database access, you should delay evaluation until after app setup
|
|
mock_publish: if True, use mock values that don't require database access
|
|
this is used during tests to avoid database queries during app initialization
|
|
"""
|
|
# When mock_publish=True (e.g., during tests), use a default value to avoid
|
|
# database access in get_auto_max_workers() which queries settings.IS_K8S
|
|
if mock_publish:
|
|
max_workers = 20 # Reasonable default for tests
|
|
else:
|
|
max_workers = get_auto_max_workers()
|
|
|
|
config = {
|
|
"version": 2,
|
|
"service": {
|
|
"pool_kwargs": {
|
|
"min_workers": settings.JOB_EVENT_WORKERS,
|
|
"max_workers": max_workers,
|
|
},
|
|
"main_kwargs": {"node_id": settings.CLUSTER_HOST_ID},
|
|
"process_manager_cls": "ForkServerManager",
|
|
"process_manager_kwargs": {"preload_modules": ['awx.main.dispatch.prefork']},
|
|
},
|
|
"brokers": {},
|
|
"publish": {},
|
|
"worker": {"worker_cls": "awx.main.dispatch.worker.dispatcherd.AWXTaskWorker"},
|
|
}
|
|
|
|
if mock_publish:
|
|
config["brokers"]["dispatcherd.testing.brokers.noop"] = {}
|
|
config["publish"]["default_broker"] = "dispatcherd.testing.brokers.noop"
|
|
else:
|
|
config["brokers"]["pg_notify"] = {
|
|
"config": get_pg_notify_params(),
|
|
"sync_connection_factory": "ansible_base.lib.utils.db.psycopg_connection_from_django",
|
|
"default_publish_channel": settings.CLUSTER_HOST_ID, # used for debugging commands
|
|
}
|
|
config["publish"]["default_broker"] = "pg_notify"
|
|
|
|
if for_service:
|
|
config["producers"] = {
|
|
"ScheduledProducer": {"task_schedule": settings.DISPATCHER_SCHEDULE},
|
|
"OnStartProducer": {"task_list": {"awx.main.tasks.system.dispatch_startup": {}}},
|
|
"ControlProducer": {},
|
|
}
|
|
|
|
config["brokers"]["pg_notify"]["channels"] = ['tower_broadcast_all', 'tower_settings_change', get_task_queuename()]
|
|
metrics_cfg = settings.METRICS_SUBSYSTEM_CONFIG.get('server', {}).get(settings.METRICS_SERVICE_DISPATCHER)
|
|
if metrics_cfg:
|
|
config["service"]["metrics_kwargs"] = {
|
|
"host": metrics_cfg.get("host", "localhost"),
|
|
"port": metrics_cfg.get("port", 8015),
|
|
}
|
|
|
|
return config
|