Сервис синхронизации подов
Микросервис для синхронизации работы подов. См. задание.
Целью работы сервиса является синхронизация работы подов с их статусами в базе данных.
Настройка
В корневой директории создайте файл .env
, указав параметры подключения к базе данных:
POSTGRES_DB=db
POSTGRES_USER=user
POSTGRES_PASSWORD=password
Перечень доступных параметров сервиса со значениями по умолчанию:
PSY__SYNC__INTERVAL
— интервал синхронизации (5m).
PSY__STORAGE__MIN_CONNS
— минимальное количество соединений в пуле (1).
PSY__STORAGE__MAX_CONNS
— максимальное количество соединений в пуле (10).
PSY__STORAGE__START_TIMEOUT
— время ожидания при запуске соединения (30s).
PSY__STORAGE__READ_TIMEOUT
— время ожидания чтения из хранилища (5s).
PSY__STORAGE__WRITE_TIMEOUT
— время ожидания записи в хранилище (5s).
PSY__STORAGE__IDLE_TIMEOUT
— время простоя соединения перед закрытием (30m).
PSY__STORAGE__LIFETIME_JITTER
— случайное отклонение времени жизни соединения (30s).
PSY__HTTP__READ_TIMEOUT
— время ожидания чтения полного запроса (5s).
PSY__HTTP__WRITE_TIMEOUT
— время ожидания записи ответа клиенту (5s).
PSY__HTTP__IDLE_TIMEOUT
— максимальное время простоя соединения (60s).
PSY__HTTP__SHUTDOWN_TIMEOUT
— время ожидания завершения работы сервера (10s).
Запуск
Сервис запускается с помощью docker-compose:
docker-compose up -d
docker-compose down
В ходе выполнения команды будет развёрнуто два контейнера:
watcher
— HTTP сервер (порт 8081
).
storage
— база данных PostgreSQL (порт 5433
).
API
Любой ответ API имеет следующий вид:
000 Status Code
Content-Type: application/json
{
"status": "status",
"message": "message"
}
Поле status
принимает значения ok
или error
. Поле message
опционально.
Здоровье сервиса
GET /api/health
200 OK
{
"status": "ok"
}
Создание клиента
POST /api/v1/clients
{
"name": "Jimbo",
"version": 1,
"image": "...",
"cpu": "...",
"mem": "...",
"priority": 0.26
}
201 Created
{
"status": "ok",
"message": "client created successfully"
}
400 Bad Request
500 Internal Server Error
Обновление клиента
PUT /api/v1/clients/{id:[0-9]+}
{
"name": "Jimbo",
"version": 2,
"image": "...",
"cpu": "...",
"mem": "...",
"priority": 0.26
}
200 OK
{
"status": "ok",
"message": "client updated successfully"
}
400 Bad Request
404 Not Found
500 Internal Server Error
Удаление клиента
DELETE /api/v1/clients/{id:[0-9]+}
204 No Content
404 Not Found
500 Internal Server Error
Обновление статуса
PUT /api/v1/status/{id:[0-9]+}?need_restart=true
{
"X": true,
"Y": false,
"Z": true
}
200 OK
{
"status": "ok",
"message": "status updated successfully"
}
400 Bad Request
404 Not Found
500 Internal Server Error
Логирование
Логирование осуществляется в stdout
контейнера watcher
.
Все операции по созданию/удалению подов сопровождаются соответствующими записями в лог:
{
"time": "2024-07-19T00:15:22.138231926Z",
"level": "INFO",
"msg": "operation completed",
"component": "sync/watcher",
"pod_operation": "<CREATE> X-168317"
}