Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions examples/amazon-prometheus.py
Original file line number Diff line number Diff line change
@@ -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'])
11 changes: 11 additions & 0 deletions prometheus_api_client/prometheus_connect.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__(
Expand All @@ -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:
Expand All @@ -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))

Expand All @@ -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

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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"]
Expand Down Expand Up @@ -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"]
Expand Down Expand Up @@ -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"]
Expand Down