Skip to content

Latest commit

 

History

History
93 lines (66 loc) · 3.72 KB

ASSIGNMENT.md

File metadata and controls

93 lines (66 loc) · 3.72 KB

Общие сведения

Название проекта: Сервис синхронизации пользовательских подов.

Цель проекта: Разработать сервис для автоматической синхронизации состояния пользовательских подов с их статусами в базе данных.

Функциональные требования

  1. Основной функционал
  • Сервис должен периодически проверять статусы подов в базе данных.
  • На основе статусов сервис должен создавать или удалять соответствующие поды в системе.
  • По умолчанию все поды должны быть выключены.
  1. Синхронизация подов
  • Интервал проверки статусов: каждые 5 минут.
  • Логика синхронизации:
    • Если под включен в базе данных, но отсутствует в системе — создать под.
    • Если под выключен в базе данных, но присутствует в системе — удалить под.
    • Если статус пода в базе данных соответствует его наличию/отсутствию в системе — не производить действий.

API Endpoints

Сервис должен предоставлять следующий API:

  1. AddClient()
  • Назначение: Добавление нового клиента в систему.
  • Входные данные: Информация о клиенте.
  • Выходные данные: Идентификатор созданного клиента, статус операции.
  1. UpdateClient()
  • Назначение: Обновление информации о существующем клиенте.
  • Входные данные: Идентификатор клиента, обновляемые поля.
  • Выходные данные: Статус операции.
  1. DeleteClient()
  • Назначение: Удаление клиента из системы.
  • Входные данные: Идентификатор клиента.
  • Выходные данные: Статус операции.
  1. UpdateStatus()
  • Назначение: Обновление статуса пода клиента.
  • Входные данные: Идентификатор статуса, новый статус подов.
  • Выходные данные: Статус операции.

Технические требования

  • Go 1.22
  • Библиотеки и фреймворки: без ограничений
  • Архитектура: REST API
  • База данных: PostgreSQL

Детали реализации

Структура клиента Client и интерфейс Deployer для управления подами:

type Client struct {
    ID          int
    Name        string
    Version     int
    CPU         string
    Memory      string
    Priority    float64
    CreatedAt   time.Time
    UpdatedAt   time.Time
}

type Deployer interface {
    CreatePod(name string) error
    DeletePod(name string) error
    GetPodList() ([]string, error)
}

Таблица status:

Column Type
id int64
client_id int64
X bool
Y bool
Z bool

X, Y, Z — состояния пользовательских подов.