# Изменено: 2026-03-14 # Функция event-cleaner: удаляет N самых старых строк из таблицы events. # Вызывается через HTTP POST из Node-RED (который слушает RabbitMQ). # Env: POSTGRES_DSN — строка подключения к PostgreSQL. import os import json import psycopg2 def handle(request): """Удаляет N старейших строк из таблицы events.""" dsn = os.environ["POSTGRES_DSN"] body = {} if request.get_data(): try: body = json.loads(request.get_data()) except Exception: pass # Количество строк для удаления — из тела запроса или дефолт 10 delete_n = int(body.get("delete_n", 10)) # Защита от случайного удаления слишком большого количества строк delete_n = min(delete_n, 100) conn = psycopg2.connect(dsn) try: with conn.cursor() as cur: cur.execute(""" DELETE FROM events WHERE id IN ( SELECT id FROM events ORDER BY created_at ASC LIMIT %s ) """, (delete_n,)) deleted = cur.rowcount cur.execute("SELECT COUNT(*) FROM events") remaining = cur.fetchone()[0] conn.commit() return json.dumps({ "ok": True, "deleted": deleted, "remaining": remaining }), 200, {"Content-Type": "application/json"} finally: conn.close()