summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_http_variables.c
diff options
context:
space:
mode:
authorAndrei Zeliankou <zelenkov@nginx.com>2023-11-08 17:34:59 +0000
committerAndrei Zeliankou <zelenkov@nginx.com>2023-11-08 17:34:59 +0000
commita88e857b5b4100bb62be8a73c1badd999561b328 (patch)
tree652f98a6d9792bcb22b5fe23427f789e7853faf9 /src/nxt_http_variables.c
parent6ae7142840a0f5dd28fb0623dbd88d82d6b29f7a (diff)
downloadunit-a88e857b5b4100bb62be8a73c1badd999561b328.tar.gz
unit-a88e857b5b4100bb62be8a73c1badd999561b328.tar.bz2
Var: $request_id variable.
This variable contains a string that is formed using random data and can be used as a unique request identifier. This closes #714 issue on GitHub.
Diffstat (limited to 'src/nxt_http_variables.c')
-rw-r--r--src/nxt_http_variables.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/nxt_http_variables.c b/src/nxt_http_variables.c
index 46594a6b..ec744317 100644
--- a/src/nxt_http_variables.c
+++ b/src/nxt_http_variables.c
@@ -28,6 +28,8 @@ static u_char *nxt_http_log_date(u_char *buf, nxt_realtime_t *now,
struct tm *tm, size_t size, const char *format);
static nxt_int_t nxt_http_var_request_line(nxt_task_t *task, nxt_str_t *str,
void *ctx, void *data);
+static nxt_int_t nxt_http_var_request_id(nxt_task_t *task, nxt_str_t *str,
+ void *ctx, void *data);
static nxt_int_t nxt_http_var_status(nxt_task_t *task, nxt_str_t *str,
void *ctx, void *data);
static nxt_int_t nxt_http_var_body_bytes_sent(nxt_task_t *task, nxt_str_t *str,
@@ -90,6 +92,10 @@ static nxt_var_decl_t nxt_http_vars[] = {
.handler = nxt_http_var_request_line,
.cacheable = 1,
}, {
+ .name = nxt_string("request_id"),
+ .handler = nxt_http_var_request_id,
+ .cacheable = 1,
+ }, {
.name = nxt_string("status"),
.handler = nxt_http_var_status,
.cacheable = 1,
@@ -396,6 +402,32 @@ nxt_http_var_request_line(nxt_task_t *task, nxt_str_t *str, void *ctx,
static nxt_int_t
+nxt_http_var_request_id(nxt_task_t *task, nxt_str_t *str, void *ctx,
+ void *data)
+{
+ nxt_random_t *rand;
+ nxt_http_request_t *r;
+
+ r = ctx;
+
+ str->start = nxt_mp_nget(r->mem_pool, 32);
+ if (nxt_slow_path(str->start == NULL)) {
+ return NXT_ERROR;
+ }
+
+ str->length = 32;
+
+ rand = &task->thread->random;
+
+ (void) nxt_sprintf(str->start, str->start + 32, "%08xD%08xD%08xD%08xD",
+ nxt_random(rand), nxt_random(rand),
+ nxt_random(rand), nxt_random(rand));
+
+ return NXT_OK;
+}
+
+
+static nxt_int_t
nxt_http_var_body_bytes_sent(nxt_task_t *task, nxt_str_t *str, void *ctx,
void *data)
{