Files
checkbot/app/web/selftest_pages.py
patrickandClaude Sonnet 5.5 453c077386 feat: Phase 6d API-Selbsttest gegen Checkmk
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>
2026-11-06 12:55:57 +01:00

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)