delayed login alerts to prevent spam with mass logins

This commit is contained in:
Alex 2025-01-07 17:42:00 +03:00
parent 0e177210f6
commit b1b06b2e51
8 changed files with 100 additions and 7 deletions

View file

@ -2,11 +2,14 @@
import asyncio
import datetime
import logging
import os
import shutil
import signal
from alerting import alerts
from alerting import alerts, delayed
from misc import checks, cvars
from misc.checkers import interval_checker, scheduled_checker
from misc.common import TMP_DIR
from misc.config import get_config
logging.basicConfig(level=logging.INFO)
@ -19,9 +22,28 @@ def stop_gracefully(signum, frame):
stopping = True
def create_temp_dir() -> None:
try:
os.mkdir(str(TMP_DIR))
except FileExistsError:
pass
os.chmod(str(TMP_DIR), 0o770)
try:
shutil.chown(str(TMP_DIR), user="root", group="alerting")
except LookupError:
shutil.chown(str(TMP_DIR), user="root", group="root")
with open(str(TMP_DIR / "pid"), "w") as pf:
pf.write(str(os.getpid()))
async def main():
create_temp_dir()
signal.signal(signal.SIGTERM, stop_gracefully)
loop = asyncio.get_event_loop()
loop.add_signal_handler(signal.SIGUSR1, lambda: asyncio.create_task(delayed.handler()))
cvars.config.set(get_config())
client = await alerts.get_client()
@ -46,6 +68,7 @@ async def main():
while True:
if stopping:
await client.close()
shutil.rmtree(str(TMP_DIR))
raise SystemExit
else:
await asyncio.sleep(3)