Skip to main content

Python distributed tracing SDK for JstVerify application mapping

Project description

jstverify-tracing

Python distributed tracing SDK for JstVerify application mapping. Auto-instruments your backend to produce trace spans that connect with the JstVerify JavaScript SDK, giving you a full frontend-to-backend service map.

Installation

pip install jstverify-tracing

With framework extras:

pip install jstverify-tracing[flask]
pip install jstverify-tracing[django]
pip install jstverify-tracing[fastapi]

Quick Start

1. Initialize (once at startup)

import jstverify_tracing

jstverify_tracing.init(
    api_key="your-sdk-key",
    service_name="my-backend",
)

The endpoint defaults to the production ingestion URL (https://sdkapi.jstverify.com/v1/tracing/spans). Override for dev environments:

jstverify_tracing.init(
    api_key="your-sdk-key",
    endpoint="https://sdkapi.dev.jstverify.com/v1/tracing/spans",
    service_name="my-backend",
)

2. Add Framework Middleware

Flask:

from jstverify_tracing.integrations.flask import JstVerifyTracingMiddleware
JstVerifyTracingMiddleware(app)

Django (settings.py):

MIDDLEWARE = [
    "jstverify_tracing.integrations.django.JstVerifyTracingMiddleware",
    ...
]

FastAPI:

from jstverify_tracing.integrations.fastapi import JstVerifyTracingMiddleware
app.add_middleware(JstVerifyTracingMiddleware)

AWS Lambda (API Gateway):

from jstverify_tracing.integrations.awslambda import JstVerifyTracingMiddleware

@JstVerifyTracingMiddleware
def lambda_handler(event, context):
    return {"statusCode": 200, "body": "ok"}

AWS AppSync Lambda Resolver:

from jstverify_tracing.integrations.appsync import JstVerifyAppSyncMiddleware

@JstVerifyAppSyncMiddleware
def handler(event, context):
    return [{"id": "1", "name": "Alice"}]

The AppSync middleware extracts trace context from event["request"]["headers"] and derives the operation name from event["info"]["parentTypeName"] and event["info"]["fieldName"] (e.g. Query.listUsers). Only direct transport mode is supported — relay mode is not available for AppSync since GraphQL responses cannot carry custom HTTP headers.

3. Manual Instrumentation (optional)

from jstverify_tracing import trace, trace_span

@trace("process-payment")
def process_payment(order_id):
    ...

def handle_order(order_id):
    with trace_span("validate-order") as span:
        ...
        span.set_status(200)
    with trace_span("charge-card") as span:
        ...
        span.set_http_metadata(method="POST", url="/payments/charge", status_code=201)

4. Shutdown

jstverify_tracing.shutdown()

Shutdown is also registered via atexit automatically.

Configuration Options

Parameter Type Default Description
api_key str required Your JstVerify SDK API key
endpoint str production URL Span ingestion endpoint URL (defaults to https://sdkapi.jstverify.com/v1/tracing/spans)
service_name str required Service name shown in the service map
service_type str "http" Service type identifier
transport str "direct" "direct" sends spans via HTTP; "relay" encodes spans into response headers
flush_interval float 5.0 Seconds between background flushes
max_queue_size int 200 Max buffered spans (circular buffer)
max_batch_size int 50 Max spans per API request
debug bool False Enable debug logging
patch_requests bool True Auto-patch requests library for outgoing HTTP tracing

How It Works

Direct Mode (default)

  1. The middleware reads X-JstVerify-Trace-Id and X-JstVerify-Parent-Span-Id headers from incoming requests (injected by the JS SDK).
  2. A root span is created for each request, with nested child spans for @trace decorated functions and trace_span context managers.
  3. Outgoing requests library calls are automatically instrumented — trace headers are injected so downstream services can continue the trace.
  4. Spans are buffered in a thread-safe queue and flushed to the JstVerify API in batches by a background daemon thread.

Relay Mode

For backends without outbound internet access (private VPC, strict firewalls), relay mode encodes spans into the X-JstVerify-Spans response header. The JstVerify JS SDK reads this header and relays the spans to the ingestion API on behalf of the backend.

jstverify_tracing.init(
    api_key="your-sdk-key",
    service_name="my-backend",
    transport="relay",  # No endpoint needed
)

How it works:

  1. Each request collects spans in a per-request buffer (async-safe via contextvars).
  2. When the response is sent, all spans are base64url-encoded into the X-JstVerify-Spans header.
  3. The JS SDK decodes the header and merges the spans into its own flush queue.

Limitations:

  • ~20-30 spans per response max due to the 7500-byte header size limit.
  • Only works for request-response flows — async background jobs have no response to carry spans.
  • Cross-origin requests require the Access-Control-Expose-Headers header (set automatically by the middleware).

License

MIT

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

jstverify_tracing-0.2.0.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

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

jstverify_tracing-0.2.0-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: jstverify_tracing-0.2.0.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for jstverify_tracing-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f9154698286dab2e7de35d58c2b17661f901a62d36e29947a98a2f0ddbd510b7
MD5 4ea1674776ca5e261c5b7721e31bee62
BLAKE2b-256 17f4ba35710d6fab050d8fc6b80717d0720a206e9362a66d83407ca908061b38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for jstverify_tracing-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7e5b5e73a3180db14c4285b48996e0525e21c7f71450c4f26df23a1eb4633933
MD5 39ddc6ea82cd734b43d6fe799fe5abd4
BLAKE2b-256 85081108fac40fa630fcd1cf6c8a6d8a9690882460cd9ae9ea0de8d7c38f4bd8

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