X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fevaluator%2Fbackends%2Fprometheus.py;h=c5b935ee3dd2cf99034bb7ba2b2cef0569cae9b0;hb=HEAD;hp=ad4919f5a544dd377d7e41d9c36fdef155b34902;hpb=52e6037edf419e0b1d67ec01b3834e690479cd68;p=osm%2FMON.git diff --git a/osm_mon/evaluator/backends/prometheus.py b/osm_mon/evaluator/backends/prometheus.py index ad4919f..c5b935e 100644 --- a/osm_mon/evaluator/backends/prometheus.py +++ b/osm_mon/evaluator/backends/prometheus.py @@ -22,7 +22,7 @@ ## import base64 import logging -from typing import Dict +from typing import Dict, List import requests @@ -33,13 +33,15 @@ log = logging.getLogger(__name__) OSM_METRIC_PREFIX = "osm_" +DEFAULT_QUERY_METRICS = ["ns_id", "vnf_member_index", "vdu_name"] + class PrometheusBackend(BaseBackend): def __init__(self, config: Config): super().__init__(config) self.conf = config - def get_metric_value(self, metric_name: str, tags: dict): + def get_metric_data(self, metric_name: str, tags: dict): query = self._build_query(metric_name, tags) request_url = self._build_url(query) request_headers = self._build_headers() @@ -55,7 +57,7 @@ class PrometheusBackend(BaseBackend): if r.status_code == 200: json_response = r.json() if json_response["status"] == "success": - return self._get_metric_value_from_response(json_response) + return self._get_metric_data_from_response(json_response) else: log.warning( "Prometheus response is not success. Got status %s", @@ -91,11 +93,15 @@ class PrometheusBackend(BaseBackend): headers["Authorization"] = f"Basic {token}" return headers - def _get_metric_value_from_response(self, json_response): + def _get_metric_data_from_response(self, json_response) -> List[Dict[str, str]]: result = json_response["data"]["result"] + metrics_data = [] if len(result): - metric_value = float(result[0]["value"][1]) - log.info("Metric value: %s", metric_value) - return metric_value + for metric in result: + metrics_labels = metric["metric"] + metric_value = float(metric["value"][1]) + log.info("Metric value: %s", metric_value) + metrics_data.append({"labels": metrics_labels, "value": metric_value}) + return metrics_data else: return None