diff --git a/examples/amazon-prometheus.py b/examples/amazon-prometheus.py new file mode 100644 index 0000000..2cb58e1 --- /dev/null +++ b/examples/amazon-prometheus.py @@ -0,0 +1,31 @@ +from prometheus_api_client import PrometheusConnect +from prometheus_api_client.utils import parse_datetime +from datetime import timedelta + +from requests_auth_aws_sigv4 import AWSSigV4 # pip install requests-auth-aws-sigv4 +# Optionally install boto3 if you'd like to use AWS CLI/SDK credentials + +region = 'us-east-1' +workspace_id = 'ws-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' + +auth = AWSSigV4('aps', region=region) + +prom = PrometheusConnect(url=f"https://aps-workspaces.{region}.amazonaws.com/workspaces/{workspace_id}", disable_ssl=False, auth=auth) + +# Print all metrics +metrics = prom.all_metrics() +print(metrics) + +# Get 'prometheus_ready' metric for the last 15 minutes +start_time = parse_datetime("15m") +end_time = parse_datetime("now") +chunk_size = timedelta(minutes=15) + +metric_data = prom.get_metric_range_data( + metric_name='prometheus_ready', + start_time=start_time, + end_time=end_time, + chunk_size=chunk_size, +) + +print(metric_data[0]['values']) diff --git a/prometheus_api_client/prometheus_connect.py b/prometheus_api_client/prometheus_connect.py index b117d88..ad54ed5 100644 --- a/prometheus_api_client/prometheus_connect.py +++ b/prometheus_api_client/prometheus_connect.py @@ -34,6 +34,8 @@ class PrometheusConnect: :param disable_ssl: (bool) If set to True, will disable ssl certificate verification for the http requests made to the prometheus host :param retry: (Retry) Retry adapter to retry on HTTP errors + :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. See python + requests library auth parameter for further explanation. """ def __init__( @@ -42,6 +44,7 @@ def __init__( headers: dict = None, disable_ssl: bool = False, retry: Retry = None, + auth: tuple = None ): """Functions as a Constructor for the class PrometheusConnect.""" if url is None: @@ -60,6 +63,8 @@ def __init__( status_forcelist=RETRY_ON_STATUS, ) + self.auth = auth + self._session = requests.Session() self._session.mount(self.url, HTTPAdapter(max_retries=retry)) @@ -76,6 +81,7 @@ def check_prometheus_connection(self, params: dict = None) -> bool: verify=self.ssl_verification, headers=self.headers, params=params, + auth=self.auth, ) return response.ok @@ -112,6 +118,7 @@ def get_label_values(self, label_name: str, params: dict = None): verify=self.ssl_verification, headers=self.headers, params=params, + auth=self.auth, ) if response.status_code == 200: @@ -161,6 +168,7 @@ def get_current_metric_value( params={**{"query": query}, **params}, verify=self.ssl_verification, headers=self.headers, + auth=self.auth, ) if response.status_code == 200: @@ -251,6 +259,7 @@ def get_metric_range_data( }, verify=self.ssl_verification, headers=self.headers, + auth=self.auth, ) if response.status_code == 200: data += response.json()["data"]["result"] @@ -348,6 +357,7 @@ def custom_query(self, query: str, params: dict = None): params={**{"query": query}, **params}, verify=self.ssl_verification, headers=self.headers, + auth=self.auth, ) if response.status_code == 200: data = response.json()["data"]["result"] @@ -390,6 +400,7 @@ def custom_query_range( params={**{"query": query, "start": start, "end": end, "step": step}, **params}, verify=self.ssl_verification, headers=self.headers, + auth=self.auth, ) if response.status_code == 200: data = response.json()["data"]["result"]