Skip to main content

Minimalist, Pythonic Prometheus HTTP client that supports both async and sync usage

Project description

aiopromql

codecov

aiopromql is a minimalist Prometheus HTTP client for Python that supports both synchronous and asynchronous querying. It provides a clean, Pythonic model layer for Prometheus query responses and convenient helpers for mapping metrics into structured time series.


🚀 Features

  • Sync and async Prometheus client interfaces via httpx
  • Pydantic models for Prometheus vector and matrix responses
  • Time series utilities and hashable metric keys
  • Zero dependencies outside of httpx and pydantic

📦 Installation

pip install aiopromql

🔧 Basic Usage

Synchronous Query

from aiopromql import PrometheusSync

# Initialize the client
client = PrometheusSync("http://localhost:9090")

# Execute a simple query
resp = client.query('up')
metric_map = resp.to_metric_map()

# Process the results
for labels, series in metric_map.items():
    print(f"Labels: {labels.dict}")
    for point in series:
        print(f"  {point}")

Ranged Query

from datetime import datetime, timedelta, timezone

# Set time range
end = datetime.now(timezone.utc)
start = end - timedelta(hours=1)

# Execute range query
resp = client.query_range('up', start=start, end=end, step='60s')
metric_map = resp.to_metric_map()

# Process results as before
for labels, series in metric_map.items():
    print(f"Labels: {labels.dict}")
    for point in series:
        print(f"  {point}")

Asynchronous Query

import asyncio
from aiopromql import PrometheusAsync

async def main():
    async with PrometheusAsync("http://localhost:9090") as client:
        # Execute multiple queries concurrently
        queries = ['up', 'process_cpu_seconds_total', 'process_resident_memory_bytes']
        tasks = [client.query(q) for q in queries]
        responses = await asyncio.gather(*tasks)

        # Process results
        for query, resp in zip(queries, responses):
            print(f"Results for query: {query}")
            metric_map = resp.to_metric_map()
            for labels, series in metric_map.items():
                print(f"  Labels: {labels.dict}")
                for point in series:
                    print(f"    {point}")

asyncio.run(main())

Asynchronous Ranged Query

from datetime import datetime, timedelta, timezone
from aiopromql import PrometheusAsync

async def get_range_data():
    async with PrometheusAsync("http://localhost:9090") as client:
        end = datetime.now(timezone.utc)
        start = end - timedelta(hours=1)

        resp = await client.query_range('up', start=start, end=end, step='60s')
        return resp.to_metric_map()

# Run the async function
metric_map = asyncio.run(get_range_data())

🚧 Development

For full guidelines on contributing, please see CONTRIBUTING.md.

🤝 Acknowledgments

This Python package is developed by the VeNIT Lab and is utilized in the DECICEDEVICE-EDGE-CLOUD Intelligent Collaboration framEwork — which aims to bridge HPC cloud and edge orchestration.

We also acknowledge the collaboration with other consortium partners.

📄 License

MIT

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

aiopromql-0.1.2.tar.gz (53.1 kB view details)

Uploaded Source

Built Distribution

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

aiopromql-0.1.2-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file aiopromql-0.1.2.tar.gz.

File metadata

  • Download URL: aiopromql-0.1.2.tar.gz
  • Upload date:
  • Size: 53.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for aiopromql-0.1.2.tar.gz
Algorithm Hash digest
SHA256 8ab263a1c4ea2ce3cac55f339f1a00848f432185edce41a8a6964554da341321
MD5 43deba06bf7a74ec89f723007ed1fb73
BLAKE2b-256 1e35763ea7467c6a245d5f8b99cd634f29f2c11c91d9f86890b95be7a45c121b

See more details on using hashes here.

File details

Details for the file aiopromql-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: aiopromql-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for aiopromql-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1078d6bae881a408050530ec627a647079e32504a0caddc4f0a31ad27a8b7a32
MD5 904591405a92829761e287f8f2596279
BLAKE2b-256 6f1cc2bdaaedb759cfbdcfb0f8137bae9c6880daf6d36107cd42f9d511205097

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