NAME

Hypersonic::Middleware::RequestId - JIT compiled request ID middleware

SYNOPSIS

use Hypersonic;

my $server = Hypersonic->new(port => 8080);

# Enable request ID (JIT compiled)
$server->enable_request_id();

$server->get('/' => sub {
    my ($req) = @_;
    my $id = $req->{request_id};
    return { request_id => $id };
});

DESCRIPTION

Adds unique request IDs for distributed tracing. The ID generation is JIT compiled to C for maximum performance.

If an incoming request has an X-Request-ID header (from upstream proxy), it is preserved. Otherwise a new ID is generated.

JIT COMPILATION

The generate_id() function is compiled to native C code:

static void generate_request_id(char* buf, size_t buflen) {
    unsigned long ts = (unsigned long)time(NULL);
    unsigned long cnt = g_request_counter++;
    snprintf(buf, buflen, "%lx-%lx-%x", ts, cnt, (unsigned int)g_pid);
}

AUTHOR

LNATION