Lesender Selbsttest (Version, Services, Hosts, Downtimes) beim Start und täglich 04:00, Seite /selftest, Teilcheck checkmk_api in /health, Chat-Meldung bei Wechsel. Toleranter Antwort-Parser (value/members, state_type int/String), Fallbacks für Host-Abfrage und Downtime-Liste, Fehlerhinweise je HTTP-Status. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from fastapi import APIRouter, Depends, Request
|
|
|
|
from ..selftest import CHECK_LABELS
|
|
from ..users import User
|
|
from .deps import FLASH_ERROR, FLASH_OK, current_user, flash, redirect, render, require_admin
|
|
|
|
router = APIRouter()
|
|
|
|
PATH = "/selftest"
|
|
RUN_PATH = PATH + "/run"
|
|
MSG_RATE_LIMITED = "Bitte kurz warten (höchstens 1x alle 30 s)."
|
|
MSG_NOT_CONFIGURED = "Checkmk ist nicht konfiguriert."
|
|
|
|
|
|
@router.get(PATH)
|
|
def selftest_page(request: Request, user: User = Depends(current_user)):
|
|
run = request.app.state.runtime.selftest.last_run()
|
|
return render(request, "selftest.html", user=user, run=run, check_labels=CHECK_LABELS)
|
|
|
|
|
|
@router.post(RUN_PATH)
|
|
async def selftest_run(request: Request, admin: User = Depends(require_admin)):
|
|
runner = request.app.state.runtime.selftest_runner
|
|
if not runner.try_manual():
|
|
flash(request, MSG_RATE_LIMITED, FLASH_ERROR)
|
|
return redirect(PATH)
|
|
run = await runner.run_manual(admin.username)
|
|
if run is None:
|
|
flash(request, MSG_NOT_CONFIGURED, FLASH_ERROR)
|
|
else:
|
|
flash(request, f"Selbsttest ausgeführt: {run.overall_status}.", FLASH_OK if run.ok else FLASH_ERROR)
|
|
return redirect(PATH)
|