X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=osm_mon%2Fevaluator%2Fbackends%2Fprometheus.py;h=ad4919f5a544dd377d7e41d9c36fdef155b34902;hb=52e6037edf419e0b1d67ec01b3834e690479cd68;hp=94024d7b7bdba906c18bc372735704a51f379441;hpb=345e73dd34a166bea88158d8c0270c436d384858;p=osm%2FMON.git diff --git a/osm_mon/evaluator/backends/prometheus.py b/osm_mon/evaluator/backends/prometheus.py index 94024d7..ad4919f 100644 --- a/osm_mon/evaluator/backends/prometheus.py +++ b/osm_mon/evaluator/backends/prometheus.py @@ -20,7 +20,9 @@ # For those usages not covered by the Apache License, Version 2.0 please # contact: bdiaz@whitestack.com or glavado@whitestack.com ## +import base64 import logging +from typing import Dict import requests @@ -40,9 +42,15 @@ class PrometheusBackend(BaseBackend): def get_metric_value(self, metric_name: str, tags: dict): query = self._build_query(metric_name, tags) request_url = self._build_url(query) + request_headers = self._build_headers() + return self._query_metric(request_url, request_headers) + + def _query_metric(self, request_url: str, headers: Dict[str, str]): log.info("Querying Prometheus: %s", request_url) r = requests.get( - request_url, timeout=int(self.conf.get("global", "request_timeout")) + request_url, + timeout=int(self.conf.get("global", "request_timeout")), + headers=headers, ) if r.status_code == 200: json_response = r.json() @@ -73,6 +81,16 @@ class PrometheusBackend(BaseBackend): def _build_url(self, query: str): return self.conf.get("prometheus", "url") + "/api/v1/query?" + query + def _build_headers(self) -> Dict[str, str]: + headers = {} + user = self.conf.get("prometheus", "user") + password = self.conf.get("prometheus", "password") + if user and password: + _phrase = f"{user}:{password}".encode("utf-8") + token = base64.b64encode(_phrase).decode("utf-8") + headers["Authorization"] = f"Basic {token}" + return headers + def _get_metric_value_from_response(self, json_response): result = json_response["data"]["result"] if len(result):