in glam/api/views.py [0:0]
def aggregations(request):
"""
Fetches aggregation data.
Expects a JSON object in the body containing the query parameters, e.g.::
{
"query": {
"channel": "nightly",
"probe": "gc_ms",
"process": "content"
"versions": 5, # Defaults to 3 versions.
"aggregationLevel": "version" # OR "build_id"
}
}
Returns a JSON object containing the histogram data and metadata, e.g.::
{
"response": [
{
"build_id": "*",
"client_agg_type": "summed_histogram",
"histogram": {
"0": 28599.9932,
"1": 69122.1505,
"2": 31748.8171,
...
},
"metric": "gc_ms",
"metric_key": "",
"metric_type": "histogram-exponential",
"os": "*",
"percentiles": {
"5": 1,
"25": 12,
"50": 40,
"75": 96,
"95": 268
},
"process": "content",
"total_addressable_market": 118531,
"total_users": 1262515,
"version": "75"
},
...
]
}
"""
body = request.data
if body is None or body.get("query") is None:
raise ValidationError("Unexpected JSON body")
# Firefox Desktop is pulling from older telemetry data and will go away in
# the future. The code path is separated here in anticipation of this and
# separating out Glean data as the future.
# Ensure that the product provided is one we support, defaulting to Firefox.
FIREFOX_LEGACY = constants.PRODUCT_NAMES[constants.PRODUCT_FIREFOX_LEGACY]
product = body["query"].get("product", FIREFOX_LEGACY)
if product not in constants.PRODUCT_IDS.keys():
raise ValidationError(
"Unsupported product specified. We currently support only: {}".format(
", ".join(constants.PRODUCT_IDS.keys())
)
)
data_source = body.get("data_source", "BigQuery")
# Uncomment the next line to rollback to PostgreSQL
# data_source = "Postgres"
if product == FIREFOX_LEGACY:
response = get_firefox_aggregations(data_source, request, **body["query"])
else: # Assume everything else is Glean-based.
response = get_glean_aggregations(data_source, request, **body["query"])
if not response:
raise NotFound("No documents found for the given parameters")
return Response({"response": response})