@@ -20,22 +20,22 @@ static void report_otel_cfg_telemetry_invalid(const char *otel_cfg, const char *
2020 }
2121}
2222
23- static bool get_otel_value (zai_str str , zai_env_buffer buf , bool pre_rinit ) {
24- if (zai_getenv_ex (str , buf , pre_rinit ) == ZAI_ENV_SUCCESS ) {
25- return true ;
26- }
23+ static bool get_otel_value (zai_str str , zai_env_buffer * buf , bool pre_rinit ) {
24+ if (! pre_rinit && zai_sapi_getenv (str , buf ) == ZAI_ENV_SUCCESS ) return true;
25+ zai_option_str sys = zai_sys_getenv ( str ) ;
26+ if ( zai_option_str_is_some ( sys )) { buf -> ptr = sys . ptr ; buf -> len = sys . len ; return true; }
2727
2828 zval * cfg = cfg_get_entry (str .ptr , str .len );
2929 if (cfg ) {
3030 if (Z_TYPE_P (cfg ) == IS_ARRAY ) {
3131 zval * val ;
32- char * off = buf . ptr ;
32+ char * off = buf -> ptr ;
3333 ZEND_HASH_FOREACH_VAL (Z_ARR_P (cfg ), val ) {
3434 if (Z_TYPE_P (val ) == IS_STRING ) {
35- if (off - buf . ptr + Z_STRLEN_P (val ) + 2 >= ZAI_ENV_MAX_BUFSIZ ) {
35+ if (off - buf -> ptr + Z_STRLEN_P (val ) + 2 >= ZAI_ENV_MAX_BUFSIZ ) {
3636 return false;
3737 }
38- if (off != buf . ptr ) {
38+ if (off != buf -> ptr ) {
3939 * off ++ = ',' ;
4040 }
4141 memcpy (off , Z_STRVAL_P (val ), Z_STRLEN_P (val ));
@@ -46,29 +46,30 @@ static bool get_otel_value(zai_str str, zai_env_buffer buf, bool pre_rinit) {
4646 } else if (Z_STRLEN_P (cfg ) == 0 || Z_STRLEN_P (cfg ) + 1 >= ZAI_ENV_MAX_BUFSIZ ) {
4747 return false;
4848 } else {
49- memcpy (buf . ptr , Z_STRVAL_P (cfg ), Z_STRLEN_P (cfg ) + 1 );
49+ memcpy (buf -> ptr , Z_STRVAL_P (cfg ), Z_STRLEN_P (cfg ) + 1 );
5050 }
5151 return true;
5252 }
5353
5454 return false;
5555}
5656
57- static bool ddtrace_conf_otel_resource_attributes_special (const char * tag , int len , zai_env_buffer buf , bool pre_rinit ) {
58- if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_RESOURCE_ATTRIBUTES" ), buf , pre_rinit )) {
57+ static bool ddtrace_conf_otel_resource_attributes_special (const char * tag , int len , zai_env_buffer * buf , bool pre_rinit ) {
58+ ZAI_ENV_BUFFER_INIT (local , ZAI_ENV_MAX_BUFSIZ );
59+ if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_RESOURCE_ATTRIBUTES" ), & local , pre_rinit )) {
5960 return false;
6061 }
6162
62- for (char * cur = buf .ptr , * key_start = cur ; * cur ; ++ cur ) {
63+ for (char * cur = local .ptr , * key_start = cur ; * cur ; ++ cur ) {
6364 if (* cur == '=' ) {
6465 char * key_end = cur ++ ;
6566 while (* cur && * cur != ',' ) {
6667 ++ cur ;
6768 }
6869 if (key_end - key_start == len && memcmp (key_start , tag , len ) == 0 && key_end [1 ]) {
6970 size_t vallen = cur - (key_end + 1 );
70- memcpy (buf . ptr , key_end + 1 , vallen );
71- buf . ptr [vallen ] = 0 ;
71+ memcpy (buf -> ptr , key_end + 1 , vallen );
72+ buf -> ptr [vallen ] = 0 ;
7273 return true;
7374 }
7475 key_start = cur -- + 1 ;
@@ -78,92 +79,95 @@ static bool ddtrace_conf_otel_resource_attributes_special(const char *tag, int l
7879 return false;
7980}
8081
81- bool ddtrace_conf_otel_resource_attributes_env (zai_env_buffer buf , bool pre_rinit ) {
82+ bool ddtrace_conf_otel_resource_attributes_env (zai_env_buffer * buf , bool pre_rinit ) {
8283 return ddtrace_conf_otel_resource_attributes_special (ZEND_STRL ("deployment.environment" ), buf , pre_rinit );
8384}
8485
85- bool ddtrace_conf_otel_resource_attributes_version (zai_env_buffer buf , bool pre_rinit ) {
86+ bool ddtrace_conf_otel_resource_attributes_version (zai_env_buffer * buf , bool pre_rinit ) {
8687 return ddtrace_conf_otel_resource_attributes_special (ZEND_STRL ("service.version" ), buf , pre_rinit );
8788}
8889
89- bool ddtrace_conf_otel_service_name (zai_env_buffer buf , bool pre_rinit ) {
90+ bool ddtrace_conf_otel_service_name (zai_env_buffer * buf , bool pre_rinit ) {
9091 return get_otel_value ((zai_str )ZAI_STRL ("OTEL_SERVICE_NAME" ), buf , pre_rinit )
9192 || ddtrace_conf_otel_resource_attributes_special (ZEND_STRL ("service.name" ), buf , pre_rinit );
9293}
9394
94- bool ddtrace_conf_otel_log_level (zai_env_buffer buf , bool pre_rinit ) {
95+ bool ddtrace_conf_otel_log_level (zai_env_buffer * buf , bool pre_rinit ) {
9596 return get_otel_value ((zai_str )ZAI_STRL ("OTEL_LOG_LEVEL" ), buf , pre_rinit );
9697}
9798
98- bool ddtrace_conf_otel_propagators (zai_env_buffer buf , bool pre_rinit ) {
99- if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_PROPAGATORS" ), buf , pre_rinit )) {
99+ bool ddtrace_conf_otel_propagators (zai_env_buffer * buf , bool pre_rinit ) {
100+ ZAI_ENV_BUFFER_INIT (local , ZAI_ENV_MAX_BUFSIZ );
101+ if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_PROPAGATORS" ), & local , pre_rinit )) {
100102 return false;
101103 }
102- char * off = (char * )zend_memnstr (buf .ptr , ZEND_STRL ("b3" ), buf .ptr + strlen (buf .ptr ));
103- if (off && (!off [strlen ("b3" )] || off [strlen ("b3" )] == ',' ) && strlen (buf .ptr ) < buf .len - 100 ) {
104- memmove (off + strlen ("b3 single header" ), off + strlen ("b3" ), buf .ptr + strlen (buf .ptr ) - (off + strlen ("b3" )) + 1 );
104+ memcpy (buf -> ptr , local .ptr , strlen (local .ptr ) + 1 );
105+ char * off = (char * )zend_memnstr (buf -> ptr , ZEND_STRL ("b3" ), buf -> ptr + strlen (buf -> ptr ));
106+ if (off && (!off [strlen ("b3" )] || off [strlen ("b3" )] == ',' ) && strlen (buf -> ptr ) < buf -> len - 100 ) {
107+ memmove (off + strlen ("b3 single header" ), off + strlen ("b3" ), buf -> ptr + strlen (buf -> ptr ) - (off + strlen ("b3" )) + 1 );
105108 memcpy (off , "b3 single header" , strlen ("b3 single header" ));
106109 }
107110 return true;
108111}
109112
110- bool ddtrace_conf_otel_sample_rate (zai_env_buffer buf , bool pre_rinit ) {
113+ bool ddtrace_conf_otel_sample_rate (zai_env_buffer * buf , bool pre_rinit ) {
111114 if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_TRACES_SAMPLER" ), buf , pre_rinit )) {
112115 return false;
113116 }
114117
115- if (strcmp (buf . ptr , "always_on" ) == 0 || strcmp (buf . ptr , "parentbased_always_on" ) == 0 ) {
116- memcpy ( buf . ptr , ZEND_STRS ( "1" )) ;
118+ if (strcmp (buf -> ptr , "always_on" ) == 0 || strcmp (buf -> ptr , "parentbased_always_on" ) == 0 ) {
119+ buf -> ptr = "1" ; buf -> len = 1 ;
117120 return true;
118121 }
119- if (strcmp (buf . ptr , "always_off" ) == 0 || strcmp (buf . ptr , "parentbased_always_off" ) == 0 ) {
120- memcpy ( buf . ptr , ZEND_STRS ( "0" )) ;
122+ if (strcmp (buf -> ptr , "always_off" ) == 0 || strcmp (buf -> ptr , "parentbased_always_off" ) == 0 ) {
123+ buf -> ptr = "0" ; buf -> len = 1 ;
121124 return true;
122125 }
123- if (strcmp (buf . ptr , "traceidratio" ) == 0 || strcmp (buf . ptr , "parentbased_traceidratio" ) == 0 ) {
126+ if (strcmp (buf -> ptr , "traceidratio" ) == 0 || strcmp (buf -> ptr , "parentbased_traceidratio" ) == 0 ) {
124127 if (get_otel_value ((zai_str )ZAI_STRL ("OTEL_TRACES_SAMPLER_ARG" ), buf , pre_rinit )) {
125128 return true;
126129 }
127- LOG_ONCE (WARN , "OTEL_TRACES_SAMPLER is %s, but is missing OTEL_TRACES_SAMPLER_ARG" , buf . ptr );
130+ LOG_ONCE (WARN , "OTEL_TRACES_SAMPLER is %s, but is missing OTEL_TRACES_SAMPLER_ARG" , buf -> ptr );
128131 } else {
129- LOG_ONCE (WARN , "OTEL_TRACES_SAMPLER has invalid value: %s" , buf . ptr );
132+ LOG_ONCE (WARN , "OTEL_TRACES_SAMPLER has invalid value: %s" , buf -> ptr );
130133 }
131134 report_otel_cfg_telemetry_invalid ("otel_traces_sampler" , "dd_trace_sample_rate" , pre_rinit );
132135 return false;
133136}
134137
135- bool ddtrace_conf_otel_traces_exporter (zai_env_buffer buf , bool pre_rinit ) {
138+ bool ddtrace_conf_otel_traces_exporter (zai_env_buffer * buf , bool pre_rinit ) {
136139 if (get_otel_value ((zai_str )ZAI_STRL ("OTEL_TRACES_EXPORTER" ), buf , pre_rinit )) {
137- if (strcmp (buf . ptr , "none" ) == 0 ) {
138- memcpy ( buf . ptr , ZEND_STRS ( "0" )) ;
140+ if (strcmp (buf -> ptr , "none" ) == 0 ) {
141+ buf -> ptr = "0" ; buf -> len = 1 ;
139142 return true;
140143 }
141- LOG_ONCE (WARN , "OTEL_TRACES_EXPORTER has invalid value: %s" , buf . ptr );
144+ LOG_ONCE (WARN , "OTEL_TRACES_EXPORTER has invalid value: %s" , buf -> ptr );
142145 report_otel_cfg_telemetry_invalid ("otel_traces_exporter" , "dd_trace_enabled" , pre_rinit );
143146 }
144147 return false;
145148}
146149
147- bool ddtrace_conf_otel_metrics_exporter (zai_env_buffer buf , bool pre_rinit ) {
150+ bool ddtrace_conf_otel_metrics_exporter (zai_env_buffer * buf , bool pre_rinit ) {
148151 if (get_otel_value ((zai_str )ZAI_STRL ("OTEL_METRICS_EXPORTER" ), buf , pre_rinit )) {
149- if (strcmp (buf . ptr , "none" ) == 0 ) {
150- memcpy ( buf . ptr , ZEND_STRS ( "0" )) ;
152+ if (strcmp (buf -> ptr , "none" ) == 0 ) {
153+ buf -> ptr = "0" ; buf -> len = 1 ;
151154 return true;
152155 }
153- LOG_ONCE (WARN , "OTEL_METRICS_EXPORTER has invalid value: %s" , buf . ptr );
156+ LOG_ONCE (WARN , "OTEL_METRICS_EXPORTER has invalid value: %s" , buf -> ptr );
154157 report_otel_cfg_telemetry_invalid ("otel_metrics_exporter" , "dd_integration_metrics_enabled" , pre_rinit );
155158 }
156159 return false;
157160}
158161
159- bool ddtrace_conf_otel_resource_attributes_tags (zai_env_buffer buf , bool pre_rinit ) {
160- if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_RESOURCE_ATTRIBUTES" ), buf , pre_rinit )) {
162+ bool ddtrace_conf_otel_resource_attributes_tags (zai_env_buffer * buf , bool pre_rinit ) {
163+ ZAI_ENV_BUFFER_INIT (local , ZAI_ENV_MAX_BUFSIZ );
164+ if (!get_otel_value ((zai_str )ZAI_STRL ("OTEL_RESOURCE_ATTRIBUTES" ), & local , pre_rinit )) {
161165 return false;
162166 }
163167
164- char * out = buf . ptr ;
168+ char * out = buf -> ptr ;
165169 int tags = 0 ;
166- for (char * cur = buf .ptr , * key_start = cur ; * cur ; ++ cur ) {
170+ for (char * cur = local .ptr , * key_start = cur ; * cur ; ++ cur ) {
167171 if (* cur == '=' ) {
168172 char * key = key_start , * key_end = cur ++ ;
169173 while (* cur && * cur != ',' ) {
@@ -190,7 +194,7 @@ bool ddtrace_conf_otel_resource_attributes_tags(zai_env_buffer buf, bool pre_rin
190194 -- cur ;
191195 }
192196 }
193- if (out != buf . ptr ) {
197+ if (out != buf -> ptr ) {
194198 -- out ;
195199 }
196200 * out = 0 ;
0 commit comments