Skip to main content

Http tracing middleware for chocs library.

Project description

Chocs-Trace
PyPI version CI Release License: MIT

Http tracing middleware for chocs library.

Installation

Poetry:

poetry add chocs-middleware.trace

Pip:

pip install chocs-middleware.trace

Features

  • Automatic generation and propagation of tracing headers (x-request-id, x-correlation-id, x-causation-id)
  • Sentry integration
  • More intuitive log formatting options
  • Structured logging

Usage

Support tracing in your responses

from chocs_middleware.trace import TraceMiddleware
from chocs import Application, HttpRequest, HttpResponse

# id_prefix will ensure generated tracing headers to contain your prefix
app = Application(TraceMiddleware(id_prefix="service-name-"))


@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
    return HttpResponse("Hello!")  # tracing middleware will automatically attach x-request-id, x-correlation-id, x-causation-id headers to your response

Tracing requests

from chocs_middleware.trace import TraceMiddleware, HttpStrategy
from chocs import Application, HttpRequest, HttpResponse
import requests

# http_strategy will try to detect requests library and use it to add tracing headers in all your requests
# if it fails to detect requests library it will fallback to urllib3
app = Application(TraceMiddleware(http_strategy=HttpStrategy.AUTO))


@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
    
    requests.get("http://example.com/test")  # middleware will automatically attach x-correlation-id, x-causation-id and x-request-id headers to your request
    
    return HttpResponse("Hello!")

# when using the requests.request method you will need to add headers for it to use, otherwise it will generate default headers and is unable to attach x-correlation-id, x-causation-id and x-request-id headers
@app.get("/test")
    def say_hello(req: HttpRequest, headers=req.headers) -> HttpResponse:
        response = requests.request("GET", "http://test.com/")
        assert response.content == b"ok"

        return HttpResponse("OK")

Using logger

from chocs import Application, HttpRequest, HttpResponse
from chocs_middleware.trace import TraceMiddleware, Logger

app = Application(TraceMiddleware())


@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
    logger = Logger.get("logger_name")
    logger.info("Hello {name}!", name="Bob")  # will output to log stream Hello Bob!
    return HttpResponse("Hello!")

Formatting message

from chocs import Application, HttpRequest, HttpResponse
from chocs_middleware.trace import TraceMiddleware, Logger

app = Application(TraceMiddleware())


@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
    logger = Logger.get("logger_name", message_format="[{level}] {tags.request.x-correlation-id} {msg}")
    logger.info("Hello {name}!", name="Bob")  # will output to log stream Hello Bob!
    return HttpResponse("Hello!")

Available formatting options

Name Example value Description
{level} DEBUG Log level name
{msg} Example message Log message after interpolation
{log_message} Example {name} Log message before interpolation
{timestamp} 2022-03-07T20:06:23.453866 Time of the logged message
{filename} example.py Name of the python file where message was log
{funcName} example_function Name of the function where message was log
{module} example_module Name of the module where message was log
{pathname} example/path Path name of the file where message was log
{tags.*} some value Custom tag value set by calling Logger.set_tag function

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

chocs_middleware_trace-0.4.3.tar.gz (6.1 kB view details)

Uploaded Source

File details

Details for the file chocs_middleware_trace-0.4.3.tar.gz.

File metadata

  • Download URL: chocs_middleware_trace-0.4.3.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.1 CPython/3.8.16 Linux/5.15.0-1034-azure

File hashes

Hashes for chocs_middleware_trace-0.4.3.tar.gz
Algorithm Hash digest
SHA256 fe19bd104e9ff95a1044618c6a4dc81fba3ef9356f40057b6781e51bf062ca45
MD5 2e88707f2fc4dac0e4b6941b4bc2b7bb
BLAKE2b-256 c16d2ededaad91dabe4602095fee005da85be23643600c01439e1ef7c7cfc2d5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page