mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-04-19 04:32:57 +02:00
MINOR: Add generate_unique_id() helper
This new function will handle the actual generation of the unique ID according to a format. The caller is responsible to check that no unique ID is stored yet.
This commit is contained in:
parent
4cf06a7d23
commit
73040e3a8e
@ -196,6 +196,8 @@ char *update_log_hdr(const time_t time);
|
||||
char * get_format_pid_sep1(int format, size_t *len);
|
||||
char * get_format_pid_sep2(int format, size_t *len);
|
||||
|
||||
void generate_unique_id(struct ist *dst, struct session *sess, struct stream *strm, struct lf_expr *format);
|
||||
|
||||
/*
|
||||
* Builds a log line for the stream (must be valid).
|
||||
*/
|
||||
|
||||
24
src/log.c
24
src/log.c
@ -3879,6 +3879,30 @@ int lf_expr_dup(const struct lf_expr *orig, struct lf_expr *dest)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Generates a unique ID based on the given <format> and stores it
|
||||
* in <dst>. <dst> must be IST_NULL when this function is called.
|
||||
*
|
||||
* If this function fails to allocate memory IST_NULL is stored.
|
||||
*/
|
||||
void generate_unique_id(struct ist *dst, struct session *sess, struct stream *strm, struct lf_expr *format)
|
||||
{
|
||||
char *unique_id;
|
||||
|
||||
BUG_ON(isttest(*dst));
|
||||
|
||||
unique_id = pool_alloc(pool_head_uniqueid);
|
||||
if (unique_id == NULL) {
|
||||
*dst = IST_NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Initialize <dst> to an empty string to prevent infinite
|
||||
* recursion when the <format> references %[unique-id] or %ID.
|
||||
*/
|
||||
*dst = ist2(unique_id, 0);
|
||||
dst->len = sess_build_logline(sess, strm, unique_id, UNIQUEID_LEN, format);
|
||||
}
|
||||
|
||||
/* Builds a log line in <dst> based on <lf_expr>, and stops before reaching
|
||||
* <maxsize> characters. Returns the size of the output string in characters,
|
||||
* not counting the trailing zero which is always added if the resulting size
|
||||
|
||||
11
src/stream.c
11
src/stream.c
@ -3094,16 +3094,7 @@ INITCALL0(STG_INIT, init_stream);
|
||||
struct ist stream_generate_unique_id(struct stream *strm, struct lf_expr *format)
|
||||
{
|
||||
if (!isttest(strm->unique_id)) {
|
||||
char *unique_id;
|
||||
|
||||
if ((unique_id = pool_alloc(pool_head_uniqueid)) == NULL)
|
||||
return IST_NULL;
|
||||
|
||||
/* Initialize ->unique_id to an empty string to prevent infinite
|
||||
* recursion when the <format> references %[unique-id] or %ID.
|
||||
*/
|
||||
strm->unique_id = ist2(unique_id, 0);
|
||||
strm->unique_id.len = build_logline(strm, unique_id, UNIQUEID_LEN, format);
|
||||
generate_unique_id(&strm->unique_id, strm_sess(strm), strm, format);
|
||||
}
|
||||
|
||||
return strm->unique_id;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user