/* SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef _OTEL_EVENT_H_ #define _OTEL_EVENT_H_ /* * This must be defined in order for macro FLT_OTEL_EVENT_DEFINES * and structure flt_otel_event_data to have the correct contents. */ #define AN__NONE 0 #define AN__STREAM_START 0 /* on-stream-start */ #define AN__STREAM_STOP 0 /* on-stream-stop */ #define AN__IDLE_TIMEOUT 0 /* on-idle-timeout */ #define AN__BACKEND_SET 0 /* on-backend-set */ #define AN_REQ_HTTP_HEADERS 0 /* on-http-headers-request */ #define AN_RES_HTTP_HEADERS 0 /* on-http-headers-response */ #define AN_REQ_HTTP_END 0 /* on-http-end-request */ #define AN_RES_HTTP_END 0 /* on-http-end-response */ #define AN_RES_HTTP_REPLY 0 /* on-http-reply */ #define AN_REQ_CLIENT_SESS_START 0 #define AN_REQ_SERVER_UNAVAILABLE 0 #define AN_REQ_CLIENT_SESS_END 0 #define AN_RES_SERVER_SESS_START 0 #define AN_RES_SERVER_SESS_END 0 #define SMP_VAL_FE_ 0 #define SMP_VAL_BE_ 0 #define SMP_OPT_DIR_ 0xff /* * Event names are selected to be somewhat compatible with the SPOE filter, * from which the following names are taken: * - on-client-session -> on-client-session-start * - on-frontend-tcp-request * - on-frontend-http-request * - on-backend-tcp-request * - on-backend-http-request * - on-server-session -> on-server-session-start * - on-tcp-response * - on-http-response * * FLT_OTEL_EVENT_NONE is used as an index for 'otel-scope' sections that do not * have an event defined. The 'otel-scope' sections thus defined can be used * within the 'otel-group' section. * * A description of the macro arguments can be found in the structure * flt_otel_event_data definition. * * The following table is derived from the definitions AN_REQ_* and AN_RES_* * found in the HAProxy include file include/haproxy/channel-t.h. */ #define FLT_OTEL_EVENT_DEFINES \ /* Stream lifecycle pseudo-events (an_bit = 0, not tied to a channel analyzer) */ \ FLT_OTEL_EVENT_DEF( NONE, , , , 0, "") \ FLT_OTEL_EVENT_DEF( STREAM_START, , , , 0, "on-stream-start") \ FLT_OTEL_EVENT_DEF( STREAM_STOP, , , , 0, "on-stream-stop") \ FLT_OTEL_EVENT_DEF( CLIENT_SESS_START, REQ, CON_ACC, , 1, "on-client-session-start") \ FLT_OTEL_EVENT_DEF( IDLE_TIMEOUT, , , , 0, "on-idle-timeout") \ FLT_OTEL_EVENT_DEF( BACKEND_SET, , , , 0, "on-backend-set") \ \ /* Request analyzers */ \ /* FLT_OTEL_EVENT_DEF( FLT_START_FE, REQ, , , , "on-filter-start") */ \ FLT_OTEL_EVENT_DEF( INSPECT_FE, REQ, REQ_CNT, , 1, "on-frontend-tcp-request") \ FLT_OTEL_EVENT_DEF( WAIT_HTTP, REQ, , , 1, "on-http-wait-request") \ FLT_OTEL_EVENT_DEF( HTTP_BODY, REQ, , , 1, "on-http-body-request") \ FLT_OTEL_EVENT_DEF( HTTP_PROCESS_FE, REQ, HRQ_HDR, , 1, "on-frontend-http-request") \ FLT_OTEL_EVENT_DEF( SWITCHING_RULES, REQ, , , 1, "on-switching-rules-request") \ /* FLT_OTEL_EVENT_DEF( FLT_START_BE, REQ, , , , "") */ \ FLT_OTEL_EVENT_DEF( INSPECT_BE, REQ, REQ_CNT, REQ_CNT, 1, "on-backend-tcp-request") \ FLT_OTEL_EVENT_DEF( HTTP_PROCESS_BE, REQ, HRQ_HDR, HRQ_HDR, 1, "on-backend-http-request") \ /* FLT_OTEL_EVENT_DEF( HTTP_TARPIT, REQ, , , 1, "on-http-tarpit-request") */ \ FLT_OTEL_EVENT_DEF( SRV_RULES, REQ, , , 1, "on-process-server-rules-request") \ FLT_OTEL_EVENT_DEF( HTTP_INNER, REQ, , , 1, "on-http-process-request") \ FLT_OTEL_EVENT_DEF( PRST_RDP_COOKIE, REQ, , , 1, "on-tcp-rdp-cookie-request") \ FLT_OTEL_EVENT_DEF( STICKING_RULES, REQ, , , 1, "on-process-sticking-rules-request") \ /* FLT_OTEL_EVENT_DEF( FLT_HTTP_HDRS, REQ, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( HTTP_XFER_BODY, REQ, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( WAIT_CLI, REQ, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( FLT_XFER_DATA, REQ, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( FLT_END, REQ, , , , "") */ \ FLT_OTEL_EVENT_DEF( HTTP_HEADERS, REQ, HRQ_HDR, HRQ_HDR, 1, "on-http-headers-request") \ FLT_OTEL_EVENT_DEF( HTTP_END, REQ, , , 1, "on-http-end-request") \ FLT_OTEL_EVENT_DEF( CLIENT_SESS_END, REQ, , , 0, "on-client-session-end") \ FLT_OTEL_EVENT_DEF(SERVER_UNAVAILABLE, REQ, , , 0, "on-server-unavailable") \ \ /* Response analyzers */ \ FLT_OTEL_EVENT_DEF( SERVER_SESS_START, RES, , SRV_CON, 0, "on-server-session-start") \ /* FLT_OTEL_EVENT_DEF( FLT_START_FE, RES, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( FLT_START_BE, RES, , , , "") */ \ FLT_OTEL_EVENT_DEF( INSPECT, RES, RES_CNT, RES_CNT, 0, "on-tcp-response") \ FLT_OTEL_EVENT_DEF( WAIT_HTTP, RES, , , 1, "on-http-wait-response") \ FLT_OTEL_EVENT_DEF( STORE_RULES, RES, , , 1, "on-process-store-rules-response") \ FLT_OTEL_EVENT_DEF( HTTP_PROCESS_BE, RES, HRS_HDR, HRS_HDR, 1, "on-http-response") \ FLT_OTEL_EVENT_DEF( HTTP_HEADERS, RES, HRS_HDR, HRS_HDR, 1, "on-http-headers-response") \ FLT_OTEL_EVENT_DEF( HTTP_END, RES, , , 0, "on-http-end-response") \ FLT_OTEL_EVENT_DEF( HTTP_REPLY, RES, , , 0, "on-http-reply") \ /* FLT_OTEL_EVENT_DEF( HTTP_PROCESS_FE, RES, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( FLT_HTTP_HDRS, RES, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( HTTP_XFER_BODY, RES, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( WAIT_CLI, RES, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( FLT_XFER_DATA, RES, , , , "") */ \ /* FLT_OTEL_EVENT_DEF( FLT_END, RES, , , , "") */ \ FLT_OTEL_EVENT_DEF( SERVER_SESS_END, RES, , , 0, "on-server-session-end") enum FLT_OTEL_EVENT_enum { #define FLT_OTEL_EVENT_DEF(a,b,c,d,e,f) FLT_OTEL_EVENT_##b##_##a, FLT_OTEL_EVENT_DEFINES FLT_OTEL_EVENT_MAX #undef FLT_OTEL_EVENT_DEF }; /* Sample data types associated with a scope event. */ enum FLT_OTEL_EVENT_SAMPLE_enum { FLT_OTEL_EVENT_SAMPLE_ATTRIBUTE = 0, FLT_OTEL_EVENT_SAMPLE_EVENT, FLT_OTEL_EVENT_SAMPLE_BAGGAGE, FLT_OTEL_EVENT_SAMPLE_STATUS, }; /* Per-event metadata mapping analyzer bits to filter event names. */ struct flt_otel_event_data { uint an_bit; /* Used channel analyser. */ const char *an_name; /* Channel analyser name. */ uint smp_opt_dir; /* Fetch direction (request/response). */ uint smp_val_fe; /* Valid FE fetch location. */ uint smp_val_be; /* Valid BE fetch location. */ bool flag_http_inject; /* Span context injection allowed. */ const char *name; /* Filter event name. */ }; struct flt_otel_conf_scope; /* Per-event metadata table indexed by FLT_OTEL_EVENT_* constants. */ extern const struct flt_otel_event_data flt_otel_event_data[FLT_OTEL_EVENT_MAX]; /* Execute a single scope: create spans, record instruments, evaluate samples. */ int flt_otel_scope_run(struct stream *s, struct filter *f, struct channel *chn, struct flt_otel_conf_scope *conf_scope, const struct timespec *ts_steady, const struct timespec *ts_system, uint dir, char **err); /* Run all scopes matching a filter event on the given stream and channel. */ int flt_otel_event_run(struct stream *s, struct filter *f, struct channel *chn, int event, char **err); #endif /* _OTEL_EVENT_H_ */ /* * Local variables: * c-indent-level: 8 * c-basic-offset: 8 * End: * * vi: noexpandtab shiftwidth=8 tabstop=8 */