Files
aiform_prod/monitor_redis.py
AI Assistant 647abf6578 feat: Интеграция n8n + Redis Pub/Sub + SSE для real-time обработки заявок
🎯 Основные изменения:

Backend:
-  Добавлен SSE endpoint для real-time событий (/api/v1/events/{task_id})
-  Redis Pub/Sub для публикации/подписки на события OCR/Vision
-  Удален aioboto3 из requirements.txt (конфликт зависимостей)
-  Добавлен OCR worker (deprecated, логика перенесена в n8n)

Frontend (React):
-  Автогенерация claim_id и session_id
-  Клиентская конвертация файлов в PDF (JPG/PNG/HEIC/WEBP)
-  Сжатие изображений до 2MB перед конвертацией
-  SSE подписка на события OCR/Vision в Step1Policy
-  Валидация документов (полис vs неподходящий контент)
-  Real-time прогресс загрузки и обработки файлов
-  Интеграция с n8n webhooks для проверки полиса и загрузки файлов

n8n Workflows:
-  Проверка полиса в MySQL + запись в PostgreSQL
-  Загрузка файлов в S3 + OCR + Vision AI
-  Публикация событий в Redis через backend API
-  Валидация документов (распознавание полисов ERV)

Документация:
- 📝 N8N_INTEGRATION.md - интеграция с n8n
- 📝 N8N_SQL_QUERIES.md - SQL запросы для workflows
- 📝 N8N_PDF_COMPRESS.md - сжатие PDF
- 📝 N8N_STIRLING_COMPRESS.md - интеграция Stirling-PDF

Утилиты:
- 🔧 monitor_redis.py/sh - мониторинг Redis Pub/Sub
- 🔧 test_redis_events.sh - тестирование событий
- 🔧 pdfConverter.ts - клиентская конвертация в PDF

Архитектура:
React → n8n webhooks (sync) → MySQL/PostgreSQL/S3
      → n8n workflows (async) → OCR/Vision → Redis Pub/Sub → SSE → React
2025-10-27 08:33:16 +03:00

58 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Redis Channel Monitor - слушает события на каналах ocr_events:*
"""
import redis
import json
import sys
from datetime import datetime
def monitor_redis_channels():
try:
# Подключаемся к Redis
r = redis.Redis(host='crm.clientright.ru', port=6379, decode_responses=True)
# Создаем PubSub объект
pubsub = r.pubsub()
# Подписываемся на pattern
pubsub.psubscribe('ocr_events:*')
print(f"🔊 Слушаем Redis каналы: ocr_events:*")
print(f"⏰ Начало мониторинга: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("=" * 80)
print()
# Слушаем сообщения
for message in pubsub.listen():
if message['type'] == 'pmessage':
channel = message['channel']
data = message['data']
timestamp = datetime.now().strftime('%H:%M:%S.%f')[:-3]
print(f"{timestamp}")
print(f"📢 Канал: {channel}")
# Пытаемся распарсить JSON
try:
parsed_data = json.loads(data)
print(f"📦 Данные:")
print(json.dumps(parsed_data, indent=2, ensure_ascii=False))
except json.JSONDecodeError:
print(f"📦 Данные (raw): {data}")
print("-" * 80)
print()
except KeyboardInterrupt:
print("\n\n⛔ Мониторинг остановлен")
sys.exit(0)
except Exception as e:
print(f"❌ Ошибка: {e}")
sys.exit(1)
if __name__ == '__main__':
monitor_redis_channels()