remind about persistent alerts

This commit is contained in:
Alex Tau 2025-06-06 00:46:44 +03:00
parent 2c234b2fd0
commit f691180e9b
9 changed files with 115 additions and 30 deletions

View file

@ -3,6 +3,7 @@ import asyncio
import datetime
import logging
import signal
from typing import Coroutine
from . import checks
from .alerting import channel
@ -10,7 +11,7 @@ from .checks.temp.sensors import print_readings
from .config import enums as config_enums
from .config import load_config
from .core import cvars
from .core.checkers import IntervalChecker
from .core.checkers import BaseChecker, IntervalChecker, ScheduledChecker
stopping = False
@ -52,25 +53,35 @@ async def async_main():
check_sets = config_enums.CheckSet
checker_sets = {
checker_sets: dict[config_enums.CheckSet, list[Coroutine | BaseChecker]] = {
check_sets.START: [channel.send_start_alert()],
check_sets.STOP: [], # this is checked later
check_sets.CPU: [
IntervalChecker(checks.cpu_check, interval=datetime.timedelta(minutes=3), persistent=True).run_checker()
],
check_sets.RAM: [
IntervalChecker(checks.ram_check, interval=datetime.timedelta(minutes=1), persistent=True).run_checker()
],
check_sets.TEMP: [
IntervalChecker(checks.temp_check, interval=datetime.timedelta(minutes=5), persistent=True).run_checker()
],
check_sets.CPU: [IntervalChecker(checks.cpu_check, interval=datetime.timedelta(minutes=3), persistent=True)],
check_sets.RAM: [IntervalChecker(checks.ram_check, interval=datetime.timedelta(minutes=1), persistent=True)],
check_sets.TEMP: [IntervalChecker(checks.temp_check, interval=datetime.timedelta(minutes=5), persistent=True)],
check_sets.VULNIX: [
IntervalChecker(
checks.vulnix_check, interval=datetime.timedelta(days=3), persistent=True, send_any_state=True
).run_checker()
checks.vulnix_check,
interval=datetime.timedelta(days=3),
persistent=True,
send_any_state=True,
# As those are checked less often than daily, reminds could lead to awkward situations
# when the vuln is fixed but you still get reminders about it for 2 more days.
remind=False,
)
],
check_sets.REMIND: [
ScheduledChecker(
checks.remind_check,
period=datetime.timedelta(days=1),
when=datetime.time(hour=0, minute=0),
persistent=False,
)
],
}
checker_sets[check_sets.REMIND][0].check_args = [checker_sets]
checkers = []
for enabled_set in config.enabled_check_sets:
for checker in checker_sets[enabled_set]:
@ -81,6 +92,8 @@ async def async_main():
async with asyncio.TaskGroup() as tg:
checker_tasks: set[asyncio.Task] = set()
for c in checkers:
if isinstance(c, BaseChecker):
c = c.run_checker()
task = tg.create_task(c)
checker_tasks.add(task)
while True: