feat: demo managed functions with harbor-backed operator setup
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Изменено: 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"}
|
||||
Reference in New Issue
Block a user