hexastack-otel
Vendor-agnostic OpenTelemetry distributed tracing and CQRS telemetry middleware for Hexastack.
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.tracingviaFeatureFlagPortdynamically per-message, enabling zero-downtime activation/deactivation of telemetry spans. - Span Name:
cqrs.CreateOrderCommand - Attributes:
message.name:CreateOrderCommandmessage.type:commandcorrelation.id:0724ec78-f952-4467...tenant.id:tenant-alphauser.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.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| hexastack_otel-0.10.0.tar.gz | 12.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hexastack_otel-0.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.5 kB
Release files / hexastack_otel-0.10.0.tar.gz
| Download URL | hexastack_otel-0.10.0.tar.gz |
|---|---|
| Size | 12.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6e8d98eda47f13725496a57c7d55e06490ba1c93d46cc1abe76b14192fb70a48
|
|
BLAKE2b-256 checksum How to use checksums |
b116cf8035e8c220af343bcd8e45ac7be6d8989ebd5cdd0fedd99bf9bd3566b2
|
| 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.10.0-py3-none-any.whl
| Download URL | hexastack_otel-0.10.0-py3-none-any.whl |
|---|---|
| Size | 18.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
14af9fea7063b5bb27862bea196dea9c43f273534b85619eaaa60a7c590ed095
|
|
BLAKE2b-256 checksum How to use checksums |
88672ab4464b88d76bc70b015e33c3df0172ed2cc9f2f44c48dcc35eee4049ad
|
| 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.10.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.