lego-monitoring/service.py
2024-11-09 13:57:32 +03:00

60 lines
1.8 KiB
Python
Executable file

#!/usr/bin/env python3
import asyncio
import datetime
import json
import logging
import signal
import aiofiles
from alerting import alerts
from alerting.common import CONFIG_FILE
from misc import checks, cvars
from misc.checkers import interval_checker, scheduled_checker
logging.basicConfig(level=logging.INFO)
stopping = False
def stop_gracefully(signum, frame):
global stopping
stopping = True
async def main():
signal.signal(signal.SIGTERM, stop_gracefully)
async with aiofiles.open(CONFIG_FILE) as f:
contents = await f.read()
cvars.config.set(json.loads(contents))
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)
),
)
async with asyncio.TaskGroup() as tg:
checker_tasks: set[asyncio.Task] = set()
for c in checkers:
task = tg.create_task(c)
checker_tasks.add(task)
while True:
if stopping:
await client.close()
raise SystemExit
else:
await asyncio.sleep(3)
if __name__ == "__main__":
asyncio.run(main())