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

@@ -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)