Files
aiform_dev/monitor_redis_direct.py
AI Assistant f72aa59476 Интеграция SSE + Redis Pub/Sub для real-time OCR результатов
🎯 Основные изменения:

Backend:
- Реализован SSE endpoint /events/{task_id} для real-time стриминга событий
- Интеграция Redis Pub/Sub для получения событий от n8n
- Исправлен путь к .env файлу (абсолютный путь)
- Убран префикс /api/v1 для events router
- Добавлено подробное логирование событий

Frontend:
- Переключён на Vite dev mode для работы proxy
- Настроен proxy /events -> backend:8100
- Реализована модалка с крутилкой при загрузке файла
- SSE клиент для получения OCR результатов в real-time
- Отображение результатов AI анализа в модалке

Docker:
- Frontend: изменён на npm run dev (Vite dev server)
- Добавлен host.docker.internal для доступа к backend
- Настроен proxy в docker-compose

Утилиты:
- monitor_redis_direct.py - мониторинг Redis Pub/Sub
- test_redis_publish_direct.py - тестирование публикации в Redis

🚀 Полная цепочка работает:
Frontend → Backend SSE → Redis Pub/Sub ← n8n → OCR/AI → Result
2025-10-27 19:37:41 +03:00

69 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Мониторинг Redis Pub/Sub для проверки прямой публикации из n8n
"""
import redis
import json
from datetime import datetime
print("=" * 60)
print("🎧 МОНИТОРИНГ REDIS PUB/SUB")
print("=" * 60)
# Подключение к Redis
r = redis.Redis(
host='crm.clientright.ru',
port=6379,
password='CRM_Redis_Pass_2025_Secure!',
decode_responses=True
)
# Проверка подключения
try:
r.ping()
print("✅ Redis подключен!")
except Exception as e:
print(f"❌ Ошибка подключения: {e}")
exit(1)
# Подписка на все каналы ocr_events:*
pubsub = r.pubsub()
pubsub.psubscribe('ocr_events:*')
print(f"📡 Слушаем каналы: ocr_events:*")
print(f"⏰ Запущено: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("-" * 60)
print("\n⏳ Ожидаю события... (Ctrl+C для выхода)\n")
# Счётчик событий
event_count = 0
try:
for message in pubsub.listen():
if message['type'] == 'pmessage':
event_count += 1
print(f"\n{'='*60}")
print(f"📢 СОБЫТИЕ #{event_count}")
print(f"⏰ Время: {datetime.now().strftime('%H:%M:%S')}")
print(f"📺 Канал: {message['channel']}")
print(f"📦 Данные:")
print("-" * 60)
try:
# Пытаемся распарсить как JSON
data = json.loads(message['data'])
print(json.dumps(data, indent=2, ensure_ascii=False))
except json.JSONDecodeError:
# Если не JSON - показываем как есть
print(message['data'])
print(f"{'='*60}\n")
except KeyboardInterrupt:
print(f"\n\n✅ Остановлено. Получено событий: {event_count}")
print(f"⏰ Завершено: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
finally:
pubsub.close()
r.close()