Skip to main content

platform-observability — shared metrics + dashboard

@demystify/platform-observability (TS) · demystify-platform-observability (Py) · v0.2.0 · MIT

What it is / when to use it

The single source of truth for RED metrics across all six Demystify services. Canonical dmstfy_* metric names, a metrics registry with RED helpers, a framework-neutral /metrics handler, an offline HTML dashboard, and a bridge that turns a module's existing span instrumentation into duration metrics for free.

Leaf package: depends only on prom-client (TS) / prometheus-client (Py). Zero dependency on any module. Keyless, offline, deterministic.

Install standalone

pnpm add @demystify/platform-observability        # TS
uv add demystify-platform-observability           # Py

Canonical metric names

Defined once, shared by both languages (METRIC_NAMES / fixture-locked):

name type labels
dmstfy_http_requests_total counter method, route, status, tenant
dmstfy_http_request_duration_seconds histogram method, route, status, tenant
dmstfy_provider_calls_total counter provider, model, status
dmstfy_provider_call_duration_seconds histogram provider, model, status
dmstfy_provider_cost_micro_usd_total counter provider, model
dmstfy_queue_depth gauge queue
dmstfy_span_duration_seconds histogram span, module

Durations are seconds; cost is integer µUSD (CONVENTIONS.md §2). Buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10].

SDK usage

import {
  createMetrics, mountMetricsHono, renderDashboardHtml, spanExporterToMetrics,
} from "@demystify/platform-observability";

const metrics = createMetrics();
metrics.httpRequest("GET", "/v1/chat", 200, tenantId, 12.4);         // RED helper
metrics.providerCall("openai", "gpt-4o", "ok", 210, 1500);          // count+dur+cost
metrics.queueDepth("gateway", 7);

mountMetricsHono(app, metrics);                    // GET /metrics (Prometheus text)
setSpanExporter(spanExporterToMetrics(metrics));   // spans -> duration histogram
const html = renderDashboardHtml(metrics.snapshot());
from demystify_platform_observability import (
    create_metrics, mount_metrics_fastapi, render_dashboard_html, span_exporter_to_metrics,
)

metrics = create_metrics()
metrics.http_request("GET", "/v1/chat", 200, tenant_id, 12.4)
metrics.provider_call("openai", "gpt-4o", "ok", 210, 1500)
metrics.queue_depth("gateway", 7)

mount_metrics_fastapi(app, metrics)                 # GET /metrics
set_span_exporter(span_exporter_to_metrics(metrics))
html = render_dashboard_html(metrics.snapshot())

Mounting /metrics

  • Hono: mountMetricsHono(app, metrics, "/metrics").
  • FastAPI: mount_metrics_fastapi(app, metrics, "/metrics").
  • Anything else: metricsHandler(metrics) / metrics_handler(metrics) returns {status, contentType, body} — wire it to your framework.

Span → metrics bridge

spanExporterToMetrics(metrics) returns an object matching the Wave-7 SpanExporter shape (export(span) in TS; a Callable[[Span], None] in Py). Pass it to a module's setSpanExporter(...) / set_span_exporter(...) and every finished span becomes an observation on dmstfy_span_duration_seconds. Off by default (no exporter registered = zero cost), exactly like §14.3.

Architecture & ports/adapters

seam implementation notes
metric store private prom-client / prometheus-client registry per Metrics isolated; no global default registry
snapshot deterministic in-memory tally ordering-stable; powers dashboard + parity
exposition metricsText() / metrics_text() Prometheus v0.0.4 text

Testing

make -C packages/platform-observability setup lint test build. Unit tests only (offline). Parity: TS and Py replay the same fixtures/snapshot.json and must produce byte-identical snapshots; metric names locked to fixtures/metric-names.json.

v1 scope

RED + cost + queue-depth + span-duration. No exemplars, no push-gateway, no histogram-quantile helpers (scrape + PromQL do that). Real Prometheus scrape is the standard opt-in path; nothing here requires it to run.

Metadata

Release files for demystify-platform-observability 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for demystify-platform-observability 0.3.0
File Size Uploaded Provenance Actions
demystify_platform_observability-0.3.0.tar.gz 67.1 kB With provenance Details for demystify_platform_observability-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for demystify-platform-observability 0.3.0
File Interpreter ABI Platform Actions
demystify_platform_observability-0.3.0-py3-none-any.whl Python 3 none any Details for demystify_platform_observability-0.3.0-py3-none-any.whl

Total release size: 80.0 kB

Release files / demystify_platform_observability-0.3.0.tar.gz

Download URL demystify_platform_observability-0.3.0.tar.gz
Size 67.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a446b46839f9efff7b3b5306265ca47519fec757756c1d719f78ef7554620137
BLAKE2b-256 checksum
How to use checksums
db7153be96ba3661f0d1fb9ee182cac0872d508e4d3f527992e3724eb6d35e80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.

Transparency log

Release files / demystify_platform_observability-0.3.0-py3-none-any.whl

Download URL demystify_platform_observability-0.3.0-py3-none-any.whl
Size 13.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
35cb014c3074e88c99c1c9f35abb647dd4eb4159ab76148ba73d9523c71e7f4a
BLAKE2b-256 checksum
How to use checksums
f8ec78eeeff802db982998a83d1fff9109c66b93acee8e4b161a94bb663ab751
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.

Transparency log

Security for demystify-platform-observability 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for demystify_platform_observability-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page