mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-04-22 06:41:28 +02:00
Added the HTTP header manipulation layer that enables span context injection into and extraction from HAProxy's HTX message buffers, completing the end-to-end context propagation path. The new http.c module implements three public functions: flt_otel_http_headers_get() extracts HTTP headers matching a name prefix from the channel's HTX buffer into an otelc_text_map structure, stripping the prefix and separator dash from header names before storage; flt_otel_http_header_set() constructs a full header name from a prefix and suffix joined by a dash, removes all existing occurrences, and optionally adds the header with a new value; and flt_otel_http_headers_remove() removes all headers matching a given prefix. A debug-only flt_otel_http_headers_dump() logs all HTTP headers from a channel at NOTICE level. The scope runner in event.c now extracts propagation contexts from HTTP headers before processing spans: for each configured extract context, it calls flt_otel_http_headers_get() to read matching headers into a text map, then passes the text map to flt_otel_scope_context_init() which extracts the OTel span context from the carrier. After span execution, the span runner injects the span context back into HTTP headers via flt_otel_inject_http_headers() followed by flt_otel_http_header_set() for each propagation key. The unused resource cleanup in flt_otel_scope_free_unused() now also removes contexts that failed extraction by deleting their associated HTTP headers via flt_otel_http_headers_remove() before freeing the scope context structure.
32 lines
1009 B
C
32 lines
1009 B
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
#ifndef _OTEL_HTTP_H_
|
|
#define _OTEL_HTTP_H_
|
|
|
|
#ifndef DEBUG_OTEL
|
|
# define flt_otel_http_headers_dump(...) while (0)
|
|
#else
|
|
/* Dump all HTTP headers from a channel for debugging. */
|
|
void flt_otel_http_headers_dump(const struct channel *chn);
|
|
#endif
|
|
|
|
/* Extract HTTP headers matching a prefix into a text map. */
|
|
struct otelc_text_map *flt_otel_http_headers_get(struct channel *chn, const char *prefix, size_t len, char **err);
|
|
|
|
/* Set or replace an HTTP header in a channel. */
|
|
int flt_otel_http_header_set(struct channel *chn, const char *prefix, const char *name, const char *value, char **err);
|
|
|
|
/* Remove all HTTP headers matching a prefix from a channel. */
|
|
int flt_otel_http_headers_remove(struct channel *chn, const char *prefix, char **err);
|
|
|
|
#endif /* _OTEL_HTTP_H_ */
|
|
|
|
/*
|
|
* Local variables:
|
|
* c-indent-level: 8
|
|
* c-basic-offset: 8
|
|
* End:
|
|
*
|
|
* vi: noexpandtab shiftwidth=8 tabstop=8
|
|
*/
|