Service Catalog
Каталог сервисов — единая точка входа для обзора всех SLO по сервисам с drill-down до конкретных SLO.
Обзор
На странице /services отображаются карточки всех сервисов с агрегированной статистикой:
- Общее количество SLO
- Сколько healthy / at_risk / breached / no_data
- Общий health score (%)
- Статус-бейдж (вычисляется по приоритету: breached > at_risk > no_data > healthy)
Клик по карточке открывает детальный вид сервиса с полным списком SLO. Каждый SLO кликается и ведёт на страницу деталей /slos/{id}.
API
GET /api/v1/services
Возвращает список всех сервисов с агрегированной статистикой.
Аутентификация: Bearer token
Ответ:
json
{
"services": [
{
"name": "Gurushots Challenges Found",
"status": "healthy",
"total_slos": 1,
"healthy": 1,
"at_risk": 0,
"breached": 0,
"no_data": 0,
"overall_score": 100.0
}
]
}GET /api/v1/services/
Возвращает детали сервиса со списком всех SLO и описанием.
Параметры пути:
name— название сервиса (URL-encoded)
Ответ:
json
{
"name": "Gurushots Challenges Found",
"description": "SLO для поиска челенджей пользователей",
"total_slos": 1,
"slos": [
{
"id": 1,
"slo_name": "API availability",
"target": 99.9,
"budgeting_period": "30d",
"indicator_type": "availability",
"current_value": 99.95,
"status": "healthy"
}
]
}PUT /api/v1/service-descriptions/
Создаёт или обновляет описание сервиса.
Тело запроса:
json
{ "description": "API для поиска челенджей пользователей. Владелец: backend-team." }Ограничения: максимум 2000 символов.
Хранение
Описания хранятся в таблице service_descriptions:
| Колонка | Тип | Описание |
|---|---|---|
| service_name | TEXT PRIMARY KEY | Название сервиса |
| description | TEXT NOT NULL | Описание |
| updated_at | TIMESTAMPTZ | Время последнего обновления |
Миграция: migrations/000009_service_descriptions.up.sql