Files
crm.clientright.ru/crm_extensions/file_storage/N8N_COMMENT_MIGRATION.md

6.7 KiB
Raw Blame History

n8n Comment Files S3 Migration

Описание

Скрипт n8n_comment_migration_clean.php предназначен для автоматической миграции файлов комментариев из локального хранилища в S3 с выводом ТОЛЬКО чистого JSON без логов для максимально удобного парсинга в n8n.

Особенности

  • Работает с файлами комментариев (vtiger_attachments + vtiger_modcomments)
  • Переносит по 100 файлов за раз (настраивается)
  • Помечает перенесенные файлы в БД (s3_key, s3_bucket, s3_etag)
  • Не повторяет перенос уже обработанных файлов
  • Удаляет локальные файлы после успешного переноса
  • Помечает проблемные файлы вместо удаления записей

Использование

Прямой вызов PHP

php n8n_comment_migration_clean.php [LIMIT] [DRY_RUN]

Через bash wrapper (рекомендуется)

./n8n_comment_migration.sh

Переменные окружения

  • LIMIT - количество файлов для обработки (по умолчанию: 100)
  • DRY_RUN - режим тестирования без изменений (0/1, по умолчанию: 0)

Формат JSON ответа

Успешное выполнение

{"status":"success","timestamp":"2025-09-22 15:07:01","summary":{"total_processed":1,"successfully_migrated":1,"failed":0,"marked_problematic":0,"dry_run":false},"migrated_files":[{"attachmentsid":106,"modcommentsid":105,"filename":"определение_от_25.01.2023.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/106/...","local_file_deleted":true}],"problematic_files":[],"exit_code":0}

Предупреждение (проблемные файлы)

{"status":"warning","timestamp":"2025-09-22 15:07:01","summary":{"total_processed":2,"successfully_migrated":1,"failed":0,"marked_problematic":1,"dry_run":false},"migrated_files":[{"attachmentsid":106,"modcommentsid":105,"filename":"file.pdf","s3_url":"https://s3.twcstorage.ru/...","s3_key":"crm2/CRM_Active_Files/Documents/106/...","local_file_deleted":true}],"problematic_files":[{"attachmentsid":107,"modcommentsid":106,"original_filename":"problematic_file.pdf","problematic_filename":"[PROBLEM_2025-09-22_15-07-01] problematic_file.pdf","reason":"Physical file not found"}],"exit_code":1}

Коды выхода

  • 0 - Успех
  • 1 - Предупреждение (есть проблемные файлы)
  • 2 - Частичная ошибка (есть неудачные миграции)
  • 3 - Критическая ошибка (проблемы с БД или S3)

Поля ответа

summary

  • total_processed - общее количество обработанных файлов
  • successfully_migrated - успешно мигрированных
  • failed - неудачных миграций
  • marked_problematic - помеченных как проблемные
  • dry_run - режим тестирования

migrated_files

Массив успешно мигрированных файлов:

  • attachmentsid - ID файла в vtiger_attachments
  • modcommentsid - ID комментария
  • filename - имя файла
  • s3_url - URL в S3 (только для реальной миграции)
  • s3_key - ключ в S3 (только для реальной миграции)
  • local_file_deleted - удален ли локальный файл (только для реальной миграции)
  • local_file_path - путь к локальному файлу (только для dry_run)
  • dry_run - режим тестирования (только для dry_run)

problematic_files

Массив проблемных файлов:

  • attachmentsid - ID файла в vtiger_attachments
  • modcommentsid - ID комментария
  • original_filename - оригинальное имя файла
  • problematic_filename - новое имя с префиксом (только для реальной миграции)
  • reason - причина проблемы

Интеграция с n8n

SSH Node

ssh user@server "/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/n8n_comment_migration.sh"

Парсинг JSON

// В 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_comment_migration.log

Cron задача

# Каждые 10 минут для комментариев
*/10 * * * * /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/n8n_comment_migration.sh

Отличия от основного скрипта

  1. Работает с vtiger_attachments вместо vtiger_notes
  2. Связан с комментариями через vtiger_modcomments
  3. Добавлены поля S3 в таблицу vtiger_attachments (s3_key, s3_bucket, s3_etag, s3_url)
  4. Сохраняет оригинальное имя файла в поле name для корректного отображения в CRM
  5. S3 URL сохраняется в отдельном поле s3_url
  6. Больший лимит по умолчанию (100 файлов)
  7. Отдельная логика поиска файлов для комментариев

Безопасность

  • Скрипт работает только с файлами без S3 метаданных
  • Исключает системные файлы (file_15_*, пустые имена)
  • Помечает проблемные файлы вместо удаления записей
  • Логирует все операции для аудита
  • Не повторяет перенос уже обработанных файлов