From 0d2e8c6ceefdb6b028cd2182725df56753ef6c30 Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Thu, 27 Aug 2026 17:27:16 -0400 Subject: [PATCH] fix: support stable OTel deployment environment --- ext/otel_config.c | 10 +++++++++- ...tel_config_deployment_environment_name.phpt | 18 ++++++++++++++++++ ...fig_deployment_environment_name_dd_env.phpt | 15 +++++++++++++++ ...onfig_deployment_environment_name_last.phpt | 14 ++++++++++++++ ...ployment_environment_name_legacy_first.phpt | 14 ++++++++++++++ ...ployment_environment_name_stable_first.phpt | 14 ++++++++++++++ 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 tests/ext/otel_config_deployment_environment_name.phpt create mode 100644 tests/ext/otel_config_deployment_environment_name_dd_env.phpt create mode 100644 tests/ext/otel_config_deployment_environment_name_last.phpt create mode 100644 tests/ext/otel_config_deployment_environment_name_legacy_first.phpt create mode 100644 tests/ext/otel_config_deployment_environment_name_stable_first.phpt diff --git a/ext/otel_config.c b/ext/otel_config.c index 1155d11666..cd05515e4b 100644 --- a/ext/otel_config.c +++ b/ext/otel_config.c @@ -93,7 +93,8 @@ static bool ddtrace_conf_otel_resource_attributes_special(const char *tag, int l } bool ddtrace_conf_otel_resource_attributes_env(zai_env_buffer *buf, bool pre_rinit) { - return ddtrace_conf_otel_resource_attributes_special(ZEND_STRL("deployment.environment"), buf, pre_rinit); + return ddtrace_conf_otel_resource_attributes_special(ZEND_STRL("deployment.environment.name"), buf, pre_rinit) + || ddtrace_conf_otel_resource_attributes_special(ZEND_STRL("deployment.environment"), buf, pre_rinit); } bool ddtrace_conf_otel_resource_attributes_version(zai_env_buffer *buf, bool pre_rinit) { @@ -124,13 +125,20 @@ bool ddtrace_conf_otel_resource_attributes_tags(zai_env_buffer *buf, bool pre_ri ++cur; } key_start = cur + 1; + if (key_end - key == strlen("deployment.environment.name") && memcmp(key, ZEND_STRL("deployment.environment.name")) == 0) { + --cur; + continue; + } if (key_end - key == strlen("deployment.environment") && memcmp(key, ZEND_STRL("deployment.environment")) == 0) { + --cur; continue; } if (key_end - key == strlen("service.name") && memcmp(key, ZEND_STRL("service.name")) == 0) { + --cur; continue; } if (key_end - key == strlen("service.version") && memcmp(key, ZEND_STRL("service.version")) == 0) { + --cur; continue; } memmove(out, key, cur - key); diff --git a/tests/ext/otel_config_deployment_environment_name.phpt b/tests/ext/otel_config_deployment_environment_name.phpt new file mode 100644 index 0000000000..188a3523fb --- /dev/null +++ b/tests/ext/otel_config_deployment_environment_name.phpt @@ -0,0 +1,18 @@ +--TEST-- +Test stable OpenTelemetry deployment environment config remapping +--ENV-- +OTEL_RESOURCE_ATTRIBUTES=foo=bar,deployment.environment.name=stable,service.name=service,xyz=abc,service.version=1.2.3,baz=qux +--FILE-- + +--EXPECT-- +string(6) "stable" +string(7) "service" +string(5) "1.2.3" +string(23) "foo:bar,xyz:abc,baz:qux" diff --git a/tests/ext/otel_config_deployment_environment_name_dd_env.phpt b/tests/ext/otel_config_deployment_environment_name_dd_env.phpt new file mode 100644 index 0000000000..4311bb1023 --- /dev/null +++ b/tests/ext/otel_config_deployment_environment_name_dd_env.phpt @@ -0,0 +1,15 @@ +--TEST-- +Test DD_ENV takes precedence over OpenTelemetry deployment environment attributes +--ENV-- +DD_ENV=datadog +OTEL_RESOURCE_ATTRIBUTES=foo=bar,deployment.environment=legacy,deployment.environment.name=stable,baz=qux +--FILE-- + +--EXPECT-- +string(7) "datadog" +string(15) "foo:bar,baz:qux" diff --git a/tests/ext/otel_config_deployment_environment_name_last.phpt b/tests/ext/otel_config_deployment_environment_name_last.phpt new file mode 100644 index 0000000000..e22843055e --- /dev/null +++ b/tests/ext/otel_config_deployment_environment_name_last.phpt @@ -0,0 +1,14 @@ +--TEST-- +Test stable OpenTelemetry deployment environment as the final resource attribute +--ENV-- +OTEL_RESOURCE_ATTRIBUTES=foo=bar,deployment.environment.name=stable +--FILE-- + +--EXPECT-- +string(6) "stable" +string(7) "foo:bar" diff --git a/tests/ext/otel_config_deployment_environment_name_legacy_first.phpt b/tests/ext/otel_config_deployment_environment_name_legacy_first.phpt new file mode 100644 index 0000000000..77b488db1a --- /dev/null +++ b/tests/ext/otel_config_deployment_environment_name_legacy_first.phpt @@ -0,0 +1,14 @@ +--TEST-- +Test stable OpenTelemetry deployment environment takes precedence when listed after legacy +--ENV-- +OTEL_RESOURCE_ATTRIBUTES=foo=bar,deployment.environment=legacy,deployment.environment.name=stable,xyz=abc +--FILE-- + +--EXPECT-- +string(6) "stable" +string(15) "foo:bar,xyz:abc" diff --git a/tests/ext/otel_config_deployment_environment_name_stable_first.phpt b/tests/ext/otel_config_deployment_environment_name_stable_first.phpt new file mode 100644 index 0000000000..f4dd7f6d58 --- /dev/null +++ b/tests/ext/otel_config_deployment_environment_name_stable_first.phpt @@ -0,0 +1,14 @@ +--TEST-- +Test stable OpenTelemetry deployment environment takes precedence when listed first +--ENV-- +OTEL_RESOURCE_ATTRIBUTES=foo=bar,deployment.environment.name=stable,deployment.environment=legacy,xyz=abc +--FILE-- + +--EXPECT-- +string(6) "stable" +string(15) "foo:bar,xyz:abc"