# 🎉 ФИНАЛЬНАЯ СВОДКА - S3 МОНИТОРИНГ ## ✅ ЧТО РАБОТАЕТ: ### 1️⃣ **S3 Monitor** (Docker контейнер) ``` Контейнер: s3-monitor Статус: ✅ Работает Bucket: f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c Файлов: 24,523 Интервал: каждые 30 секунд Автоперезапуск: ✅ ``` **Что делает:** - Каждые 30 секунд сканирует S3 bucket - Получает **ВСЕ** файлы (24,523 штук через pagination) - Сравнивает с предыдущим состоянием - Публикует изменения в Redis **Команды:** ```bash docker logs s3-monitor -f # Логи в реальном времени docker stop s3-monitor # Остановить docker start s3-monitor # Запустить docker restart s3-monitor # Перезапустить ``` --- ### 2️⃣ **Redis Bridge** (Nextcloud → CRM Redis) ``` Процесс: /usr/bin/nodejs redis_bridge.js Статус: ✅ Работает Порт NC Redis: 127.0.0.1:6380 Порт CRM Redis: 147.45.146.17:6379 ``` **Что делает:** - Слушает Nextcloud Redis канал `notify_storage_update` - Фильтрует временные файлы (.part, .lock, cache) - **Дедупликация** - один file_id = одно событие (в течение 5 сек) - Публикует в CRM Redis канал `crm:file:events` **Команды:** ```bash tail -f redis_bridge.log # Логи ps aux | grep redis_bridge # Статус pkill -f redis_bridge.js # Остановить nohup /usr/bin/nodejs redis_bridge.js > redis_bridge.log 2>&1 & # Запустить ``` --- ### 3️⃣ **Redis Канал** (централизованная шина событий) ``` Host: 147.45.146.17 Port: 6379 Password: CRM_Redis_Pass_2025_Secure! Channel: crm:file:events ``` --- ## 📊 ФОРМАТ СОБЫТИЙ: ### От S3 Monitor: ```json { "type": "file_created", "source": "s3_monitor", "timestamp": "2025-10-30T20:49:31.593Z", "path": "folder/subfolder/file.xlsx", "filename": "file.xlsx", "action": "created", "size": 8224, "etag": "7004954627252c9d0a7e6417f8325d07", "last_modified": "2025-10-30T20:49:14.132Z" } ``` ### От Nextcloud (redis_bridge): ```json { "type": "file_update", "source": "nextcloud", "timestamp": "2025-10-30T20:52:21.236Z", "storage_id": 4, "path": "crm2/CRM_Active_Files/file.pdf", "file_id": 42594, "filename": "file.pdf", "operation": "update" } ``` **Оба публикуются в один канал:** `crm:file:events` --- ## 🎯 КАК ОБРАБАТЫВАТЬ В N8N: ### Шаг 1: Импортируй workflow обработчик Файл: `n8n_s3_event_processor.json` ### Шаг 2: Настрой Redis Trigger ``` Node: Redis Subscribe Channel: crm:file:events Credential: CRM Redis ``` ### Шаг 3: Parse JSON (если нужно) ```javascript // n8n автоматически парсит, но если нужно: const message = $json.message; const event = typeof message === 'string' ? JSON.parse(message) : message; return [{ json: event }]; ``` ### Шаг 4: Фильтруй по типу ```javascript // Только новые файлы $json.type === 'file_created' // Только XLSX $json.filename.endsWith('.xlsx') // Только из определённой папки $json.path.includes('Documents/') ``` ### Шаг 5: Обработай файл ``` Switch по расширению: ├─ .xlsx → Обработка Excel ├─ .pdf → OCR и извлечение данных ├─ .jpg → Обработка изображений └─ Другие → Логирование ``` --- ## 🧪 ПРОВЕРКА СОБЫТИЙ: ### Подпишись на Redis: ```bash redis-cli -h 147.45.146.17 -p 6379 -a 'CRM_Redis_Pass_2025_Secure!' \ SUBSCRIBE crm:file:events ``` ### Загрузи файл: - Через Nextcloud WebUI - Через S3 Browser - Через aws-cli ### Увидишь событие: ``` 1) "message" 2) "crm:file:events" 3) "{\"type\":\"file_created\",\"filename\":\"test.pdf\",...}" ``` --- ## 📋 ИСТОЧНИКИ СОБЫТИЙ: | Источник | Метод | Задержка | Фильтры | |----------|-------|----------|---------| | **Nextcloud WebUI** | Redis Bridge | 1-2 сек | ✅ Дедупликация
✅ Фильтр .part
✅ Фильтр cache | | **S3 прямая загрузка** | S3 Monitor | 0-30 сек | Нет | | **CRM API** | Прямая публикация | 0 сек | Настраивается | --- ## 🔧 ДОПОЛНИТЕЛЬНАЯ ФИЛЬТРАЦИЯ В N8N: Если всё ещё приходит много событий от Nextcloud, добавь в n8n: ```javascript // Фильтр: пропускаем дубликаты по filename + timestamp const cache = $getWorkflowStaticData('node'); cache.recent = cache.recent || []; const key = `${$json.filename}_${$json.file_id}`; const now = Date.now(); // Очищаем старые (>10 секунд) cache.recent = cache.recent.filter(item => (now - item.time) < 10000); // Проверяем дубликат if (cache.recent.find(item => item.key === key)) { return []; // Пропускаем дубликат } // Добавляем в кеш cache.recent.push({ key, time: now }); return [$input.item]; ``` --- ## 📁 ФАЙЛЫ: Все в: ``` /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/ ``` **Рабочие скрипты:** - ✅ `s3_monitor_docker.js` - S3 мониторинг (запущен в Docker) - ✅ `redis_bridge.js` - Nextcloud→CRM мост (запущен) - ✅ `.env.s3monitor` - credentials для S3 **N8N Workflows для импорта:** - `n8n_s3_event_processor.json` - обработчик событий (НОВЫЙ!) - `n8n_nextcloud_activity_monitor.json` - альтернатива через Activity API - `n8n_s3_monitor_workflow.json` - альтернатива S3 Monitor (если не хочешь Docker) **Документация:** - `SETUP_CHECKLIST.md` - чек-лист настройки - `S3_MONITORING_GUIDE.md` - руководство по S3 - `ARCHITECTURE.md` - схема архитектуры - `NEXTCLOUD_API_OVERVIEW.md` - обзор Nextcloud API --- ## 🎉 ГОТОВО! **Система полностью работает:** - ✅ S3 мониторинг (24,523 файла) - ✅ Nextcloud мониторинг (с дедупликацией) - ✅ Redis публикация - ✅ Автоперезапуск - ✅ Фильтрация дубликатов **Теперь импортируй `n8n_s3_event_processor.json` в n8n и начинай обрабатывать файлы!** 🚀