mirror of
https://forgejo.altau.su/lego/lego-monitoring.git
synced 2026-03-10 04:41:10 +00:00
60 lines
1.8 KiB
Python
Executable file
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())
|