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