8000 GitHub - WilliamQosmos/test_case
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

WilliamQosmos/test_case

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание

Схема БД

Таблица «servers»

Имя поля Тип Описание
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 Время последнего обновления записи

Таблица «files»

Имя поля Тип Описание
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 beat

  1. Загрузка серверов из БД, запуск задач в Celery для проверки каждого сервера Task - Check new files
  2. Инициализация подключения к серверу через SFTPClient с использованием context managers
  3. Получение списка файлов с их атрибутами (включая время модификации)
  4. Пакетная проверка файлов в базе данных:
    • Получение всех существующих файлов одним запросом
    • Сравнение времени модификации для определения измененных файлов
    • Создание новых записей только для отсутствующих или измененных файлов
  5. Для каждого нового/измененного файла:
    • Создание записи в БД со статусом 'pending'
    • Добавление задачи в очередь Celery на скачивание
  6. При выполнении задачи скачивания:
    • Проверка текущего статуса файла (пропуск если уже 'success')
    • Скачивание файла с SFTP и загрузка в MinIO
    • Обновление статуса в БД на 'success'
    • Отправка уведомления в RabbitMQ
  7. Обработка ошибок:
    • При ошибке отправки в очередь - обновление статуса на 'error'
    • При ошибке скачивания - повторная попытка (до 3 раз)
    • При ошибке отправки уведомления - логирование без повторной загрузки

Оптимизации

  • Пакетная обработка файлов для минимизации запросов к БД
  • Использование context managers для автоматического закрытия соединений
  • Проверка времени модификации файлов для избежания повторных загрузок
  • Пропуск повторной загрузки успешно обработанных файлов
  • Обработка ошибок на каждом этапе процесса

Подводные камни и внештатные ситуации

  • Проблемы с сетью
  • Проблема с аутентификацией на сервере SFTP
  • Переполнение очереди RabbitMQ
  • Если файл слишком большой, может произойти переполнение памяти или сбой
  • Большое время ответа сервера
  • Очистка MinIO от ненужных файлов для защиты от переполнения (не реализовано)
  • Перегрузка сервера при большом количестве задач
  • Повреждение файла при скачивании (не обработано)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

0