add broadcast websocket metrics

* Gather brroadcast websocket metrics and push them into redis every
configurable seconds.
* Pop metrics from redis in web view layer to display via the api on
demand
This commit is contained in:
chris meyers
2020-02-21 10:21:41 -05:00
committed by Ryan Petrello
parent b6b9802f9e
commit d6594ab602
9 changed files with 246 additions and 34 deletions

View File

@@ -34,7 +34,10 @@ from awx.api.views import (
OAuth2ApplicationDetail,
)
from awx.api.views.metrics import MetricsView
from awx.api.views.metrics import (
MetricsView,
BroadcastWebsocketMetricsView,
)
from .organization import urls as organization_urls
from .user import urls as user_urls
@@ -93,6 +96,7 @@ v2_urls = [
url(r'^tokens/$', OAuth2TokenList.as_view(), name='o_auth2_token_list'),
url(r'^', include(oauth2_urls)),
url(r'^metrics/$', MetricsView.as_view(), name='metrics_view'),
url(r'^broadcast_websocket_metrics/$', BroadcastWebsocketMetricsView.as_view(), name='broadcast_websocket_metrics_view'),
url(r'^ping/$', ApiV2PingView.as_view(), name='api_v2_ping_view'),
url(r'^config/$', ApiV2ConfigView.as_view(), name='api_v2_config_view'),
url(r'^config/subscriptions/$', ApiV2SubscriptionView.as_view(), name='api_v2_subscription_view'),

View File

@@ -15,6 +15,7 @@ from rest_framework.exceptions import PermissionDenied
# AWX
# from awx.main.analytics import collectors
from awx.main.analytics.metrics import metrics
from awx.main.analytics.broadcast_websocket import BroadcastWebsocketStatsManager
from awx.api import renderers
from awx.api.generics import (
@@ -39,3 +40,18 @@ class MetricsView(APIView):
if (request.user.is_superuser or request.user.is_system_auditor):
return Response(metrics().decode('UTF-8'))
raise PermissionDenied()
class BroadcastWebsocketMetricsView(APIView):
name = _('Broadcast Websockets')
swagger_topic = 'Broadcast Websockets'
renderer_classes = [renderers.PlainTextRenderer,
renderers.PrometheusJSONRenderer,
renderers.BrowsableAPIRenderer,]
def get(self, request):
''' Show Metrics Details '''
if (request.user.is_superuser or request.user.is_system_auditor):
stats_str = BroadcastWebsocketStatsManager.get_stats_sync() or b''
return Response(stats_str.decode('UTF-8'))
raise PermissionDenied()

View File

@@ -107,6 +107,7 @@ class ApiVersionRootView(APIView):
data['applications'] = reverse('api:o_auth2_application_list', request=request)
data['tokens'] = reverse('api:o_auth2_token_list', request=request)
data['metrics'] = reverse('api:metrics_view', request=request)
data['broadcast_websocket_metrics'] = reverse('api:broadcast_websocket_metrics_view', request=request)
data['inventory'] = reverse('api:inventory_list', request=request)
data['inventory_scripts'] = reverse('api:inventory_script_list', request=request)
data['inventory_sources'] = reverse('api:inventory_source_list', request=request)