Skip to main content

A FastAPI-based mock Prometheus exporter with configurable metrics and UI.

Project description

mocktrics-exporter

Small, configurable Prometheus exporter for generating test metrics. It exposes:

  • a Prometheus metrics endpoint for scraping
  • a small FastAPI HTTP API for defining/updating metrics at runtime

Works great for demos, integration tests, and performance scenarios where you need predictable metrics behavior (static, ramp, square, sine, gaussian) with labels.

Note: The Python package is named mocktrics_exporter (underscore in the import path).

Install

  • From PyPI:
    • pip install mocktrics-exporter
  • From source (editable):
    • pip install -e .

Quick Start

  • Run the exporter:
    • mocktrics-exporter -f config.yaml
  • Alternatively from source:
    • python -m mocktrics_exporter.main -f config.yaml
  • Defaults:
    • Metrics served on :8000
    • HTTP API served on :8080

Example Prometheus scrape config:

  • job_name: mocktrics
  • static_configs: ['localhost:8000']

CLI Options

  • -f, --config-file path to YAML configuration file
  • -a, --api-port API port (default 8080)
  • -m, --metrics-port Prometheus metrics port (default 8000)

Options can also be provided via environment or process managers as needed.

Configuration

  • File: config.yaml (optional). If provided, metrics are preloaded at startup.
  • Schema overview: each metric defines a name, documentation, optional unit, a list of labels, and a list of values. Values use a kind discriminator and fields specific to the chosen kind (see Supported Value Models below).

Example:

disable_units: true

metrics:
  - name: combined
    documentation: Mock metric for all types
    labels: [type]
    values:
      - kind: static
        value: 100
        labels: [static]
      - kind: ramp
        period: 2m
        peak: 100
        invert: false
        labels: [ramp]
      - kind: square
        period: 2m
        magnitude: 100
        duty_cycle: 50
        labels: [square]
      - kind: sine
        period: 2m
        amplitude: 50
        offset: 50
        labels: [sine]

Supported Value Models

  • static: constant numeric value
  • ramp: linear ramp up to peak over period, optional invert, offset
  • square: square wave with period, magnitude, duty_cycle (0–100), optional invert, offset
  • sine: sine wave with period, amplitude, optional offset
  • gaussian: random gaussian with mean, sigma

Helpers:

  • Duration strings: 1s, 2m, 3h, 1d
  • Size strings: 2u, 2m, 2k, 2M, 2G

HTTP API

Base URL is the API port (default http://localhost:8080). Interactive API docs are available at http://localhost:8080/docs (Swagger UI).

Example requests:

# Create a metric
curl -X POST localhost:8080/metric \
  -H 'content-type: application/json' \
  -d '{
    "name": "http_requests",
    "documentation": "Demo metric",
    "unit": "",
    "labels": ["method"],
    "values": [{"kind": "static", "labels": ["GET"], "value": 42}]
  }'

# Add a value
curl -X POST localhost:8080/metric/http_requests/value \
  -H 'content-type: application/json' \
  -d '{"kind": "ramp", "labels": ["POST"], "period": "2m", "peak": 100}'

# List metrics
curl localhost:8080/metric/all

# Delete a value
curl -X DELETE 'localhost:8080/metric/http_requests/value?labels=GET'

# Delete metric
curl -X DELETE localhost:8080/metric/http_requests

Prometheus Metrics

  • Metrics endpoint runs on the metrics port (default 8000).
  • Each metric is exported as a Gauge with labels as defined.
  • Units in the metric name suffix can be disabled with disable_units: true in config.

Development

  • Run tests: pytest -q (includes fast API and unit tests)
  • Run API with autoreload for local dev: uvicorn mocktrics_exporter.api:api --reload --port 8080
  • Code style: Black, isort, autoflake via pre-commit hooks
  • Python: >=3.9

License

Apache 2.0. See LICENSE.

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

mocktrics_exporter-0.2.0.tar.gz (37.4 kB view details)

Uploaded Source

Built Distribution

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

mocktrics_exporter-0.2.0-py3-none-any.whl (21.8 kB view details)

Uploaded Python 3

File details

Details for the file mocktrics_exporter-0.2.0.tar.gz.

File metadata

  • Download URL: mocktrics_exporter-0.2.0.tar.gz
  • Upload date:
  • Size: 37.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mocktrics_exporter-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3c0f43ddb490b0c6e34985018563fb5426613131fe8e6c5e36e735756d9fd713
MD5 430dd51c60d0c78e36f89e14c2e6940e
BLAKE2b-256 2d3353ff398f73b7d7ffb99655e7e8f2a5d35f4dadef6b7751702480132c0951

See more details on using hashes here.

File details

Details for the file mocktrics_exporter-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mocktrics_exporter-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d8e755aa15f9192f44eddaecec8c08399a859aacedc6a8094a5d08e3e5049a51
MD5 2d59971398839e9c8217094f26f5a8de
BLAKE2b-256 ee87873ee429b0d60feb67a14065145792d576b59d47c94df1ce70571f0a3aea

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