add support for Accept:application/json to /api/v2/metrics

see: https://github.com/ansible/awx/issues/4144
This commit is contained in:
Ryan Petrello
2019-08-12 15:08:15 -04:00
parent a776d0ba59
commit 82f5072c7d
5 changed files with 20 additions and 14 deletions

View File

@@ -2,6 +2,7 @@
# All Rights Reserved.
from django.utils.safestring import SafeText
from prometheus_client.parser import text_string_to_metric_families
# Django REST Framework
from rest_framework import renderers
@@ -103,3 +104,16 @@ class AnsiTextRenderer(PlainTextRenderer):
class AnsiDownloadRenderer(PlainTextRenderer):
format = "ansi_download"
class PrometheusJSONRenderer(renderers.JSONRenderer):
def render(self, data, accepted_media_type=None, renderer_context=None):
parsed_metrics = text_string_to_metric_families(data)
data = {}
for family in parsed_metrics:
for sample in family.samples:
data[sample[0]] = {"labels": sample[1], "value": sample[2]}
return super(PrometheusJSONRenderer, self).render(
data, accepted_media_type, renderer_context
)