Перейти до основного вмісту

Моніторинг статусу сервісів Pharmapoint через Better Stack API

1 Загальні відомості та авторизація

URI: https://status.pharmapoint.ua/index.json

Метод використовується для отримання інформації про поточний стан сервісів, історію доступності та інциденти.

Запит виконується методом GET https://status.pharmapoint.ua/index.json

інформація
  • Публічна статус-сторінка: https://status.pharmapoint.ua/
  • Endpoint є повністю публічним. Авторизація, передача API-токенів чи спеціальних заголовків не потрібна.
  • Опитування endpoint відбувається з інтервалом 30–60 секунд або відповідно до внутрішніх архітектурних вимог вашої системи моніторингу

Партнерська система (АІС) виконує запит до Better Stack та отримує структуровану інформацію у форматі JSON. Отримані дані обробляються (парсяться) на стороні партнера для подальшої інтеграції у власну систему моніторингу.

2 Структура JSON-відповіді

Структура JSON-відповіді побудована у вигляді кількох ключових блоків:

БлокОпис
dataГоловний об'єкт, що містить загальну інформацію про статус-сторінку (status page) та загальний статус системи.
includedМасив пов’язаних об’єктів: детальний стан окремих сервісів (ресурсів), секцій, активних інцидентів та планових робіт.
relationshipsОб'єкт, що описує зв’язки між сутностями JSON.

3 Загальний статус системи

Для швидкої перевірки працездатності всієї системи Pharmapoint використовується поле:

data.attributes.aggregate_state

Можливі значення aggregate_state:

ЗначенняОпис статусу
operationalВсі сервіси працюють у штатному режимі
degradedФіксується часткова деградація (уповільнення або збої) окремих сервісів
downtimeСервіси частково або повністю недоступні
maintenanceПроводяться планові або екстрені технічні роботи
Важливо

Для базового моніторингу вашій системі достатньо аналізувати лише це поле aggregate_state. Якщо воно дорівнює operational — система працює коректно

4 Статуси та метрики окремих сервісів

Детальна інформація про кожен сервіс знаходиться в масиві included. Об'єкти сервісів мають тип status_page_resource.

Приклад фільтрації сервісів

const services = json.included.filter(item => item.type === "status_page_resource");

4.1 Ключові поля об'єкта сервісу (attributes):

ПолеТипОпис
attributes.public_namestringПублічна назва сервісу
attributes.statusstringПоточний стан конкретного сервісу (див. Можливі статуси окремих сервісів)
attributes.availabilitydecimalКоефіцієнт доступності сервісу (Uptime).
Поле availability повертається у decimal-форматі та відображає доступність сервісу за період (наприклад, 0.999828 = 99.9828%)
attributes.status_page_section_idstringІдентифікатор секції, до якої належить сервіс

4.2 Можливі статуси окремих сервісів (attributes.status):

СтатусОпис
operationalСервіс працює стабільно
degradedСервіс функціонує, але з чергою запитів або затримками
downtimeСервіс повністю недоступний
maintenanceСервіс тимчасово вимкнено через технічні роботи
not_monitoredМоніторинг сервісу тимчасово призупинено

4.3 Історія статусів (status_history)

Кожен об'єкт сервісу містить масив status_history з історією статусів (зазвичай за останні 90 днів). Кожен елемент масиву має структуру:

ПолеОпис
dayДата у форматі YYYY-MM-DD
statusСтатус сервісу в цей день
downtime_durationСумарний час недоступності (downtime) у секундах за добу
maintenance_durationСумарний час технічних робіт у секундах за добу

5 Інциденти та технічні роботи

Інформація про поточні або заплановані події (аварії, збої) міститься в масиві included в об'єктах з типом status_report.

Завдяки цьому блоку АІС може отримати:

  • опис та хронологію аварій;
  • графік запланованих технічних робіт;
  • точний час початку та завершення інцидентів;
  • перелік зачеплених сервісів.

6 Рекомендований алгоритм обробки даних (Логіка АІС)

Для ефективної автоматизації контролю статусів рекомендується впровадити таку логіку на стороні партнерської системи:

image1

Крок 1. Періодично (раз на 30–60 секунд) виконуйте GET-запит на URI: https://status.pharmapoint.ua/index.json.

Крок 2. Аналізуйте поле data.attributes.aggregate_state:

  • Якщо статус дорівнює operational — жодних додаткових дій не потрібно, всі системи працюють штатно.

  • Якщо статус відмінний від operational (degraded, downtime або maintenance) — перейдіть до Кроку 3.

Крок 3. Визначте проблемні сервіси:

  • Відфільтруйте елементи за умовою type === "status_page_resource" та знайдіть ті, де поле attributes.status не дорівнює operational.

  • Відфільтруйте елементи за умовою type === "status_report", щоб отримати опис аварії чи техробіт, час їх початку та завершення.

7 Приклад успішної відповіді

Відповідь: https://status.pharmapoint.ua/index.json
{
"data": {
"attributes": {
"aggregate_state": "operational"
}
},
"included": [
{
"type": "status_page_resource",
"attributes": {
"public_name": "API",
"status": "operational",
"availability": 0.999828
}
}
]
}