# n8n S3 Migration Clean API ## Описание Скрипт `n8n_s3_migration_clean.php` предназначен для автоматической миграции файлов из локального хранилища в S3 с выводом **ТОЛЬКО чистого JSON** без логов для максимально удобного парсинга в n8n. ## Использование ### Прямой вызов PHP ```bash php n8n_s3_migration_clean.php [LIMIT] [DRY_RUN] ``` ### Через bash wrapper (рекомендуется) ```bash ./n8n_migration_clean.sh ``` ### Переменные окружения - `LIMIT` - количество файлов для обработки (по умолчанию: 20) - `DRY_RUN` - режим тестирования без изменений (0/1, по умолчанию: 0) ## Формат JSON ответа ### Успешное выполнение ```json {"status":"success","timestamp":"2025-09-22 14:37:21","summary":{"total_processed":1,"successfully_migrated":1,"failed":0,"marked_problematic":0,"dry_run":false},"migrated_files":[{"notesid":393084,"filename":"Отказ_от_иска_по_делу__2-3265-2024_1_стр.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/393084/...","local_file_deleted":true}],"problematic_files":[],"exit_code":0} ``` ### Предупреждение (проблемные файлы) ```json {"status":"warning","timestamp":"2025-09-22 14:37:21","summary":{"total_processed":2,"successfully_migrated":1,"failed":0,"marked_problematic":1,"dry_run":false},"migrated_files":[{"notesid":393084,"filename":"file.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/393084/...","local_file_deleted":true}],"problematic_files":[{"notesid":393085,"original_filename":"problematic_file.pdf","problematic_filename":"[PROBLEM_2025-09-22_14-37-21] problematic_file.pdf","reason":"Physical file not found"}],"exit_code":1} ``` ### Частичная ошибка ```json {"status":"partial_error","timestamp":"2025-09-22 14:37:21","summary":{"total_processed":2,"successfully_migrated":1,"failed":1,"marked_problematic":0,"dry_run":false},"migrated_files":[{"notesid":393084,"filename":"file.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/393084/...","local_file_deleted":true}],"problematic_files":[],"exit_code":2} ``` ### Критическая ошибка ```json {"status":"error","timestamp":"2025-09-22 14:37:21","error":"Database connection failed: ...","exit_code":3} ``` ## Коды выхода - `0` - Успех - `1` - Предупреждение (есть проблемные файлы) - `2` - Частичная ошибка (есть неудачные миграции) - `3` - Критическая ошибка (проблемы с БД или S3) ## Поля ответа ### summary - `total_processed` - общее количество обработанных файлов - `successfully_migrated` - успешно мигрированных - `failed` - неудачных миграций - `marked_problematic` - помеченных как проблемные - `dry_run` - режим тестирования ### migrated_files Массив успешно мигрированных файлов: - `notesid` - ID записи в БД - `filename` - имя файла - `s3_url` - URL в S3 (только для реальной миграции) - `s3_key` - ключ в S3 (только для реальной миграции) - `local_file_deleted` - удален ли локальный файл (только для реальной миграции) - `local_file_path` - путь к локальному файлу (только для dry_run) - `dry_run` - режим тестирования (только для dry_run) ### problematic_files Массив проблемных файлов: - `notesid` - ID записи в БД - `original_filename` - оригинальное имя файла - `problematic_filename` - новое имя с префиксом (только для реальной миграции) - `reason` - причина проблемы ## Интеграция с n8n ### SSH Node ```bash ssh user@server "/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/n8n_migration_clean.sh" ``` ### Парсинг JSON ```javascript // В n8n JavaScript Code const result = JSON.parse($input.all()[0].json.stdout); if (result.status === 'success') { return { success: true, migrated: result.summary.successfully_migrated, problematic: result.summary.marked_problematic }; } else if (result.status === 'warning') { return { warning: true, migrated: result.summary.successfully_migrated, problematic: result.problematic_files }; } else { return { error: true, message: result.error || 'Unknown error' }; } ``` ## Мониторинг ### Логи - Основной лог: `/var/www/fastuser/data/www/crm.clientright.ru/logs/n8n_s3_migration.log` - Чистый лог: `/var/www/fastuser/data/www/crm.clientright.ru/logs/n8n_migration_clean.log` ### Cron задача ```bash # Каждые 5 минут */5 * * * * /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/n8n_migration_clean.sh ``` ## Преимущества Clean версии ✅ **Только чистый JSON** - никаких логов в stdout ✅ **Максимально удобный парсинг** - один JSON объект ✅ **Логи в отдельном файле** - для отладки и мониторинга ✅ **Совместимость с n8n** - идеально для автоматизации ✅ **Быстрый парсинг** - минимум обработки данных ## Безопасность - Скрипт работает только с файлами типа 'I' (Internal) - Исключает системные файлы (file_15_*, пустые имена) - Помечает проблемные файлы вместо удаления записей - Логирует все операции для аудита