cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
otel.c File Reference

OpenTelemetry tracing middleware (#402). More...

#include <cwist/sys/app/middleware.h>
#include <cwist/core/mem/alloc.h>
#include <cwist/net/http/http.h>
#include <cwist/net/http/http_client.h>
#include <cjson/cJSON.h>
#include <openssl/rand.h>
#include <pthread.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
Include dependency graph for otel.c:

Go to the source code of this file.

Macros

#define _POSIX_C_SOURCE   200809L
 
#define OTEL_DEFAULT_ENDPOINT   "http://localhost:4318/v1/traces"
 
#define OTEL_DEFAULT_SERVICE   "cwist"
 
#define OTEL_DEFAULT_QUEUE   512U
 
#define OTEL_DEFAULT_BATCH   64U
 
#define OTEL_EXPORT_TIMEOUT_MS   2000
 
#define OTEL_TRACE_ID_HEX   32U
 
#define OTEL_SPAN_ID_HEX   16U
 

Typedefs

typedef struct otel_ctx otel_ctx
 

Functions

cwist_middleware_func cwist_mw_otel_trace (const cwist_otel_cfg_t *cfg)
 OpenTelemetry tracing middleware.
 
const char * cwist_mw_otel_get_trace_id (const cwist_http_request *req)
 Trace id of the span cwist_mw_otel_trace() opened for req.
 

Detailed Description

OpenTelemetry tracing middleware (#402).

The middleware records one SERVER span per request and pushes it onto a bounded ring; a background thread drains the ring in batches and POSTs them to the collector as OTLP/HTTP JSON. Export is fail-open: a full ring drops its oldest span and a failed POST drops the batch, so the collector never slows or fails a request.

The exporter thread is started by the first span a process records, and a pthread_atfork child hook forgets the parent's thread and spans, so every worker process exports its own spans.

Definition in file otel.c.

Macro Definition Documentation

◆ _POSIX_C_SOURCE

#define _POSIX_C_SOURCE   200809L

Definition at line 15 of file otel.c.

◆ OTEL_DEFAULT_BATCH

#define OTEL_DEFAULT_BATCH   64U

Definition at line 32 of file otel.c.

◆ OTEL_DEFAULT_ENDPOINT

#define OTEL_DEFAULT_ENDPOINT   "http://localhost:4318/v1/traces"

Definition at line 29 of file otel.c.

◆ OTEL_DEFAULT_QUEUE

#define OTEL_DEFAULT_QUEUE   512U

Definition at line 31 of file otel.c.

◆ OTEL_DEFAULT_SERVICE

#define OTEL_DEFAULT_SERVICE   "cwist"

Definition at line 30 of file otel.c.

◆ OTEL_EXPORT_TIMEOUT_MS

#define OTEL_EXPORT_TIMEOUT_MS   2000

Definition at line 33 of file otel.c.

◆ OTEL_SPAN_ID_HEX

#define OTEL_SPAN_ID_HEX   16U

Definition at line 35 of file otel.c.

◆ OTEL_TRACE_ID_HEX

#define OTEL_TRACE_ID_HEX   32U

Definition at line 34 of file otel.c.

Typedef Documentation

◆ otel_ctx

typedef struct otel_ctx otel_ctx

Function Documentation

◆ cwist_mw_otel_get_trace_id()

const char * cwist_mw_otel_get_trace_id ( const cwist_http_request *  req)

Trace id of the span cwist_mw_otel_trace() opened for req.

Parameters
reqThe current request.
Returns
32 lowercase hex characters (the caller's trace id when the request carried a valid traceparent, a fresh one otherwise), or NULL when req is not running behind the middleware on this thread.

Definition at line 300 of file otel.c.

References cap.

◆ cwist_mw_otel_trace()

cwist_middleware_func cwist_mw_otel_trace ( const cwist_otel_cfg_t *  cfg)

OpenTelemetry tracing middleware.

Records one SERVER span per request covering the rest of the chain, with the method, path, status and start/end time, and exports the spans to the collector as OTLP/HTTP JSON from a background thread in each worker process. A valid W3C traceparent header makes the span a child of the caller's span; otherwise a new trace starts.

Export is fail-open: a full queue drops its oldest span and a failed export drops the batch; requests are never slowed or failed by the collector.

There is one exporter per process: the first call fixes the configuration and later calls return the same middleware.

Parameters
cfgExporter configuration, or NULL for the defaults.
Returns
The middleware, or NULL when memory could not be had.

Definition at line 272 of file otel.c.

References batch, cwist_otel_cfg_t::batch_size, cap, cwist_alloc_array(), cwist_free(), cwist_strdup(), cwist_otel_cfg_t::endpoint, endpoint, OTEL_DEFAULT_BATCH, OTEL_DEFAULT_ENDPOINT, OTEL_DEFAULT_QUEUE, OTEL_DEFAULT_SERVICE, cwist_otel_cfg_t::queue_cap, and cwist_otel_cfg_t::service_name.

Variable Documentation

◆ batch

size_t batch

Definition at line 54 of file otel.c.

Referenced by cwist_mw_otel_trace().

◆ cap

size_t cap

Definition at line 56 of file otel.c.

Referenced by __attribute__(), base64_encode(), cwist_accept_socket(), cwist_app_asset_add(), cwist_app_asset_add_file(), cwist_app_asset_prefix(), cwist_app_asset_url(), cwist_app_create(), cwist_app_destroy(), cwist_app_dispatch_memory(), cwist_app_dispatch_stream(), cwist_app_enable_openapi(), cwist_app_enable_swagger(), cwist_app_get_db(), cwist_app_get_db_pool(), cwist_app_get_redis_pool(), cwist_app_get_scheduler(), cwist_app_grpc_health(), cwist_app_grpc_health_set_status(), cwist_app_grpc_health_watchers(), cwist_app_grpc_reflection(), cwist_app_grpc_stream(), cwist_app_grpc_unary(), cwist_app_healthz(), cwist_app_http_handler(), cwist_app_http_handler_async(), cwist_app_listen_ex(), cwist_app_register_error_handler(), cwist_app_reload_tls(), cwist_app_req_bind_form(), cwist_app_req_bind_json(), cwist_app_set_session_max_age(), cwist_app_set_tls_groups(), cwist_app_static(), cwist_app_static_with_cache(), cwist_app_use(), cwist_app_use_db(), cwist_app_use_db_pool(), cwist_app_use_ech(), cwist_app_use_ex(), cwist_app_use_http2(), cwist_app_use_http3(), cwist_app_use_https(), cwist_app_use_https2(), cwist_app_use_https3(), cwist_app_use_nuke_db(), cwist_app_use_redis(), cwist_app_use_scheduler(), cwist_app_use_session(), cwist_app_ws(), cwist_app_ws_async(), cwist_app_ws_opt(), cwist_apply_profile(), cwist_assets_clone(), cwist_assets_destroy(), cwist_assets_match(), cwist_assets_respond(), cwist_async_abort(), cwist_async_defer(), cwist_async_dispatch_ack(), cwist_async_dispatch_take(), cwist_async_forget_handle(), cwist_async_forget_response(), cwist_async_record_pending(), cwist_async_release(), cwist_async_respond(), cwist_async_respond_with(), cwist_async_retain(), cwist_async_server_loop(), cwist_async_set_timeout(), cwist_async_wait_dispatched(), cwist_bdr_copy_get(), cwist_bdr_create(), cwist_bdr_destroy(), cwist_bdr_get(), cwist_bdr_get_pinned(), cwist_bdr_get_pinned_cursor(), cwist_bdr_put(), cwist_bdr_put_fixed(), cwist_bdr_put_revalidatable(), cwist_bdr_set_limits(), cwist_bdr_unpin(), cwist_bind_write_error_response(), cwist_config_create(), cwist_config_destroy(), cwist_config_get(), cwist_config_get_bool(), cwist_config_get_int(), cwist_config_load_env(), cwist_config_load_file(), cwist_config_set(), cwist_conn_registry_adopt(), cwist_conn_registry_pending_count(), cwist_conn_registry_sweep_all(), cwist_conn_registry_track(), cwist_conn_registry_untrack(), cwist_cookie_decode(), cwist_cookie_delete(), cwist_cookie_encode(), cwist_cookie_get(), cwist_cookie_parse(), cwist_cookie_set(), cwist_csrf_token(), cwist_curl_global_acquire(), cwist_curl_global_release(), cwist_db_crypt_open(), cwist_db_crypt_seal(), cwist_db_sync_pull(), cwist_db_sync_serve(), cwist_db_transfer_sqlite_to_socket(), cwist_dtls_bio_new(), cwist_dtls_ctx_new(), cwist_dtls_fingerprint(), cwist_dtls_generate_cert(), cwist_endpoint_has_extern(), cwist_error_dispose(), cwist_error_is_ok_extern(), cwist_fast_monotonic_sec(), cwist_flash_get(), cwist_flash_peek(), cwist_flash_pop_all_json(), cwist_gc_scope_track(), cwist_gc_scope_untrack(), cwist_generate_hash_seed(), cwist_get_client_ip_from_fd(), cwist_graphql_add_mutation(), cwist_graphql_add_query(), cwist_graphql_event_source_add_topic(), cwist_graphql_event_source_destroy(), cwist_graphql_execute(), cwist_graphql_parse_subscription(), cwist_graphql_publish(), cwist_graphql_schema_create(), cwist_graphql_serve(), cwist_graphql_ws_add_subscription(), cwist_graphql_ws_attach(), cwist_graphql_ws_create(), cwist_graphql_ws_destroy(), cwist_grpc_call_cancel(), cwist_grpc_call_destroy(), cwist_grpc_call_finish(), cwist_grpc_call_recv(), cwist_grpc_call_retry_pushback_ms(), cwist_grpc_call_start(), cwist_grpc_call_start_ex(), cwist_grpc_channel_apply_service_config_json(), cwist_grpc_channel_call_attempts(), cwist_grpc_channel_call_cancel(), cwist_grpc_channel_call_destroy(), cwist_grpc_channel_call_finish(), cwist_grpc_channel_call_recv(), cwist_grpc_channel_call_start(), cwist_grpc_channel_close(), cwist_grpc_channel_connect(), cwist_grpc_channel_get_state(), cwist_grpc_channel_unary(), cwist_grpc_client_close(), cwist_grpc_client_connect(), cwist_grpc_client_dead(), cwist_grpc_decode_message(), cwist_grpc_decode_next_message(), cwist_grpc_decoder_destroy(), cwist_grpc_decoder_feed(), cwist_grpc_decoder_init(), cwist_grpc_encode_message(), cwist_grpc_metadata_get_binary(), cwist_grpc_parse_timeout(), cwist_grpc_routes_clone(), cwist_grpc_routes_destroy(), cwist_grpc_set_error(), cwist_grpc_set_response(), cwist_grpc_stream_cancelled(), cwist_grpc_stream_close(), cwist_grpc_stream_deadline_remaining_ms(), cwist_grpc_stream_recv(), cwist_grpc_stream_send(), cwist_grpc_stream_set_retry_pushback(), cwist_h2_async_queue_acquire(), cwist_h2_async_queue_enqueue(), cwist_h2_async_queue_release(), cwist_heal_result_free(), cwist_healthz_register(), cwist_healthz_run(), cwist_healthz_unregister(), cwist_http2_flow_control_add_send_window(), cwist_http2_flow_control_consume(), cwist_http2_flow_control_init(), cwist_http2_flow_control_maybe_window_update(), cwist_http2_flow_control_pacing_allowance(), cwist_http2_flow_control_receive(), cwist_http2_flow_control_reserve_send(), cwist_http2_flow_control_update_rtt(), cwist_http2_push_resource(), cwist_http2_serve_connection(), cwist_http2_serve_connection_ex(), cwist_http2_stream_flow_control_add_send_window(), cwist_http2_stream_flow_control_consume(), cwist_http2_stream_flow_control_init(), cwist_http2_stream_flow_control_maybe_window_update(), cwist_http2_stream_flow_control_receive(), cwist_http2_stream_send_data(), cwist_http2_stream_send_headers(), cwist_http2_stream_send_trailers(), cwist_http3_client_create(), cwist_http3_client_destroy(), cwist_http3_client_enable_0rtt(), cwist_http3_client_recv_datagram(), cwist_http3_client_request(), cwist_http3_client_send_datagram(), cwist_http3_client_set_ca_bundle(), cwist_http3_client_set_insecure(), cwist_http3_client_set_retry_delay_ms(), cwist_http3_client_set_server(), cwist_http3_destroy_context(), cwist_http3_init_context(), cwist_http3_init_context_ephemeral(), cwist_http3_method_is_idempotent(), cwist_http3_normalize_response_header_name(), cwist_http3_push_resource(), cwist_http3_reload_context(), cwist_http3_response_header_value_is_safe(), cwist_http3_send_datagram(), cwist_http3_server_loop(), cwist_http3_set_early_data(), cwist_http3_set_handshake_timeout(), cwist_http3_set_idle_timeout(), cwist_http3_set_noprogress_timeout(), cwist_http3_set_ping_period(), cwist_http3_set_stream_priority(), cwist_http_async_close_orphan(), cwist_http_async_conn_fill(), cwist_http_async_rearm(), cwist_http_async_send_response(), cwist_http_client_create(), cwist_http_client_destroy(), cwist_http_client_enable_altsvc(), cwist_http_client_request(), cwist_http_client_set_altsvc_db(), cwist_http_client_set_ca_bundle(), cwist_http_client_set_follow_redirects(), cwist_http_client_set_timeout_ms(), cwist_http_coalesce_append(), cwist_http_coalesce_error_response(), cwist_http_coalesce_flush(), cwist_http_coalesce_flush_blocking(), cwist_http_continuation_shed_count(), cwist_http_format_date(), cwist_http_header_add(), cwist_http_header_free_all(), cwist_http_header_get(), cwist_http_header_remove(), cwist_http_inflight_count(), cwist_http_live_idle_enter(), cwist_http_live_idle_leave(), cwist_http_parse_date(), cwist_http_parse_request(), cwist_http_parse_request_len(), cwist_http_pool_destroy(), cwist_http_pool_init(), cwist_http_pool_init_mode(), cwist_http_pool_limit_core(), cwist_http_pool_submit(), cwist_http_pool_submit_async(), cwist_http_reactor_generation(), cwist_http_reactor_post_live(), cwist_http_receive_request(), cwist_http_receive_request_nb(), cwist_http_request_create(), cwist_http_request_fragment_target(), cwist_http_request_wants_fragment(), cwist_http_response_add_oob(), cwist_http_response_create(), cwist_http_response_destroy(), cwist_http_response_html_redirect(), cwist_http_response_send_file(), cwist_http_response_serialize(), cwist_http_response_set_alt_svc(), cwist_http_response_set_body_ptr(), cwist_http_response_set_html(), cwist_http_response_set_view(), cwist_http_response_stream_end(), cwist_http_response_stream_write(), cwist_http_send_error_response(), cwist_http_send_response(), cwist_http_send_response_async(), cwist_http_send_response_coalesced(), cwist_http_send_response_head(), cwist_http_send_speculative(), cwist_http_sendmsg_speculative(), cwist_http_serialize_headers(), cwist_http_server_loop(), cwist_http_status_reason(), cwist_http_string_to_method(), cwist_http_string_to_method_len(), cwist_http_stringify_response(), cwist_https_accept(), cwist_https_conn_idle(), cwist_https_destroy_context(), cwist_https_dispatch(), cwist_https_idle_timeout_ms(), cwist_https_init_context(), cwist_https_init_context_with_options(), cwist_https_park(), cwist_https_receive_request(), cwist_https_reload_context(), cwist_https_send_response(), cwist_https_send_response_head(), cwist_https_server_loop(), cwist_https_tls_ciphers_aes128_gcm_total(), cwist_https_tls_ciphers_aes256_gcm_total(), cwist_https_tls_ciphers_chacha20_total(), cwist_https_tls_ciphers_other_total(), cwist_https_tls_connections_active(), cwist_https_tls_handshakes_resumed_total(), cwist_https_tls_handshakes_tls12_total(), cwist_https_tls_handshakes_tls13_total(), cwist_https_tls_handshakes_total(), cwist_ice_random_creds(), cwist_ice_stun_build_request(), cwist_ice_stun_build_response(), cwist_ice_stun_get_remote_ufrag(), cwist_ice_stun_parse_response(), cwist_ice_stun_sign_request(), cwist_ice_stun_validate_request(), cwist_io_queue_create(), cwist_io_queue_destroy(), cwist_io_queue_run(), cwist_io_queue_stop(), cwist_io_queue_submit(), cwist_is_ram_critical(), cwist_job_attempts(), cwist_job_destroy(), cwist_job_id(), cwist_job_payload(), cwist_job_queue_ack(), cwist_job_queue_claim(), cwist_job_queue_create_nats(), cwist_job_queue_create_redis(), cwist_job_queue_dead_count(), cwist_job_queue_destroy(), cwist_job_queue_enqueue(), cwist_job_queue_nack(), cwist_job_type(), cwist_json_add_int(), cwist_json_builder_create(), cwist_json_get_raw(), cwist_json_heal(), cwist_json_schema_align(), cwist_jwt_chunks_free(), cwist_jwt_claims_destroy(), cwist_jwt_claims_get(), cwist_jwt_join_chunks(), cwist_jwt_sign(), cwist_jwt_sign_chunks(), cwist_jwt_sign_ed25519(), cwist_jwt_sign_es256(), cwist_jwt_split_chunks(), cwist_jwt_verify(), cwist_jwt_verify_chunks(), cwist_jwt_verify_ed25519(), cwist_jwt_verify_es256(), cwist_log_async_active(), cwist_log_async_flush(), cwist_log_async_start(), cwist_log_async_stop(), cwist_log_async_submit(), cwist_logger_create(), cwist_logger_debug(), cwist_logger_error(), cwist_logger_info(), cwist_logger_log(), cwist_logger_warn(), cwist_lwip_close(), cwist_lwip_config_init(), cwist_lwip_listen(), cwist_lwip_tls_create(), cwist_lwip_tls_destroy(), cwist_make_socket_ipv4(), cwist_metric_add(), cwist_metric_inc(), cwist_metric_load(), cwist_metric_observe(), cwist_metric_set(), cwist_metrics_registry(), cwist_metrics_render_prometheus(), cwist_metrics_reset(), cwist_metrics_serve_http(), cwist_mtls_CRYPTO_memcmp(), cwist_mtls_ERR_error_string_n(), cwist_mtls_ERR_get_error(), cwist_mtls_EVP_CIPHER_CTX_free(), cwist_mtls_EVP_CIPHER_CTX_new(), cwist_mtls_EVP_DecryptFinal_ex(), cwist_mtls_EVP_DecryptInit_ex(), cwist_mtls_EVP_DecryptUpdate(), cwist_mtls_EVP_EncryptFinal_ex(), cwist_mtls_EVP_EncryptInit_ex(), cwist_mtls_EVP_EncryptUpdate(), cwist_mtls_HMAC(), cwist_mtls_HMAC_CTX_free(), cwist_mtls_HMAC_CTX_new(), cwist_mtls_HMAC_Final(), cwist_mtls_HMAC_Init_ex(), cwist_mtls_HMAC_Update(), cwist_mtls_OPENSSL_cleanse(), cwist_mtls_RAND_bytes(), cwist_mtls_SSL_CTX_check_private_key(), cwist_mtls_SSL_CTX_free(), cwist_mtls_SSL_CTX_get_ex_data(), cwist_mtls_SSL_CTX_get_ex_new_index(), cwist_mtls_SSL_CTX_get_min_proto_version(), cwist_mtls_SSL_CTX_new(), cwist_mtls_SSL_CTX_sess_set_cache_size(), cwist_mtls_SSL_CTX_set1_groups_list(), cwist_mtls_SSL_CTX_set_alpn_protos(), cwist_mtls_SSL_CTX_set_alpn_select_cb(), cwist_mtls_SSL_CTX_set_cipher_list(), cwist_mtls_SSL_CTX_set_ciphersuites(), cwist_mtls_SSL_CTX_set_default_verify_paths(), cwist_mtls_SSL_CTX_set_ex_data(), cwist_mtls_SSL_CTX_set_min_proto_version(), cwist_mtls_SSL_CTX_set_mode(), cwist_mtls_SSL_CTX_set_options(), cwist_mtls_SSL_CTX_set_session_cache_mode(), cwist_mtls_SSL_CTX_set_session_id_context(), cwist_mtls_SSL_CTX_set_timeout(), cwist_mtls_SSL_CTX_set_tlsext_ticket_key_cb(), cwist_mtls_SSL_CTX_set_verify(), cwist_mtls_SSL_CTX_use_certificate_chain_file(), cwist_mtls_SSL_CTX_use_certificate_file(), cwist_mtls_SSL_CTX_use_PrivateKey_file(), cwist_mtls_SSL_free(), cwist_mtls_SSL_get0_alpn_selected(), cwist_mtls_SSL_get_cipher_name(), cwist_mtls_SSL_get_error(), cwist_mtls_SSL_get_SSL_CTX(), cwist_mtls_SSL_new(), cwist_mtls_SSL_pending(), cwist_mtls_SSL_read(), cwist_mtls_SSL_select_next_proto(), cwist_mtls_SSL_session_reused(), cwist_mtls_SSL_set_alpn_protos(), cwist_mtls_SSL_set_fd(), cwist_mtls_SSL_set_tlsext_host_name(), cwist_mtls_SSL_shutdown(), cwist_mtls_SSL_version(), cwist_mtls_SSL_write(), cwist_multipart_extract_boundary(), cwist_multipart_parse(), cwist_multipart_result_destroy(), cwist_mux_find_route(), cwist_mux_group_create(), cwist_mux_group_destroy(), cwist_mux_group_handle(), cwist_mux_handle(), cwist_mux_route_use(), cwist_mux_router_create(), cwist_mux_router_destroy(), cwist_mux_serve(), cwist_mw_access_log(), cwist_mw_compress(), cwist_mw_csrf(), cwist_mw_jwt_auth(), cwist_mw_jwt_get_claims(), cwist_mw_metrics_handler(), cwist_mw_otel_get_trace_id(), cwist_mw_otel_trace(), cwist_mw_rate_limit_ip(), cwist_mw_rate_limit_ip_redis(), cwist_mw_rate_limit_reset(), cwist_mw_request_id(), cwist_mw_request_id_handler(), cwist_mw_session(), cwist_nats_connect(), cwist_nats_destroy(), cwist_nats_dispatch(), cwist_nats_native(), cwist_nats_publish_string(), cwist_nats_subscribe(), cwist_openapi_annotate(), cwist_orm_close_socket(), cwist_orm_commit(), cwist_orm_delete(), cwist_orm_exec(), cwist_orm_immediate_commit(), cwist_orm_insert(), cwist_orm_insert_returning_i64(), cwist_orm_insert_returning_int(), cwist_orm_insert_returning_json(), cwist_orm_insert_returning_llong(), cwist_orm_insert_returning_long(), cwist_orm_open_socket(), cwist_orm_query(), cwist_orm_query_typed(), cwist_orm_result_cell(), cwist_orm_result_column_index(), cwist_orm_result_free(), cwist_orm_rollback(), cwist_orm_select(), cwist_orm_select_one_double(), cwist_orm_select_one_i64(), cwist_orm_select_one_int(), cwist_orm_select_one_json(), cwist_orm_select_one_llong(), cwist_orm_select_one_long(), cwist_orm_select_one_string(), cwist_orm_socketpair_cloexec(), cwist_orm_update(), cwist_orm_use_dialect(), cwist_pb_read_field(), cwist_pb_read_varint(), cwist_pb_reader_init(), cwist_pb_skip_field(), cwist_pb_write_bool_field(), cwist_pb_write_bytes_field(), cwist_pb_write_double_field(), cwist_pb_write_fixed32_field(), cwist_pb_write_fixed64_field(), cwist_pb_write_float_field(), cwist_pb_write_int64_field(), cwist_pb_write_key(), cwist_pb_write_raw32(), cwist_pb_write_raw64(), cwist_pb_write_string_field(), cwist_pb_write_uint64_field(), cwist_pb_write_varint(), cwist_pb_writer_free(), cwist_pb_writer_init(), cwist_pb_writer_reserve(), cwist_pb_zigzag_decode(), cwist_pb_zigzag_encode(), cwist_query_map_clear(), cwist_query_map_create(), cwist_query_map_create_in_arena(), cwist_query_map_delete(), cwist_query_map_destroy(), cwist_query_map_foreach(), cwist_query_map_get(), cwist_query_map_parse(), cwist_query_map_set(), cwist_rdbms_mount_runtime(), cwist_rdbms_probe_port(), cwist_reactor_add(), cwist_reactor_add_out(), cwist_reactor_create(), cwist_reactor_del(), cwist_reactor_destroy(), cwist_reactor_mod(), cwist_reactor_post(), cwist_reactor_run(), cwist_reactor_stop(), cwist_reactor_timer_arm(), cwist_redis_auth(), cwist_redis_close(), cwist_redis_command(), cwist_redis_command_argv(), cwist_redis_command_argv_reply(), cwist_redis_connect(), cwist_redis_del(), cwist_redis_expire(), cwist_redis_get(), cwist_redis_pool_command_argv(), cwist_redis_pool_command_argv_reply_timeout(), cwist_redis_pool_create(), cwist_redis_pool_del(), cwist_redis_pool_destroy(), cwist_redis_pool_get(), cwist_redis_pool_publish(), cwist_redis_pool_set(), cwist_redis_pool_setex(), cwist_redis_publish(), cwist_redis_reply_free(), cwist_redis_select(), cwist_redis_set(), cwist_redis_setex(), cwist_redis_subscribe(), cwist_reuseport_enabled(), cwist_sanitize_html(), cwist_sched_p2c_select_worker(), cwist_scheduler_cancel_pending(), cwist_scheduler_create(), cwist_scheduler_destroy(), cwist_scheduler_pending_count(), cwist_scheduler_schedule(), cwist_sctp_assoc_established(), cwist_sctp_conn_close(), cwist_sctp_conn_drain(), cwist_sctp_conn_input(), cwist_sctp_conn_open(), cwist_sctp_global_init(), cwist_sctp_send(), cwist_sctp_tick(), cwist_sdp_parse(), cwist_sdp_write_answer(), cwist_sdp_write_offer(), cwist_seq_assembler_create_limited(), cwist_seq_assembler_destroy(), cwist_seq_assembler_feed(), cwist_seq_assembler_get_data(), cwist_seq_assembler_is_complete(), cwist_seq_assembler_recovery_targets(), cwist_seq_assembler_reset(), cwist_seq_auth_context_create(), cwist_seq_auth_context_destroy(), cwist_seq_auth_mark_complete(), cwist_seq_auth_random(), cwist_seq_auth_unwrap(), cwist_seq_auth_wrap(), cwist_seq_chunk_parse(), cwist_seq_message_free(), cwist_seq_split(), cwist_session_commit(), cwist_session_get(), cwist_session_start(), cwist_shutdown_install_handlers(), cwist_shutdown_request(), cwist_shutdown_reset(), cwist_shutdown_restore_handlers(), cwist_sse_response_comment(), cwist_sse_response_event(), cwist_sse_stream_close(), cwist_sse_stream_comment(), cwist_sse_stream_open(), cwist_sse_stream_send(), cwist_sstring_adopt_len(), cwist_sstring_adopt_region(), cwist_sstring_append(), cwist_sstring_append_escaped(), cwist_sstring_append_len(), cwist_sstring_append_sstring(), cwist_sstring_append_sstring_escaped(), cwist_sstring_assign(), cwist_sstring_assign_len(), cwist_sstring_borrow(), cwist_sstring_change_size(), cwist_sstring_compare(), cwist_sstring_compare_sstring(), cwist_sstring_copy(), cwist_sstring_copy_sstring(), cwist_sstring_create(), cwist_sstring_destroy(), cwist_sstring_init(), cwist_sstring_init_escaped(), cwist_sstring_ltrim(), cwist_sstring_rtrim(), cwist_sstring_seek(), cwist_sstring_substr(), cwist_sstring_trim(), cwist_stream_req_begin(), cwist_stream_req_dispatch(), cwist_stream_req_feed(), cwist_template_render(), cwist_template_render_file(), cwist_test_client_clear_cookies(), cwist_test_client_create(), cwist_test_client_delete(), cwist_test_client_get(), cwist_test_client_get_cookie(), cwist_test_client_post_json(), cwist_test_client_post_multipart(), cwist_test_client_set_cookie(), cwist_tls_apply_pqc_layer(), cwist_tls_autoload_intermediates(), cwist_tls_sess_cache_size(), cwist_url_for(), cwist_waf_is_safe(), cwist_webrtc_conn_buffered_amount(), cwist_webrtc_conn_close(), cwist_webrtc_conn_on_channel_open(), cwist_webrtc_conn_release(), cwist_webrtc_conn_retain(), cwist_webrtc_conn_sctp_out(), cwist_webrtc_conn_send(), cwist_webrtc_connect(), cwist_webrtc_ctx_connection_count(), cwist_webrtc_ctx_free(), cwist_webrtc_ctx_new(), cwist_webrtc_ctx_new_on(), cwist_webrtc_ctx_set_channel_handler(), cwist_webrtc_ctx_set_close_handler(), cwist_webrtc_ctx_set_message_handler(), cwist_webrtc_handle_offer(), cwist_websocket_async_attach(), cwist_websocket_async_attach_ex(), cwist_websocket_async_close(), cwist_websocket_async_close_code(), cwist_websocket_close(), cwist_websocket_frame_destroy(), cwist_websocket_receive(), cwist_websocket_receive_sequenced(), cwist_websocket_send(), cwist_websocket_send_sequenced(), cwist_websocket_upgrade(), cwist_websocket_upgrade_response(), cwist_webtransport_close_session(), cwist_webtransport_close_stream(), cwist_webtransport_flush(), cwist_webtransport_max_datagram_size(), cwist_webtransport_open_bidi_stream(), cwist_webtransport_open_uni_stream(), cwist_webtransport_read(), cwist_webtransport_send_datagram(), cwist_webtransport_write(), cwist_zod_parse(), cwist_zod_print_errors(), cwist_zod_validate(), get_cpu_cores(), get_optimal_thread_count(), h2_decode_integer(), h2_decode_string(), h2_encode_integer(), h2_encode_string(), h2_huffman_decode(), h2_static_header(), headers_have_content_length(), https_pool_destroy(), https_pool_init(), https_pool_submit(), https_pool_submit_conn(), https_pool_submit_ready(), make_error(), quic_flow_control_adjust_windows(), quic_flow_control_consume_stream(), quic_flow_control_init(), quic_flow_control_maybe_send_max_data(), quic_flow_control_maybe_send_max_stream_data(), quic_flow_control_update_rtt(), quic_stream_fc_init(), session_arena_alloc(), session_manager_init(), session_manager_reset(), session_shared_alloc(), session_shared_dec(), session_shared_inc(), sha1(), and siphash24().

◆ configured

bool configured

Definition at line 59 of file otel.c.

◆ count

◆ endpoint

char* endpoint

Definition at line 52 of file otel.c.

Referenced by cwist_mw_otel_trace().

◆ exporter

pthread_t exporter

Definition at line 61 of file otel.c.

◆ exporter_alive

bool exporter_alive

Definition at line 60 of file otel.c.

◆ head

◆ ring

otel_span_t* ring

Definition at line 55 of file otel.c.

◆ service_name

char* service_name

Definition at line 53 of file otel.c.