Files
patrickandClaude Sonnet 5.5 b937a57602
test / pytest (3.11) (push) Canceled after 0s
test / pytest (3.13) (push) Canceled after 0s
feat: Selbsttest bei Versionswechsel und Spaltenprüfung ohne Probleme
Der Runner prüft die Checkmk-Version alle 5 Minuten und startet bei einem
Wechsel sofort einen Selbsttest (Cooldown, Erstlauf ausgenommen). Die
Spaltenprüfung fragt bei leerer Problemliste eine ungefilterte Stichprobe ab;
leeres Checkmk gilt als nicht prüfbar, nicht als Fehler.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 13:00:36 +01:00

54 lines
1.9 KiB
Python

import asyncio
import time
from typing import Callable
from ..checkmk import CheckmkClient
from .checks import check_downtimes, check_hosts, check_services, check_version
from .model import SelftestRun
from .repository import SelftestRepository
class SelftestNotConfigured(Exception):
pass
class SelftestService:
def __init__(self, store, repo: SelftestRepository,
client_factory: Callable[[object], CheckmkClient | None] = CheckmkClient.from_settings,
clock: Callable[[], float] = time.time):
self._store = store
self._repo = repo
self._client_factory = client_factory
self._clock = clock
def last_run(self) -> SelftestRun | None:
return self._repo.last_run()
async def peek_version(self) -> str | None:
client = self._client_factory(self._store)
if client is None:
return None
try:
_, version = await check_version(client)
finally:
await client.aclose()
return version or None
async def run(self) -> SelftestRun:
client = self._client_factory(self._store)
if client is None:
raise SelftestNotConfigured
try:
version_check, version = await check_version(client)
services_check, services = await check_services(client)
hosts_check, hosts = await check_hosts(client)
downtimes_check = await check_downtimes(client, services, hosts)
finally:
await client.aclose()
previous = await asyncio.to_thread(self._repo.last_run)
version_changed = bool(previous and previous.version and version and previous.version != version)
run = SelftestRun(int(self._clock()), version,
[version_check, services_check, hosts_check, downtimes_check], version_changed)
await asyncio.to_thread(self._repo.save_run, run)
return run