SLO API
CRUD-операции для Service Level Objectives (SLO). Все эндпоинты требуют JWT-аутентификации.
Модель SLO
json
{
"id": 1,
"name": "Доступность API",
"description": "Мониторинг доступности основного API-сервиса",
"target": 99.9,
"time_window": "30d",
"metric_type": "availability",
"metric_query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
"team_id": 1,
"team_name": "Команда платформы",
"created_by": 1,
"created_by_name": "Иван Петров",
"active": true,
"created_at": "2026-06-01T10:00:00Z",
"updated_at": "2026-06-10T15:30:00Z"
}GET /slos
Список SLO с поддержкой пагинации и фильтрации по команде.
Параметры запроса
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
page | int | 1 | Номер страницы |
page_size | int | 10 | Количество элементов на странице |
team_id | int | — | Фильтр по ID команды |
Успешный ответ (200)
json
{
"success": true,
"data": {
"slos": [
{
"id": 1,
"name": "Доступность API",
"target": 99.9,
"time_window": "30d",
"metric_type": "availability",
"team_id": 1,
"active": true,
"created_at": "2026-06-01T10:00:00Z"
}
],
"total": 15,
"page": 1,
"page_size": 10,
"has_next": true
}
}POST /slos
Создание нового SLO.
Тело запроса
json
{
"name": "Доступность API",
"description": "Мониторинг доступности основного API-сервиса",
"target": 99.9,
"time_window": "30d",
"metric_type": "availability",
"metric_query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
"team_id": 1
}Поля time_window принимает: 1h, 24h, 7d, 30d, 90d. Поля metric_type: availability, latency, throughput.
Успешный ответ (201)
json
{
"success": true,
"data": {
"id": 1,
"name": "Доступность API",
"target": 99.9,
"time_window": "30d",
"metric_type": "availability",
"status": "created"
}
}GET /slos/:id
Получение SLO по ID.
Успешный ответ (200)
json
{
"success": true,
"data": {
"id": 1,
"name": "Доступность API",
"description": "Мониторинг доступности основного API-сервиса",
"target": 99.9,
"time_window": "30d",
"metric_type": "availability",
"metric_query": "sum(rate(http_requests_total{status=~\"2..\"}[5m])) / sum(rate(http_requests_total[5m]))",
"team_id": 1,
"created_by": 1,
"active": true,
"created_at": "2026-06-01T10:00:00Z",
"updated_at": "2026-06-10T15:30:00Z"
}
}PUT /slos/:id
Обновление SLO. Все поля опциональны — отправляются только изменяемые.
Тело запроса
json
{
"target": 99.95,
"description": "Ужесточённый SLO для критического API"
}Успешный ответ (200)
json
{
"success": true,
"data": {
"id": 1,
"name": "Доступность API",
"target": 99.95,
"description": "Ужесточённый SLO для критического API",
"time_window": "30d",
"metric_type": "availability",
"active": true
}
}DELETE /slos/:id
Удаление SLO.
Успешный ответ (200)
json
{
"success": true,
"message": "SLO успешно удалён"
}Сводная таблица
| Метод | Путь | Описание |
|---|---|---|
| GET | /slos | Список SLO с пагинацией |
| POST | /slos | Создание нового SLO |
| GET | /slos/:id | Получение SLO по ID |
| PUT | /slos/:id | Частичное обновление SLO |
| DELETE | /slos/:id | Удаление SLO |