Блог и новости

Pingera Python SDK - ближе к разработчикам

Блог Проверки
Мы в Pingera верим, что мониторинг должен быть не просто инструментом для оповещений, а неотъемлемой частью рабочего процесса каждого инженера. Мы уже сделали первый шаг в этом направлении, предоставив возможность использовать собственные Playwright-сценарии для синтетических проверок. Теперь мы делаем следующий, еще более важный шаг, приближаясь к разработчикам: представляем официальный Pingera Python SDK 🐍.
SDK — это не просто библиотека. Это мост между вашей локальной средой разработки и нашей платформой мониторинга. Он позволяет вам управлять всем периметром мониторинга, от создания новых чеков до реагирования на инциденты, не выходя из привычного кода.

Что такое Pingera Python SDK?

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

Почему это важно для инженеров и разработчиков?

С Pingera SDK вы можете полностью автоматизировать процессы, которые раньше требовали ручного вмешательства в веб-интерфейсе:
  1. Интеграция с CI/CD-пайплайнами. 🤖 Автоматизируйте создание и обновление проверок производительности для каждой новой версии вашего сервиса. Например, вы можете автоматически запускать синтетический чек после деплоя, чтобы убедиться, что ключевые пользовательские сценарии работают корректно.
  2. Управление инцидентами. Создавайте, обновляйте и закрывайте инциденты на вашей статус-странице прямо из вашего скрипта или cron-задачи, без необходимости заходить в админ-панель.
  3. Динамический мониторинг. Создавайте временные проверки для новых эндпоинтов, микросервисов или фич, которые вы тестируете, и удаляйте их после завершения тестирования.
  4. Скриптование и автоматизация. Пишите свои скрипты для автоматического получения данных мониторинга и их дальнейшей обработки, например, для создания кастомных отчетов или интеграции с другими системами.

Под капотом: как мы сделали SDK

Мы хотели создать клиент, который был бы не только функциональным, но и надежным, легко обновляемым и расширяемым. Для этого мы применили подход, основанный на OpenAPI-спецификации.
Вместо того чтобы вручную писать обертку для каждого API-эндпоинта, мы использовали наш собственный файл openapi.json, который всегда актуален, поскольку генерируется на основе нашего API. Затем с помощью OpenAPI Generator мы автоматически сгенерировали основной Python-клиент, который обеспечивает строгую типизацию данных и полный охват всех доступных эндпоинтов. В корне у нас есть скрипт, который вы можете запустить и он сгенерирует код клиента: generate_client.py.
Таким образом, SDK, который вы получаете, — это не просто набор функций, а автоматически созданный клиент, который гарантирует высокую надежность и полное соответствие нашему API.

Пример использования: Запуск синтетической проверки по требованию

Давайте посмотрим, как можно использовать SDK, чтобы запустить синтетическую проверку с кастомным Playwright-сценарием и получить детальные результаты. Это идеальный способ быстро проверить новую функциональность в вашей локальной среде.
Сперва установим SDK:
pip install pingera-sdk
Теперь напишем небольшой Python-скрипт, который будет выполнять on-demand синтетический чек.
import os
import time
import json
from pingera.api import OnDemandChecksApi
from pingera.models import ExecuteCustomCheckRequest
from pingera import ApiClient, Configuration, ApiException

# Настройка API-клиента (можно также использовать переменные окружения)
configuration = Configuration(host="https://api.pingera.ru")
configuration.api_key['apiKeyAuth'] = os.getenv("PINGERA_API_KEY")

# Наш Playwright-сценарий
playwright_script = """
// Простой Playwright-тест для pingera.ru
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('Скриншот сделан!');
});
"""

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

with ApiClient(configuration) as api_client:
    api = OnDemandChecksApi(api_client)
    
    try:
        # Запускаем проверку
        print("🚀 Запуск on-demand синтетической проверки...")
        job_result = api.v1_checks_on_demand_post(request_body)
        job_id = job_result.job_id
        print(f"✅ Проверка отправлена! ID задачи: {job_id}")

        # Ожидаем завершения
        max_wait_time = 30  # 30 секунд
        start_time = time.time()
        while True:
            if time.time() - start_time > max_wait_time:
                print("❌ Превышено время ожидания.")
                break
            
            job_status = api.v1_checks_on_demand_get(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}")
Этот скрипт запускает Playwright-сценарий на нашей инфраструктуре, ждет его завершения и выводит полный JSON-отчет прямо в консоль. Отчет содержит все, что вам нужно: от скриншотов до метрик Web Vitals и сетевых таймингов.

Что дальше?

Pingera Python SDK — это только начало. Мы планируем расширять его функциональность и создавать SDK для других языков, чтобы сделать Pingera еще более удобным для разработчиков. Мы будем рады вашему вкладу и фидбеку!
Готовы попробовать?