# 🎉 ФИНАЛЬНАЯ СВОДКА - 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 и начинай обрабатывать файлы!** 🚀