Перейти к основному содержимому

Python SDK

Pingera Python SDK — это официальный SDK для работы с платформой мониторинга Pingera. Он предоставляет полный набор инструментов для управления мониторингом, инцидентами, статусами и другими ресурсами прямо из вашего кода. SDK автоматически сгенерирован на основе спецификации OpenAPI, что гарантирует полный охват API и строгую типизацию.

Ключевые особенности

  • Полный охват API: SDK предоставляет доступ ко всем существующим эндпоинтам Pingera API.
  • Типобезопасность: Все модели данных (запросы и ответы) имеют строгую типизацию благодаря Pydantic, что снижает количество ошибок и улучшает автодополнение в IDE.
  • Удобство использования: Простая аутентификация и интуитивно понятные классы для работы с различными модулями.
  • Открытый исходный код: Проект опубликован под лицензией MIT на GitHub, что позволяет любому желающему вносить свой вклад.

Установка

SDK доступен через PyPI. Для установки выполните следующую команду:

pip install pingera-sdk

Быстрый старт и аутентификация

Для начала работы вам необходимо настроить API-ключ. Сделайте это в личном кабинете в меню "Настройки"

SDK поддерживает несколько способов аутентификации.

Способ 1: Переменные окружения

Самый простой способ — использовать переменную окружения.

export PINGERA_API_KEY="ваш_api_токен"

Затем в коде вы можете инициализировать клиент:

from pingera import PingeraClient

# Клиент автоматически загрузит токен из PINGERA_API_KEY
client = PingeraClient.from_env()

Способ 2: Ручная конфигурация

Вы также можете передать токен напрямую при инициализации клиента.

from pingera import PingeraClient, APIKeyAuth

auth = APIKeyAuth("ваш_api_токен")
client = PingeraClient(auth=auth)

# Или используя Configuration
from pingera import ApiClient, Configuration
configuration = Configuration(host="https://api.pingera.ru")
configuration.api_key['apiKeyAuth'] = "ваш_api_токен"
api_client = ApiClient(configuration)

Модули API

SDK организован по модулям, каждый из которых отвечает за определенную часть функциональности Pingera. Вы можете получить к ним доступ через свойства основного объекта клиента (PingeraClient).

МодульОписаниеДоступ через client.xyz
AlertsApiУправление алертами и каналами уведомленийclient.alerts
ChecksApiУправление регулярными проверкамиclient.checks
ChecksUnifiedResultsApiЗапросы к объединенным результатам проверокclient.checks_unified_results
HeartbeatsApiУправление Пульсарами (cronjob-проверки)client.heartbeats
OnDemandChecksApiЗапуск проверок по требованиюclient.on_demand_checks
StatusPagesApiУправление Статус Страницамиclient.status_pages
StatusPagesComponentsApiУправление компонентами на Статус Страницахclient.components
StatusPagesIncidentsApiУправление инцидентами и плановыми работами Статус Страницclient.incidents

Примеры использования

1. Управление компонентами на странице статуса

Этот пример показывает, как создать новый компонент, обновить его и получить список всех компонентов.

from pingera import PingeraClient
from pingera.models import Component

# Инициализируем клиент
client = PingeraClient.from_env()

# Замените на ID вашей страницы статуса
PAGE_ID = "ваш_page_id"

# 1. Создание нового компонента
new_component = Component(
name="API Server",
description="Основной API-сервер",
status="operational"
)
created_component = client.components.v1_pages_page_id_components_post(
page_id=PAGE_ID,
component=new_component
)
print(f"✅ Компонент '{created_component.name}' создан с ID: {created_component.id}")

# 2. Обновление статуса компонента
client.components.v1_pages_page_id_components_component_id_status_put(
page_id=PAGE_ID,
component_id=created_component.id,
status="degraded_performance"
)
print(f"⚠️ Статус компонента '{created_component.name}' обновлен на 'degraded_performance'")

# 3. Получение списка всех компонентов
all_components = client.components.v1_pages_page_id_components_get(page_id=PAGE_ID)
print(f"🔎 Найдено {len(all_components.data)} компонентов на странице статуса.")

2. Запуск синтетической проверки по требованию

Этот пример демонстрирует, как запустить on-demand проверку с использованием Playwright-сценария. Это полезно для автоматического тестирования после деплоя или локального тестирования.

import os
import time
import json
from pingera import PingeraClient
from pingera.models import ExecuteCustomCheckRequest
from pingera.exceptions import ApiException

# Инициализируем клиент из переменных окружения
client = PingeraClient.from_env()

# Наш Playwright-сценарий
playwright_script = """
const { test, expect } = require('@playwright/test');
test('Basic Screenshot', async ({ page }) => {
await page.goto('https://pingera.ru/');
await page.waitForLoadState('networkidle');
await page.screenshot({ path: 'screenshot.png', fullPage: true });
console.log('Скриншот сделан!');
});
"""

# Создаем запрос на запуск on-demand проверки
request_body = ExecuteCustomCheckRequest(
url="https://pingera.ru",
type="synthetic",
parameters={"pw_script": playwright_script},
timeout=60,
name="On-Demand Check from SDK"
)

try:
print("🚀 Запуск on-demand синтетической проверки...")
job_result = client.on_demand_checks.v1_checks_execute_post(request_body)
job_id = job_result.job_id
print(f"✅ Проверка отправлена! ID задачи: {job_id}")

# Ожидаем завершения
max_wait_time = 60 # 60 секунд
start_time = time.time()
while True:
if time.time() - start_time > max_wait_time:
print("❌ Превышено время ожидания.")
break

job_status = client.on_demand_checks.v1_checks_jobs_job_id_get(job_id=job_id)
if job_status.status in ["completed", "failed"]:
print("✅ Задача выполнена.")

# Выводим детальный результат
print("=== Детальный результат ===")
print(json.dumps(job_status.result.to_dict(), indent=2))
break

print("⏳ Ожидание завершения...")
time.sleep(5)

except ApiException as e:
print(f"❌ Ошибка API: {e.status} - {e.reason}")

Работа с моделями данных

Все запросы и ответы API используют типизированные модели Pydantic. Это обеспечивает строгий контроль данных и предотвращает ошибки.

from pingera.models import IncidentCreate, IncidentUpdateCreate

# Создание нового инцидента
new_incident = IncidentCreate(
name="Проблемы с подключением к базе данных",
body="Изучаем проблему с подключением к БД",
status="investigating",
impact="major"
)

# Добавление обновления к существующему инциденту
incident_update = IncidentUpdateCreate(
body="Проблема найдена и скоро будет исправлена",
status="identified"
)

Обработка ошибок

SDK использует стандартные исключения для обработки ошибок API.

from pingera.exceptions import ApiException

try:
# Пример вызова, который может вызвать ошибку
client.checks.v1_checks_check_id_get(check_id="несуществующий_id")
except ApiException as e:
print(f"❌ Ошибка API: статус {e.status}, причина: {e.reason}")
if e.body:
print(f"Детали ошибки: {e.body}")

Документация и ресурсы