Fixes
This commit is contained in:
parent
7a3053741c
commit
d76e54e22d
@ -5,15 +5,11 @@ from fastapi.responses import JSONResponse
|
|||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
# Disse settes av app.py
|
|
||||||
db = None
|
db = None
|
||||||
get_worker_heartbeat = None
|
get_worker_heartbeat = None
|
||||||
|
|
||||||
|
|
||||||
def init_health_api(database, heartbeat_ref):
|
def init_health_api(database, heartbeat_ref):
|
||||||
"""
|
|
||||||
Kalles fra app.py for å gi health-API tilgang til DB og worker-heartbeat.
|
|
||||||
"""
|
|
||||||
global db, get_worker_heartbeat
|
global db, get_worker_heartbeat
|
||||||
db = database
|
db = database
|
||||||
get_worker_heartbeat = heartbeat_ref
|
get_worker_heartbeat = heartbeat_ref
|
||||||
@ -23,20 +19,24 @@ def init_health_api(database, heartbeat_ref):
|
|||||||
async def health():
|
async def health():
|
||||||
db_ok = False
|
db_ok = False
|
||||||
worker_ok = False
|
worker_ok = False
|
||||||
|
db_error = None
|
||||||
|
worker_error = None
|
||||||
|
|
||||||
# Sjekk database
|
# Sjekk database
|
||||||
try:
|
try:
|
||||||
db.ping()
|
db.ping()
|
||||||
db_ok = True
|
db_ok = True
|
||||||
except Exception:
|
except Exception as e:
|
||||||
db_ok = False
|
db_ok = False
|
||||||
|
db_error = str(e)
|
||||||
|
|
||||||
# Sjekk worker heartbeat
|
# Sjekk worker heartbeat
|
||||||
try:
|
try:
|
||||||
last = get_worker_heartbeat()
|
last = get_worker_heartbeat()
|
||||||
worker_ok = (time.time() - last) < 10 # 10 sekunder uten heartbeat = død
|
worker_ok = (time.time() - last) < 10
|
||||||
except Exception:
|
except Exception as e:
|
||||||
worker_ok = False
|
worker_ok = False
|
||||||
|
worker_error = str(e)
|
||||||
|
|
||||||
status = db_ok and worker_ok
|
status = db_ok and worker_ok
|
||||||
|
|
||||||
@ -45,6 +45,8 @@ async def health():
|
|||||||
content={
|
content={
|
||||||
"status": "ok" if status else "error",
|
"status": "ok" if status else "error",
|
||||||
"database": db_ok,
|
"database": db_ok,
|
||||||
"worker": worker_ok
|
"database_error": db_error,
|
||||||
|
"worker": worker_ok,
|
||||||
|
"worker_error": worker_error
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@ -14,26 +14,37 @@ def create_health_app(observers_ref, db_ref, heartbeat_ref):
|
|||||||
|
|
||||||
@app.get("/health")
|
@app.get("/health")
|
||||||
def health():
|
def health():
|
||||||
# Sjekk observers
|
# --- Observer status ---
|
||||||
observers = observers_ref()
|
observers = observers_ref()
|
||||||
observers_ok = all(obs.is_alive() for obs in observers)
|
observers_ok = all(obs.is_alive() for obs in observers)
|
||||||
|
observers_error = None
|
||||||
|
if not observers_ok:
|
||||||
|
dead = [type(obs).__name__ for obs in observers if not obs.is_alive()]
|
||||||
|
observers_error = f"Dead observers: {dead}"
|
||||||
|
|
||||||
# Sjekk database
|
# --- Database status ---
|
||||||
db_ok = False
|
db_ok = False
|
||||||
|
db_error = None
|
||||||
try:
|
try:
|
||||||
db_ref().ping()
|
db_ref().ping()
|
||||||
db_ok = True
|
db_ok = True
|
||||||
except Exception:
|
except Exception as e:
|
||||||
db_ok = False
|
db_ok = False
|
||||||
|
db_error = str(e)
|
||||||
|
|
||||||
# Sjekk worker heartbeat
|
# --- Worker heartbeat ---
|
||||||
worker_ok = False
|
worker_ok = False
|
||||||
|
worker_error = None
|
||||||
try:
|
try:
|
||||||
last = heartbeat_ref()
|
last = heartbeat_ref()
|
||||||
worker_ok = (time.time() - last) < 10
|
worker_ok = (time.time() - last) < 10
|
||||||
except Exception:
|
if not worker_ok:
|
||||||
|
worker_error = f"Heartbeat too old: {time.time() - last:.1f}s"
|
||||||
|
except Exception as e:
|
||||||
worker_ok = False
|
worker_ok = False
|
||||||
|
worker_error = str(e)
|
||||||
|
|
||||||
|
# --- Combined status ---
|
||||||
healthy = observers_ok and db_ok and worker_ok
|
healthy = observers_ok and db_ok and worker_ok
|
||||||
|
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
@ -41,8 +52,11 @@ def create_health_app(observers_ref, db_ref, heartbeat_ref):
|
|||||||
content={
|
content={
|
||||||
"status": "healthy" if healthy else "unhealthy",
|
"status": "healthy" if healthy else "unhealthy",
|
||||||
"observers": observers_ok,
|
"observers": observers_ok,
|
||||||
|
"observers_error": observers_error,
|
||||||
"database": db_ok,
|
"database": db_ok,
|
||||||
"worker": worker_ok
|
"database_error": db_error,
|
||||||
|
"worker": worker_ok,
|
||||||
|
"worker_error": worker_error
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user