Raise CollectError when Prometheus query returns an error

As described in the Prometheus HTTP API documentation [1], the JSON
response to a Prometheus query includes a status field, which was
ignored by CloudKitty. If it is set to "error", raise a CollectError
exception to log the error type and details.

For example, a query with a metric name containing a dot will produce
the following error:

    cloudkitty.collector.exceptions.CollectError: bad_data: invalid parameter "query": 1:25: parse error: unexpected character: '.'

[1] https://prometheus.io/docs/prometheus/latest/querying/api/

Change-Id: I0c2892a39ec50163de251b38d34493db6a22c858
Story: 2009869
Task: 44564
This commit is contained in:
Pierre Riteau 2022-02-22 12:13:37 +01:00
parent 249ea00192
commit a536880431
2 changed files with 10 additions and 0 deletions

View File

@ -219,6 +219,11 @@ class PrometheusCollector(collector.BaseCollector):
except PrometheusResponseError as e:
raise CollectError(*e.args)
if res['status'] == 'error':
error_type = res['errorType']
error_msg = res['error']
raise CollectError("%s: %s" % (error_type, error_msg))
# If the query returns an empty dataset,
# return an empty list
if not res['data']['result']:

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Raises a ``CollectError`` exception with error details when a Prometheus
query returns an error status.