Имя поля | Тип | Описание |
---|---|---|
id | uuid (primary key) | Уникальный идентификатор сервера |
host | string | Адрес сервера |
port | integer | Порт сервера |
username | string | Имя пользователя |
password | text | Зашифрованный пароль |
dir_path | string | Путь до директории отслеживания |
created_at | timestamp without timezone | Время создания записи |
updated_at | timestamp without timezone | Время последнего обновления записи |
Имя поля | Тип | Описание |
---|---|---|
id | uuid (primary key) | Уникальный идентификатор файла |
server_id | uuid (foreign key на Servers) | Идентификатор сервера, с которого был скачан файл |
filename | string | Имя файла |
status | enum | Статус файла ('pending', 'processing', 'success', 'error') |
uri | string, nullable=True | Ссылка на файл в MinIO или путь до него (если доступен) |
error_message | text, nullable=True | Сообщение об ошибке (если есть) |
created_at | timestamp without timezone | Время создания записи |
updated_at | timestamp without timezone | Время последнего обновления записи |
- API для веб-интерфейса (не реализовано)
- Модуль работы с БД (SQLAlchemy)
- DownloadManager (SFTP через Paramiko)
- UploadManager (MinIO через boto3)
- Модуль очереди задач (Celery)
- Модуль уведомлений (RabbitMQ)
- Загрузка серверов из БД, запуск задач в Celery для проверки каждого сервера Task - Check new files
- Инициализация подключения к серверу через SFTPClient с использованием context managers
- Получение списка файлов с их атрибутами (включая время модификации)
- Пакетная проверка файлов в базе данных:
- Получение всех существующих файлов одним запросом
- Сравнение времени модификации для определения измененных файлов
- Создание новых записей только для отсутствующих или измененных файлов
- Для каждого нового/измененного файла:
- Создание записи в БД со статусом 'pending'
- Добавление задачи в очередь Celery на скачивание
- При выполнении задачи скачивания:
- Проверка текущего статуса файла (пропуск если уже 'success')
- Скачивание файла с SFTP и загрузка в MinIO
- Обновление статуса в БД на 'success'
- Отправка уведомления в RabbitMQ
- Обработка ошибок:
- При ошибке отправки в очередь - обновление статуса на 'error'
- При ошибке скачивания - повторная попытка (до 3 раз)
- При ошибке отправки уведомления - логирование без повторной загрузки
- Пакетная обработка файлов для минимизации запросов к БД
- Использование context managers для автоматического закрытия соединений
- Проверка времени модификации файлов для избежания повторных загрузок
- Пропуск повторной загрузки успешно обработанных файлов
- Обработка ошибок на каждом этапе процесса
- Проблемы с сетью
- Проблема с аутентификацией на сервере SFTP
- Переполнение очереди RabbitMQ
- Если файл слишком большой, может произойти переполнение памяти или сбой
- Большое время ответа сервера
- Очистка MinIO от ненужных файлов для защиты от переполнения (не реализовано)
- Перегрузка сервера при большом количестве задач
- Повреждение файла при скачивании (не обработано)