diff --git a/awx/conf/views.py b/awx/conf/views.py index 524abf476a..7da93ce7e2 100644 --- a/awx/conf/views.py +++ b/awx/conf/views.py @@ -21,7 +21,7 @@ from awx.api.generics import * # noqa from awx.api.permissions import IsSuperUser from awx.api.versioning import reverse, get_request_version from awx.main.utils import * # noqa -from awx.main.utils.handlers import BaseHTTPSHandler, LoggingConnectivityException +from awx.main.utils.handlers import BaseHTTPSHandler, UDPHandler, LoggingConnectivityException from awx.main.tasks import handle_setting_changes from awx.conf.license import get_licensed_features from awx.conf.models import Setting @@ -202,7 +202,11 @@ class SettingLoggingTest(GenericAPIView): for k, v in serializer.validated_data.items(): setattr(mock_settings, k, v) mock_settings.LOG_AGGREGATOR_LEVEL = 'DEBUG' - BaseHTTPSHandler.perform_test(mock_settings) + if mock_settings.LOG_AGGREGATOR_PROTOCOL.upper() == 'UDP': + UDPHandler.perform_test(mock_settings) + return Response(status=status.HTTP_201_CREATED) + else: + BaseHTTPSHandler.perform_test(mock_settings) except LoggingConnectivityException as e: return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_200_OK) diff --git a/awx/main/utils/handlers.py b/awx/main/utils/handlers.py index 20a30b499e..8ed1127292 100644 --- a/awx/main/utils/handlers.py +++ b/awx/main/utils/handlers.py @@ -292,6 +292,21 @@ class UDPHandler(BaseHandler): payload = _encode_payload_for_socket(payload) return self.socket.sendto(payload, (self._get_host(hostname_only=True), self.port or 0)) + @classmethod + def perform_test(cls, settings): + """ + Tests logging connectivity for the current logging settings. + """ + handler = cls.from_django_settings(settings) + handler.enabled_flag = True + handler.setFormatter(LogstashFormatter(settings_module=settings)) + logger = logging.getLogger(__file__) + fn, lno, func = logger.findCaller() + record = logger.makeRecord('awx', 10, fn, lno, + 'AWX Connection Test', tuple(), + None, func) + handler.emit(_encode_payload_for_socket(record)) + HANDLER_MAPPING = { 'https': BaseHTTPSHandler,