mirror of
https://github.com/ZwareBear/awx.git
synced 2026-05-13 03:08:37 -05:00
Merge pull request #32 from kdelee/task_manager_debug_view
add debug views for task manager(s)
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
from django.urls import re_path
|
||||||
|
|
||||||
|
from awx.api.views.debug import (
|
||||||
|
DebugRootView,
|
||||||
|
TaskManagerDebugView,
|
||||||
|
DependencyManagerDebugView,
|
||||||
|
WorkflowManagerDebugView,
|
||||||
|
)
|
||||||
|
|
||||||
|
urls = [
|
||||||
|
re_path(r'^$', DebugRootView.as_view(), name='debug'),
|
||||||
|
re_path(r'^task_manager/$', TaskManagerDebugView.as_view(), name='task_manager'),
|
||||||
|
re_path(r'^dependency_manager/$', DependencyManagerDebugView.as_view(), name='dependency_manager'),
|
||||||
|
re_path(r'^workflow_manager/$', WorkflowManagerDebugView.as_view(), name='workflow_manager'),
|
||||||
|
]
|
||||||
|
|
||||||
|
__all__ = ['urls']
|
||||||
@@ -5,6 +5,7 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.urls import include, re_path
|
from django.urls import include, re_path
|
||||||
|
|
||||||
|
from awx import MODE
|
||||||
from awx.api.generics import LoggedLoginView, LoggedLogoutView
|
from awx.api.generics import LoggedLoginView, LoggedLogoutView
|
||||||
from awx.api.views import (
|
from awx.api.views import (
|
||||||
ApiRootView,
|
ApiRootView,
|
||||||
@@ -145,7 +146,12 @@ urlpatterns = [
|
|||||||
re_path(r'^logout/$', LoggedLogoutView.as_view(next_page='/api/', redirect_field_name='next'), name='logout'),
|
re_path(r'^logout/$', LoggedLogoutView.as_view(next_page='/api/', redirect_field_name='next'), name='logout'),
|
||||||
re_path(r'^o/', include(oauth2_root_urls)),
|
re_path(r'^o/', include(oauth2_root_urls)),
|
||||||
]
|
]
|
||||||
if settings.SETTINGS_MODULE == 'awx.settings.development':
|
if MODE == 'development':
|
||||||
|
# Only include these if we are in the development environment
|
||||||
from awx.api.swagger import SwaggerSchemaView
|
from awx.api.swagger import SwaggerSchemaView
|
||||||
|
|
||||||
urlpatterns += [re_path(r'^swagger/$', SwaggerSchemaView.as_view(), name='swagger_view')]
|
urlpatterns += [re_path(r'^swagger/$', SwaggerSchemaView.as_view(), name='swagger_view')]
|
||||||
|
|
||||||
|
from awx.api.urls.debug import urls as debug_urls
|
||||||
|
|
||||||
|
urlpatterns += [re_path(r'^debug/', include(debug_urls))]
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
from awx.main.scheduler import TaskManager, DependencyManager, WorkflowManager
|
||||||
|
|
||||||
|
|
||||||
|
class TaskManagerDebugView(APIView):
|
||||||
|
_ignore_model_permissions = True
|
||||||
|
exclude_from_schema = True
|
||||||
|
permission_classes = [AllowAny]
|
||||||
|
prefix = 'Task'
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
TaskManager().schedule()
|
||||||
|
if not settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
msg = f"Running {self.prefix} manager. To disable other triggers to the {self.prefix} manager, set AWX_DISABLE_TASK_MANAGERS to True"
|
||||||
|
else:
|
||||||
|
msg = f"AWX_DISABLE_TASK_MANAGERS is True, this view is the only way to trigger the {self.prefix} manager"
|
||||||
|
return Response(msg)
|
||||||
|
|
||||||
|
|
||||||
|
class DependencyManagerDebugView(APIView):
|
||||||
|
_ignore_model_permissions = True
|
||||||
|
exclude_from_schema = True
|
||||||
|
permission_classes = [AllowAny]
|
||||||
|
prefix = 'Dependency'
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
DependencyManager().schedule()
|
||||||
|
if not settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
msg = f"Running {self.prefix} manager. To disable other triggers to the {self.prefix} manager, set AWX_DISABLE_TASK_MANAGERS to True"
|
||||||
|
else:
|
||||||
|
msg = f"AWX_DISABLE_TASK_MANAGERS is True, this view is the only way to trigger the {self.prefix} manager"
|
||||||
|
return Response(msg)
|
||||||
|
|
||||||
|
|
||||||
|
class WorkflowManagerDebugView(APIView):
|
||||||
|
_ignore_model_permissions = True
|
||||||
|
exclude_from_schema = True
|
||||||
|
permission_classes = [AllowAny]
|
||||||
|
prefix = 'Workflow'
|
||||||
|
|
||||||
|
def get(self, request):
|
||||||
|
WorkflowManager().schedule()
|
||||||
|
if not settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
msg = f"Running {self.prefix} manager. To disable other triggers to the {self.prefix} manager, set AWX_DISABLE_TASK_MANAGERS to True"
|
||||||
|
else:
|
||||||
|
msg = f"AWX_DISABLE_TASK_MANAGERS is True, this view is the only way to trigger the {self.prefix} manager"
|
||||||
|
return Response(msg)
|
||||||
|
|
||||||
|
|
||||||
|
class DebugRootView(APIView):
|
||||||
|
_ignore_model_permissions = True
|
||||||
|
exclude_from_schema = True
|
||||||
|
permission_classes = [AllowAny]
|
||||||
|
|
||||||
|
def get(self, request, format=None):
|
||||||
|
'''List of available debug urls'''
|
||||||
|
data = OrderedDict()
|
||||||
|
data['task_manager'] = '/api/debug/task_manager/'
|
||||||
|
data['dependency_manager'] = '/api/debug/dependency_manager/'
|
||||||
|
data['workflow_manager'] = '/api/debug/workflow_manager/'
|
||||||
|
return Response(data)
|
||||||
@@ -1,7 +1,11 @@
|
|||||||
# Python
|
# Python
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
# Django
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
|
from awx import MODE
|
||||||
from awx.main.scheduler import TaskManager, DependencyManager, WorkflowManager
|
from awx.main.scheduler import TaskManager, DependencyManager, WorkflowManager
|
||||||
from awx.main.dispatch.publish import task
|
from awx.main.dispatch.publish import task
|
||||||
from awx.main.dispatch import get_local_queuename
|
from awx.main.dispatch import get_local_queuename
|
||||||
@@ -11,20 +15,36 @@ logger = logging.getLogger('awx.main.scheduler')
|
|||||||
|
|
||||||
@task(queue=get_local_queuename)
|
@task(queue=get_local_queuename)
|
||||||
def task_manager():
|
def task_manager():
|
||||||
|
prefix = 'task'
|
||||||
|
if MODE == 'development' and settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
logger.debug(f"Not running {prefix} manager, AWX_DISABLE_TASK_MANAGERS is True. Trigger with GET to /api/debug/{prefix}_manager/")
|
||||||
|
return
|
||||||
|
|
||||||
TaskManager().schedule()
|
TaskManager().schedule()
|
||||||
|
|
||||||
|
|
||||||
@task(queue=get_local_queuename)
|
@task(queue=get_local_queuename)
|
||||||
def dependency_manager():
|
def dependency_manager():
|
||||||
|
prefix = 'dependency'
|
||||||
|
if MODE == 'development' and settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
logger.debug(f"Not running {prefix} manager, AWX_DISABLE_TASK_MANAGERS is True. Trigger with GET to /api/debug/{prefix}_manager/")
|
||||||
|
return
|
||||||
DependencyManager().schedule()
|
DependencyManager().schedule()
|
||||||
|
|
||||||
|
|
||||||
@task(queue=get_local_queuename)
|
@task(queue=get_local_queuename)
|
||||||
def workflow_manager():
|
def workflow_manager():
|
||||||
|
prefix = 'workflow'
|
||||||
|
if MODE == 'development' and settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
logger.debug(f"Not running {prefix} manager, AWX_DISABLE_TASK_MANAGERS is True. Trigger with GET to /api/debug/{prefix}_manager/")
|
||||||
|
return
|
||||||
WorkflowManager().schedule()
|
WorkflowManager().schedule()
|
||||||
|
|
||||||
|
|
||||||
def run_task_manager():
|
def run_task_manager():
|
||||||
|
if MODE == 'development' and settings.AWX_DISABLE_TASK_MANAGERS:
|
||||||
|
logger.debug(f"Not running task managers, AWX_DISABLE_TASK_MANAGERS is True. Trigger with GET to /api/debug/{prefix}_manager/")
|
||||||
|
return
|
||||||
task_manager()
|
task_manager()
|
||||||
dependency_manager()
|
dependency_manager()
|
||||||
workflow_manager()
|
workflow_manager()
|
||||||
|
|||||||
@@ -110,5 +110,12 @@ CLUSTER_HOST_ID = socket.gethostname()
|
|||||||
|
|
||||||
AWX_CALLBACK_PROFILE = True
|
AWX_CALLBACK_PROFILE = True
|
||||||
|
|
||||||
|
# ======================!!!!!!! FOR DEVELOPMENT ONLY !!!!!!!=================================
|
||||||
|
# Disable normal scheduled/triggered task managers (DependencyManager, TaskManager, WorkflowManager).
|
||||||
|
# Allows user to trigger task managers directly for debugging and profiling purposes.
|
||||||
|
# Only works in combination with settings.SETTINGS_MODULE == 'awx.settings.development'
|
||||||
|
AWX_DISABLE_TASK_MANAGERS = os.getenv('AWX_DISABLE_TASK_MANAGERS', False)
|
||||||
|
# ======================!!!!!!! FOR DEVELOPMENT ONLY !!!!!!!=================================
|
||||||
|
|
||||||
if 'sqlite3' not in DATABASES['default']['ENGINE']: # noqa
|
if 'sqlite3' not in DATABASES['default']['ENGINE']: # noqa
|
||||||
DATABASES['default'].setdefault('OPTIONS', dict()).setdefault('application_name', f'{CLUSTER_HOST_ID}-{os.getpid()}-{" ".join(sys.argv)}'[:63]) # noqa
|
DATABASES['default'].setdefault('OPTIONS', dict()).setdefault('application_name', f'{CLUSTER_HOST_ID}-{os.getpid()}-{" ".join(sys.argv)}'[:63]) # noqa
|
||||||
|
|||||||
Reference in New Issue
Block a user