Skip to main content

hexastack-otel

hexastack-otel

Vendor-agnostic OpenTelemetry distributed tracing and CQRS telemetry middleware for Hexastack.

PyPI: hexastack-otel Python 3.13+ Coverage Part of Hexastack Governed by Hexaqual License: Apache 2.0

Part of the Hexastack Framework · Governed by Hexaqual.


1. Architectural Overview

hexastack-otel provides pure hexagonal port interfaces for distributed tracing (TracingPort) and metrics collection (MetricsPort).

  • Distributed Tracing: Backed by the official OpenTelemetry Python SDK (OtelTracingAdapter, InMemoryTracingAdapter), linking correlation IDs and creating spans across CQRS Command/Query executions, HTTP endpoints, and gRPC RPCs.
  • Prometheus Metrics Engine: Backed by prometheus_client (PrometheusMetricsAdapter), tracking throughput counters, execution duration histograms, and system gauges exposed over /metrics.
graph TD
    CQRS["CQRS Command / Query Dispatch"]
    MW["TracingMiddleware (order=12)"]
    PORT["TracingPort"]
    OTEL["OtelTracingAdapter\n(OpenTelemetry SDK)"]
    MEM["InMemoryTracingAdapter\n(Test Isolation)"]
    OTLP["OTLP Exporter\n(gRPC / HTTP)"]
    COLLECTOR["OTel Collector / Jaeger / Grafana Tempo / Sift"]

    CQRS --> MW
    MW --> PORT
    PORT -.-> OTEL
    PORT -.-> MEM
    OTEL --> OTLP
    OTLP --> COLLECTOR

2. Quickstart

Installation

# Core OpenTelemetry SDK & TracingPort
pip install hexastack-otel

# With OTLP Protobuf Exporters (gRPC & HTTP)
pip install hexastack-otel[otlp]

Configuration (hexastack.toml or pyproject.toml)

[hexastack.otel]
service_name = "order-service"
endpoint = "http://localhost:4317"
exporter = "otlp_grpc" # "memory", "console", "otlp_grpc", "otlp_http"
sample_rate = 1.0
enabled = true

3. Automatic CQRS Tracing & Dynamic Feature Flagging

The TracingMiddleware automatically wraps every dispatched command or query in a scoped span:

  • Dynamic Feature Flag Control: Evaluates features.otel.tracing via FeatureFlagPort dynamically per-message, enabling zero-downtime activation/deactivation of telemetry spans.
  • Span Name: cqrs.CreateOrderCommand
  • Attributes:
    • message.name: CreateOrderCommand
    • message.type: command
    • correlation.id: 0724ec78-f952-4467...
    • tenant.id: tenant-alpha
    • user.id: usr_123
  • Error Capture: Automatically catches unhandled exceptions, records them as span exception events, and sets span status to ERROR.

Metadata

Release files for hexastack-otel 0.9.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 hexastack-otel 0.9.0
File Size Uploaded Provenance
hexastack_otel-0.9.0.tar.gz 12.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for hexastack-otel 0.9.0
File Interpreter ABI Platform
hexastack_otel-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 30.5 kB

Release files / hexastack_otel-0.9.0.tar.gz

Download URL hexastack_otel-0.9.0.tar.gz
Size 12.2 kB
Tags Source
SHA-256 checksum
How to use checksums
fd7466fb5134534eb82dcd9e8db73e3d81d83b0bb381fb7222fcd667fc67547e
BLAKE2b-256 checksum
How to use checksums
748bc2c8ea7bac1d5f4ac7325512c4a6f95fe6cb7a281c513d460906e27336d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hexastack_otel-0.9.0-py3-none-any.whl

Download URL hexastack_otel-0.9.0-py3-none-any.whl
Size 18.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5dbfdf126f2c2e5596d2072ffe15ccdaf963696f3cc955218f14fe9d0585a281
BLAKE2b-256 checksum
How to use checksums
9e28f28ffeaae81e180edaf10f7570e30f34aa0446b8b1d1c316789f5743b338
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for hexastack-otel 0.9.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.

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