Skip to content

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 с поддержкой пагинации и фильтрации по команде.

Параметры запроса

ПараметрТипПо умолчаниюОписание
pageint1Номер страницы
page_sizeint10Количество элементов на странице
team_idintФильтр по 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