##
import base64
import logging
-from typing import Dict
+from typing import Dict, List
import requests
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()
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",
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