Skip to main content

Python SDK for Exemplar monitoring and heartbeat APIs

Project description

exemplar-python-sdk

Python SDK for Exemplar. This package is designed to support multiple Exemplar features over time; currently it includes heartbeat monitor support. The client is a singleton: initialize once with your API key, then send heartbeats from sync or async code.

Install

From PyPI (import name is still exemplar):

pip install exemplar-python-sdk

From a local checkout, poetry install installs this project into Poetry’s virtualenv (no separate pip step needed):

poetry install

To smoke-test the built wheel inside that same env (after poetry build):

poetry run pip install dist/exemplar_python_sdk-*.whl

Using plain pip install dist/... uses whatever pip is first on your PATH (often system Python) and can fail with permission errors on macOS.

Requires Python 3.9+.

Usage

Current supported capability:

  • Heartbeat monitors (sync and async)

1. Initialize once (API key)

Call init at application startup (before any heartbeat). A second init raises RuntimeError.

import exemplar

exemplar.init(api_key="<personal_access_token>")
# optional: exemplar.init(api_key="...", base_url="https://production-api.exemplar.dev")

2a. Simple heartbeat (sync)

Use from a cron job, Celery task, Flask/Django view, or any synchronous code:

import exemplar

exemplar.init(api_key=os.environ["EXEMPLAR_API_KEY"])

exemplar.send_heartbeat(
    "69c3a0754e257b7d18094f9a",
    metadata={"hostname": "worker-01"},
)

This sends POST /api/monitoring/heartbeat with Content-Type: application/json and header X-API-Key: <token>, matching:

curl -sS -X POST 'https://production-api.exemplar.dev/api/monitoring/heartbeat' \
  -H 'Content-Type: application/json' \
  -H 'X-API-Key: <personal_access_token>' \
  -d '{"monitor_id":"69c3a0754e257b7d18094f9a","metadata":{"hostname":"worker-01"}}'

2b. Background loop (async)

For FastAPI, Starlette, asyncio services, or any framework that runs an async event loop: start a task that heartbeats on an interval (like a cron in the background):

import asyncio
import exemplar

async def main():
    exemplar.init(api_key="...")
    asyncio.create_task(
        exemplar.heartbeat_background_loop(
            "69c3a0754e257b7d18094f9a",
            interval_seconds=60.0,
            metadata={"hostname": "worker-01"},
        )
    )
    ...

Cancel the task when shutting down. Pass a shared httpx.AsyncClient if you want connection reuse with other HTTP calls.

Development

poetry install
poetry run pytest

API summary

Function Role
exemplar.init(api_key=..., base_url=...) Create singleton (call once)
exemplar.get_client() Access the client after init
exemplar.send_heartbeat(monitor_id, metadata=...) One synchronous POST
exemplar.heartbeat_background_loop(...) Async infinite loop with interval_seconds

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exemplar_python_sdk-0.1.4.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

exemplar_python_sdk-0.1.4-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file exemplar_python_sdk-0.1.4.tar.gz.

File metadata

  • Download URL: exemplar_python_sdk-0.1.4.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.4 Darwin/24.5.0

File hashes

Hashes for exemplar_python_sdk-0.1.4.tar.gz
Algorithm Hash digest
SHA256 dac05836be76c4570d56b834a86715ee7ce3535d0973cd7b3a05d352f3c053bc
MD5 5299a2124a6836595e1dc68d728d9ac9
BLAKE2b-256 3155f05f1b59d2c0b6d8eb468bd999fcd2017420f611daf4decd18feada8b3f0

See more details on using hashes here.

File details

Details for the file exemplar_python_sdk-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for exemplar_python_sdk-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c610039d7defbc5bd7f50db62f778b225245cd382838fe7da105042ae9218b0a
MD5 fef63114fae67772e069e25fbd0bc4fd
BLAKE2b-256 224fc563df9c96c1548fb80c3b09c8ad17f0dfb509c3cfcd02a43e8d745fae6b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page