Business Services API#
Базовый путь:
/api/business-services
Все эндпоинты требуют аутентификации. Права на чтение/запись группы применяются в соответствии с текущими правилами RBAC IncidentRelay.
Список бизнес-сервисов#
GET /api/business-services?group_id=<group_id>
Возвращает бизнес-сервисы, видимые текущему пользователю.
Для пользователей, не являющихся администраторами, group_id обязателен либо определяется по активной группе в зависимости от логики представления.
Ответ со списком включает пересчитанный статус и components_count.
Пример ответа:
[
{
"id": 1,
"group_id": 1,
"group_name": "Production",
"owner_team_id": 2,
"owner_team_name": "Platform",
"slug": "checkout",
"name": "Checkout",
"description": "Customer checkout flow",
"status": "degraded",
"status_source": "calculated",
"status_message": "Affected components: Billing API. Calculated status: degraded, impact score=50",
"status_updated_at": "2026-07-06T10:00:00Z",
"manual_status": null,
"manual_status_message": null,
"manual_status_until": null,
"manual_status_set_by_id": null,
"manual_status_set_at": null,
"manual_status_active": false,
"criticality": "important",
"tier": "tier_2",
"public": true,
"public_name": "Checkout",
"public_description": "Customer checkout flow",
"public_order": 100,
"enabled": true,
"components_count": 3
}
]
Создание бизнес-сервиса#
POST /api/business-services
Тело запроса:
{
"group_id": 1,
"owner_team_id": 2,
"slug": "checkout",
"name": "Checkout",
"description": "Customer checkout flow",
"criticality": "important",
"tier": "tier_2",
"public": true,
"public_name": "Checkout",
"public_description": "Customer checkout flow",
"public_order": 100,
"labels": {},
"metadata": {},
"enabled": true
}
Обязательные поля:
group_id
slug
name
Получение сведений о бизнес-сервисе#
GET /api/business-services/{business_service_id}
Возвращает полный набор данных:
Business Service
+ components
+ status_history
Эндпоинт пересчитывает бизнес-сервис перед сериализацией, если только не активно ручное переопределение.
Ответ включает поля эффективного влияния компонентов:
{
"id": 1,
"slug": "checkout",
"name": "Checkout",
"status": "degraded",
"status_source": "calculated",
"components": [
{
"id": 10,
"business_service_id": 1,
"service_id": 25,
"service_slug": "billing-api",
"service_name": "Billing API",
"service_status": "operational",
"effective_status": "degraded",
"effective_status_reason": "alert_group",
"alert_impact_status": "degraded",
"dependency_impact_status": "operational",
"open_alert_groups": 1,
"critical_open_alert_groups": 0,
"upstream_issues_count": 0,
"criticality": "required",
"impact_weight": 100,
"enabled": true
}
],
"status_history": []
}
Обновление бизнес-сервиса#
PUT /api/business-services/{business_service_id}
Тело запроса использует те же поля, что и при создании.
Эндпоинт обновляет бизнес-сервис и возвращает сериализованный бизнес-сервис.
Удаление бизнес-сервиса#
DELETE /api/business-services/{business_service_id}
Выполняет мягкое удаление бизнес-сервиса и отключает связанные активные записи в соответствии с реализацией репозитория.
Пересчёт бизнес-сервиса#
POST /api/business-services/{business_service_id}/recalculate
Пересчитывает текущий статус на основе эффективного статуса компонентов и возвращает полный набор данных.
Ручное переопределение имеет приоритет, если оно активно.
Ответ:
Business Service details payload
Установка ручного переопределения статуса#
POST /api/business-services/{business_service_id}/manual-status
Тело запроса:
{
"status": "degraded",
"message": "Customer impact is limited but visible.",
"until": "2026-07-06T12:00:00Z"
}
Допустимые значения status:
operational
degraded
partial_outage
major_outage
maintenance
until необязателен. Если он опущен, переопределение остаётся активным до тех пор, пока не будет снято вручную.
Эндпоинт возвращает полный набор данных, включая компоненты и историю статусов.
Снятие ручного переопределения статуса#
DELETE /api/business-services/{business_service_id}/manual-status
Снимает ручное переопределение, пересчитывает бизнес-сервис и возвращает полный набор данных.
Список компонентов#
GET /api/business-services/{business_service_id}/components
Возвращает компоненты бизнес-сервиса.
Каждый компонент включает поля сырого и эффективного статуса:
[
{
"id": 10,
"business_service_id": 1,
"service_id": 25,
"service_slug": "billing-api",
"service_name": "Billing API",
"team_id": 2,
"team_slug": "platform",
"team_name": "Platform",
"service_status": "operational",
"effective_status": "degraded",
"effective_status_reason": "alert_group",
"alert_impact_status": "degraded",
"dependency_impact_status": "operational",
"open_alert_groups": 1,
"critical_open_alert_groups": 0,
"upstream_issues_count": 0,
"component_type": "technical_service",
"criticality": "required",
"impact_weight": 100,
"position": 0,
"status_rule": "inherit",
"description": null,
"enabled": true
}
]
Добавление компонента#
POST /api/business-services/{business_service_id}/components
Тело запроса:
{
"service_id": 25,
"component_type": "technical_service",
"criticality": "required",
"impact_weight": 100,
"position": 0,
"status_rule": "inherit",
"description": null,
"enabled": true
}
Обязательные поля:
service_id
После создания бизнес-сервис должен быть пересчитан, а ответ должен включать сериализованный компонент с полями эффективного влияния.
Поля влияния компонента включают:
effective_status
effective_status_reason
own_impact_score
alert_impact_score
dependency_impact_score
effective_impact_score
service_impact_score
component_multiplier
weighted_impact_score
service_impact_score берётся из Service Impact v2. weighted_impact_score — это оценка компонента после применения критичности и веса влияния. Затем статус бизнес-сервиса использует комбинированные взвешенные оценки компонентов.
Обновление компонента#
PUT /api/business-services/components/{component_id}
Тело запроса использует те же поля, что и при добавлении компонента.
Изменение критичности компонента, веса, состояния enabled или технического сервиса может изменить вычисленный статус бизнес-сервиса.
Удаление компонента#
DELETE /api/business-services/components/{component_id}
Выполняет мягкое удаление или отключение компонента в соответствии с поведением репозитория.
После удаления компонента статус бизнес-сервиса должен быть пересчитан.
История статусов#
История статусов включается в полный набор данных.
Поля элемента истории:
{
"id": 1,
"business_service_id": 1,
"old_status": "operational",
"new_status": "degraded",
"status_source": "calculated",
"message": "Affected components: Billing API. Calculated status: degraded, impact score=50",
"impact_score": 50,
"component_snapshot": [],
"created_at": "2026-07-06T10:00:00Z"
}
Интеграция с алертами#
Влияние на бизнес-сервис обновляется хуками жизненного цикла алертов.
Когда группа алертов затрагивает непосредственный компонент бизнес-сервиса, связь имеет вид:
component_alert
Когда алерт затрагивает вышестоящую зависимость компонента бизнес-сервиса, связь имеет вид:
dependency_upstream_alert
Записи о влиянии на бизнес деактивируются, когда алерт больше не затрагивает бизнес-сервис.
Ответы с ошибками#
Типичные ответы с ошибками:
{"error": "Business service not found"}
{"error": "Access to this group is denied"}
{"error": "Manual status expiration must be in the future"}
{"error": "Technical service is required."}