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:
@@ -219,6 +219,11 @@ class PrometheusCollector(collector.BaseCollector):
|
|||||||
except PrometheusResponseError as e:
|
except PrometheusResponseError as e:
|
||||||
raise CollectError(*e.args)
|
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,
|
# If the query returns an empty dataset,
|
||||||
# return an empty list
|
# return an empty list
|
||||||
if not res['data']['result']:
|
if not res['data']['result']:
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Raises a ``CollectError`` exception with error details when a Prometheus
|
||||||
|
query returns an error status.
|
||||||
Reference in New Issue
Block a user