Skip to main content

Unified telemetry library for the Undef ecosystem

Project description

Undef Telemetry

Unified telemetry library for structured logging, distributed tracing, and metrics across Python and TypeScript. Graceful OTel degradation — works without OpenTelemetry installed, activates full export when OTel SDK is present.

1. 🐍 CI — Python 2. 🟦 CI — TypeScript 5. 🔒 CodeQL

Install

Python:

pip install undef-telemetry              # core (structlog)
pip install "undef-telemetry[otel]"      # + OpenTelemetry export

TypeScript:

npm install @undef-games/telemetry             # core (pino + @opentelemetry/api)

Quick Start

Python:

from undef.telemetry import setup_telemetry, shutdown_telemetry, get_logger

setup_telemetry()
log = get_logger(__name__)
log.info("app.start.ok", request_id="req-1")
shutdown_telemetry()

TypeScript:

import { setupTelemetry, getLogger, shutdownTelemetry } from '@undef-games/telemetry';

setupTelemetry({ serviceName: 'my-app' });
const log = getLogger('api');
log.info({ event: 'app.start.ok', requestId: 'req-1' });
await shutdownTelemetry();

Both languages share the same API surface, event naming conventions, and configuration environment variables.

Configuration

All runtime config is via environment variables:

Variable Default Description
UNDEF_TELEMETRY_SERVICE_NAME undef-service Service identity
UNDEF_LOG_LEVEL INFO Log level
UNDEF_LOG_FORMAT console Renderer: console, json, or pretty
UNDEF_TRACE_ENABLED false Enable OTel tracing
UNDEF_METRICS_ENABLED false Enable OTel metrics

See the Configuration Reference for all 60+ environment variables.

Event Naming

Event names use 3-5 dot-separated lowercase segments:

# Python
log.info("auth.login.success", user_id="u-123")
log.info(event_name("auth", "login", "failed"), reason="bad_password")
// TypeScript
log.info({ event: 'auth.login.success', userId: 'u-123' });

See Conventions for full naming rules.

API Surface

Both languages export equivalent APIs:

Category Functions
Lifecycle setup_telemetry(), shutdown_telemetry()
Logging get_logger(), bind_context(), clear_context()
Tracing get_tracer(), trace (decorator/wrapper), extract_w3c_context()
Metrics counter(), gauge(), histogram()
Policies set_sampling_policy(), set_queue_policy(), set_exporter_policy()
Safety register_cardinality_limit(), register_pii_rule()
Health get_health_snapshot()
Runtime update_runtime_config(), reconfigure_telemetry()

Full reference: Python API | TypeScript API

Polyglot Architecture

undef-telemetry/
  src/undef/telemetry/    # Python package
  typescript/             # TypeScript package (@undef-games/telemetry)
  spec/                   # Canonical API spec — all languages validate against it
  e2e/                    # Cross-language E2E tests (W3C trace propagation)

A shared spec/telemetry-api.yaml defines the required API surface. CI validates that both Python and TypeScript exports conform to it. Cross-language distributed tracing is tested end-to-end via W3C traceparent propagation.

Quality

  • 100% branch coverage (Python + TypeScript)
  • 100% mutation kill score (mutmut + Stryker)
  • Strict type checking (mypy + ty + tsc)
  • CodeQL SAST scanning
  • SHA-pinned GitHub Actions
  • Sigstore artifact signing
  • CycloneDX SBOM on releases

Documentation

License

Apache-2.0. See LICENSES/.

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

undef_telemetry-0.4.0.tar.gz (42.1 kB view details)

Uploaded Source

Built Distribution

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

undef_telemetry-0.4.0-py3-none-any.whl (53.0 kB view details)

Uploaded Python 3

File details

Details for the file undef_telemetry-0.4.0.tar.gz.

File metadata

  • Download URL: undef_telemetry-0.4.0.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for undef_telemetry-0.4.0.tar.gz
Algorithm Hash digest
SHA256 1b10599bd9d1a4e647ad3c153ff5b660b0ca68d4797009b95f444970eae2e636
MD5 a1e6bd1642b778e42f3f8dffcdf7f79a
BLAKE2b-256 246038fd174accf53b3818676562a6ef87370bb7445f21d6757af3bc7543a61e

See more details on using hashes here.

Provenance

The following attestation bundles were made for undef_telemetry-0.4.0.tar.gz:

Publisher: release.yml on undef-games/undef-telemetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file undef_telemetry-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for undef_telemetry-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b4c52b75357a10411ed7881edc36d6b0cb79618e7163f5bbbfbdd74aae2b3d7b
MD5 70746ad5ed603833ad4d1309f45efee2
BLAKE2b-256 8884caa92ccc5d319b7f6f63cb1ea1adec43b94cdffac6ca77ea12cdd6719269

See more details on using hashes here.

Provenance

The following attestation bundles were made for undef_telemetry-0.4.0-py3-none-any.whl:

Publisher: release.yml on undef-games/undef-telemetry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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