From 0f7fb35936cccfd7ab62a696ce6bd58a5c8d95d9 Mon Sep 17 00:00:00 2001 From: Joachim Barheine Date: Mon, 10 Oct 2016 18:17:15 +0200 Subject: [PATCH] python impl. of metric-name-list for InfluxDB returns incomplete results Change-Id: I269344f59684c74f9a8ad556620f1b786906cbc5 Closes-Bug: 1628798 --- monasca_api/api/notificationstype_api_v2.py | 2 +- .../influxdb/metrics_repository.py | 36 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/monasca_api/api/notificationstype_api_v2.py b/monasca_api/api/notificationstype_api_v2.py index 2829d60cf..311e582ae 100644 --- a/monasca_api/api/notificationstype_api_v2.py +++ b/monasca_api/api/notificationstype_api_v2.py @@ -34,5 +34,5 @@ class NotificationsTypeV2API(object): def on_put(self, req, res): res.status = '501 Not Implemented' - def on_patch(self, req): + def on_patch(self, req, res): res.status = '501 Not Implemented' diff --git a/monasca_api/common/repositories/influxdb/metrics_repository.py b/monasca_api/common/repositories/influxdb/metrics_repository.py index 2e3880e3c..cc2468572 100644 --- a/monasca_api/common/repositories/influxdb/metrics_repository.py +++ b/monasca_api/common/repositories/influxdb/metrics_repository.py @@ -33,7 +33,6 @@ LOG = log.getLogger(__name__) class MetricsRepository(metrics_repository.AbstractMetricsRepository): - def __init__(self): try: @@ -59,6 +58,15 @@ class MetricsRepository(metrics_repository.AbstractMetricsRepository): return query + def _build_show_measurements_query(self, dimensions, name, tenant_id, region): + + where_clause = self._build_where_clause(dimensions, name, tenant_id, + region) + + query = 'show measurements ' + where_clause + + return query + def _build_select_measurement_query(self, dimensions, name, tenant_id, region, start_timestamp, end_timestamp, offset, limit): @@ -277,7 +285,6 @@ class MetricsRepository(metrics_repository.AbstractMetricsRepository): dimensions, start_timestamp, end_timestamp): - metric = {u'id': str(metric_id), u'name': series[u'name'], u'dimensions': dimensions} @@ -287,17 +294,22 @@ class MetricsRepository(metrics_repository.AbstractMetricsRepository): return json_metric_list - def _build_serie_name_list(self, series_names): + def _build_measurement_name_list(self, measurement_names): + """read measurement names from InfluxDB response + + Extract the measurement names (InfluxDB terminology) from the SHOW MEASURMENTS result to yield metric names + :param measurement_names: result from SHOW MEASUREMENTS call (json-dict) + :return: list of metric-names (Monasca terminology) + """ json_metric_list = [] - if not series_names: + if not measurement_names: return json_metric_list - if 'series' in series_names.raw: - for series in series_names.raw['series']: - name = {u'name': series[u'name']} - json_metric_list.append(name) + for name in measurement_names.raw.get(u'series', [{}])[0].get(u'values', []): + entry = {u'name': name[0]} + json_metric_list.append(entry) json_metric_list = sorted(json_metric_list) return json_metric_list @@ -396,10 +408,12 @@ class MetricsRepository(metrics_repository.AbstractMetricsRepository): try: - query = self._build_show_series_query(dimensions, None, tenant_id, - region) + query = self._build_show_measurements_query(dimensions, None, tenant_id, + region) + result = self.influxdb_client.query(query) - json_name_list = self._build_serie_name_list(result) + + json_name_list = self._build_measurement_name_list(result) return json_name_list except Exception as ex: