# Изменено: 2026-03-14 # Функция event-monitor: считает строки в events. # Если больше 50 — публикует сообщение в RabbitMQ queue "cleanup-needed". # Запускается по cron (каждую минуту). # Env: # POSTGRES_DSN — строка подключения к PostgreSQL # RABBITMQ_URL — amqp://sless:sless123@rabbitmq.sless.svc.cluster.local:5672/ import os import json import psycopg2 import pika THRESHOLD = 50 def handle(request): """Мониторит таблицу events. При переполнении шлёт в RabbitMQ.""" dsn = os.environ["POSTGRES_DSN"] rabbit_url = os.environ["RABBITMQ_URL"] conn = psycopg2.connect(dsn) try: with conn.cursor() as cur: # Считаем количество событий cur.execute("SELECT COUNT(*) FROM events") count = cur.fetchone()[0] finally: conn.close() result = {"count": count, "threshold": THRESHOLD, "action": "none"} if count > THRESHOLD: # Публикуем в очередь — event-cleaner получит и удалит старые строки params = pika.URLParameters(rabbit_url) connection = pika.BlockingConnection(params) channel = connection.channel() channel.queue_declare(queue="cleanup-needed", durable=True) channel.basic_publish( exchange="", routing_key="cleanup-needed", body=json.dumps({"count": count, "delete_n": 10}), properties=pika.BasicProperties(delivery_mode=2) # persistent ) connection.close() result["action"] = "cleanup_requested" return json.dumps(result), 200, {"Content-Type": "application/json"}