Микросервис для синхронизации работы подов. См. задание.
Целью работы сервиса является синхронизация работы подов с их статусами в базе данных.
В корневой директории создайте файл .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 имеет следующий вид:
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"
}