init stacks
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
from fastapi import APIRouter
|
||||
from api.connectors.prometheus import query_scalar
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
CPU_AVG_QUERY = """
|
||||
avg_over_time(
|
||||
100 - (
|
||||
avg by (instance) (
|
||||
rate(node_cpu_seconds_total{mode="idle"}[1m])
|
||||
) * 100
|
||||
)
|
||||
[20m])
|
||||
"""
|
||||
|
||||
CPU_SLOPE_QUERY = """
|
||||
deriv(
|
||||
100 - (
|
||||
avg by (instance) (
|
||||
rate(node_cpu_seconds_total{mode="idle"}[1m])
|
||||
) * 100
|
||||
)
|
||||
[20m])
|
||||
"""
|
||||
|
||||
def analyze_cpu(cpu_avg: float, cpu_slope: float) -> dict:
|
||||
if cpu_avg > 90:
|
||||
status = "RISK_CPU"
|
||||
reason = "CPU très élevé"
|
||||
elif cpu_avg > 80:
|
||||
status = "WARN_CPU"
|
||||
reason = "CPU élevé"
|
||||
else:
|
||||
status = "OK"
|
||||
reason = "CPU normal"
|
||||
|
||||
trend = "increasing" if cpu_slope > 0.5 else "stable"
|
||||
|
||||
return {
|
||||
"status": status,
|
||||
"avg": round(cpu_avg, 2),
|
||||
"trend": trend,
|
||||
"reason": reason
|
||||
}
|
||||
|
||||
@router.get("/cpu")
|
||||
def cpu_analysis():
|
||||
avg = query_scalar(CPU_AVG_QUERY)
|
||||
slope = query_scalar(CPU_SLOPE_QUERY)
|
||||
|
||||
if avg is None or slope is None:
|
||||
return {
|
||||
"status": "UNKNOWN",
|
||||
"reason": "Prometheus data unavailable"
|
||||
}
|
||||
|
||||
return analyze_cpu(avg, slope)
|
||||
Reference in New Issue
Block a user