66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
import os
|
|
import httpx
|
|
import requests
|
|
|
|
PROMETHEUS_URL = os.getenv("PROMETHEUS_URL")
|
|
|
|
def query_scalar(query: str) -> float | None:
|
|
try:
|
|
r = httpx.get(
|
|
f"{PROMETHEUS_URL}/api/v1/query",
|
|
params={"query": query},
|
|
timeout=5.0,
|
|
)
|
|
r.raise_for_status()
|
|
data = r.json()
|
|
|
|
if data["status"] != "success":
|
|
return None
|
|
|
|
result = data["data"]["result"]
|
|
if not result:
|
|
return None
|
|
|
|
return float(result[0]["value"][1])
|
|
|
|
except Exception:
|
|
return None
|
|
|
|
def query(promql: str):
|
|
r = requests.get(
|
|
f"{PROMETHEUS_URL}/api/v1/query",
|
|
params={"query": promql},
|
|
timeout=3,
|
|
)
|
|
r.raise_for_status()
|
|
return r.json()["data"]["result"]
|
|
|
|
|
|
def get_cpu_usage():
|
|
result = query(
|
|
'100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)'
|
|
)
|
|
return float(result[0]["value"][1]) if result else 0.0
|
|
|
|
|
|
def get_memory_usage():
|
|
result = query(
|
|
'(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100'
|
|
)
|
|
return float(result[0]["value"][1]) if result else 0.0
|
|
|
|
|
|
def get_disk_usage():
|
|
result = query(
|
|
'(1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / '
|
|
'node_filesystem_size_bytes{fstype!~"tmpfs|overlay"})) * 100'
|
|
)
|
|
return float(result[0]["value"][1]) if result else 0.0
|
|
|
|
|
|
def get_container_down():
|
|
result = query(
|
|
'count(container_last_seen{job="cadvisor"} < time() - 60)'
|
|
)
|
|
return int(result[0]["value"][1]) if result else 0
|