From ae1204449c8c6a52d623d3d14f40bd517a1908c2 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 18 Jan 2025 14:47:56 +0300 Subject: [PATCH] disabling checks --- README.md | 4 ++++ config.example.json | 5 ++++- misc/config.py | 1 + service.py | 38 +++++++++++++++++++++++++------------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 96d6123..58417cc 100644 --- a/README.md +++ b/README.md @@ -28,3 +28,7 @@ ForceCommand /opt/lego-monitoring/wrappers/login_wrapper.sh * `prettyprint.py` -- check and print all sensors * `service.py` -- launch service * `assets/lego-monitoring.service` is a systemd unit that starts `service.py` + +### Disabling checks + +Put names of checks into config's `disabled_checks` to disable them. See `service.py` for check names. diff --git a/config.example.json b/config.example.json index 6fe847a..86657f1 100644 --- a/config.example.json +++ b/config.example.json @@ -26,5 +26,8 @@ "login": { "hostname": "example.com" } - } + }, + "disabled_checks": [ + "nonexistent_check" + ] } diff --git a/misc/config.py b/misc/config.py index 6b1fb0c..544d8ca 100644 --- a/misc/config.py +++ b/misc/config.py @@ -55,6 +55,7 @@ class ChecksConfig(NestedDeserializableDataclass): class Config(NestedDeserializableDataclass): matrix: MatrixConfig checks: ChecksConfig + disabled_checks: list[str] def get_config() -> Config: diff --git a/service.py b/service.py index 08978fb..0fe09fe 100755 --- a/service.py +++ b/service.py @@ -44,22 +44,34 @@ async def main(): loop = asyncio.get_event_loop() loop.add_signal_handler(signal.SIGUSR1, lambda: asyncio.create_task(delayed.handler())) - cvars.config.set(get_config()) + config = get_config() + cvars.config.set(config) client = await alerts.get_client() cvars.matrix_client.set(client) - checkers = ( - interval_checker(checks.temp_check, datetime.timedelta(minutes=5)), - interval_checker(checks.cpu_check, datetime.timedelta(minutes=5)), - interval_checker(checks.ups_check, datetime.timedelta(minutes=5)), - interval_checker(checks.ram_check, datetime.timedelta(minutes=1)), - interval_checker(checks.vuln_check, datetime.timedelta(days=1)), - interval_checker(checks.raid_check, datetime.timedelta(days=1)), - interval_checker(checks.disk_wearout_check, datetime.timedelta(days=1)), - scheduled_checker( - checks.docker_registry_check, period=datetime.timedelta(days=1), when=datetime.time(hour=0, minute=0) - ), - ) + + checker_sets = { + "temp": [interval_checker(checks.temp_check, datetime.timedelta(minutes=5))], + "cpu": [interval_checker(checks.cpu_check, datetime.timedelta(minutes=5))], + "ups": [interval_checker(checks.ups_check, datetime.timedelta(minutes=5))], + "ram": [interval_checker(checks.ram_check, datetime.timedelta(minutes=1))], + "vuln": [interval_checker(checks.vuln_check, datetime.timedelta(days=1))], + "raid": [interval_checker(checks.raid_check, datetime.timedelta(days=1))], + "disk_wearout": [interval_checker(checks.disk_wearout_check, datetime.timedelta(days=1))], + "docker_registry": [ + scheduled_checker( + checks.docker_registry_check, period=datetime.timedelta(days=1), when=datetime.time(hour=0, minute=0) + ) + ], + } + for disabled_key in config.disabled_checks: + if disabled_key in checker_sets: + del checker_sets[disabled_key] + checkers = [] + for _, s in checker_sets.items(): + for checker in s: + checkers.append(checker) + async with asyncio.TaskGroup() as tg: checker_tasks: set[asyncio.Task] = set() for c in checkers: