Skip to content

Commit a3409cd

Browse files
BridgeARgenesorbwoebi
authored
chore: add supported-configurations v2 (#3621)
This adds the supported-configurations.json to php. That file is auto generated from configuration.h. As long as they are in sync, things will work easily. The validation step verifies in the CI if the file got updated or not and would fail, if a change was added without committing. The one pipeline CI checks are added as well to make sure new configurations are added to the central repository before the PR that adds the config lands. --------- Signed-off-by: Bob Weinand <[email protected]> Co-authored-by: Benjamin De Bernardi <[email protected]> Co-authored-by: Bob Weinand <[email protected]>
1 parent b29a3e6 commit a3409cd

11 files changed

Lines changed: 3083 additions & 72 deletions

.gitlab-ci.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
stages:
22
- build
33
- tests
4+
- shared-pipeline
45
- deploy
56
- ci-build
67

@@ -17,6 +18,7 @@ include:
1718
- project: DataDog/apm-reliability/libdatadog-build
1819
ref: 5826819695d93286569e70ed087ae6bf906ce2c3
1920
file: templates/ci_authenticated_job.yml
21+
- local: .gitlab/one-pipeline.locked.yml
2022
- local: .gitlab/ci-images.yml
2123

2224
generate-templates:
@@ -95,3 +97,18 @@ package-trigger:
9597
GIT_SUBMODULE_PATHS: libdatadog appsec/third_party/cpp-base64 appsec/third_party/libddwaf appsec/third_party/msgpack-c
9698
NIGHTLY_BUILD: $NIGHTLY_BUILD
9799
RELIABILITY_ENV_BRANCH: $RELIABILITY_ENV_BRANCH
100+
101+
validate_supported_configurations_v2_local_file:
102+
needs: []
103+
extends: .validate_supported_configurations_v2_local_file
104+
variables:
105+
LOCAL_JSON_PATH: "metadata/supported-configurations.json"
106+
BACKFILLED: "true"
107+
108+
update_central_configurations_version_range_v2:
109+
extends: .update_central_configurations_version_range_v2
110+
variables:
111+
LOCAL_REPO_NAME: "dd-trace-php"
112+
LOCAL_JSON_PATH: "metadata/supported-configurations.json"
113+
LANGUAGE_NAME: "php"
114+
MULTIPLE_RELEASE_LINES: "false"

.gitlab/generate-shared.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,34 @@
116116
- artifacts
117117
when: "always"
118118

119+
"Configuration Consistency":
120+
tags: [ "arch:amd64" ]
121+
stage: test
122+
needs: []
123+
variables:
124+
PHP_MAJOR_MINOR: "<?= $all_minor_major_targets[count($all_minor_major_targets) - 1] ?>"
125+
image: "registry.ddbuild.io/images/mirror/datadog/dd-trace-ci:php-${PHP_MAJOR_MINOR}_bookworm-6"
126+
script:
127+
- |
128+
if ! command -v cc >/dev/null 2>&1 && ! command -v clang >/dev/null 2>&1 && ! command -v gcc >/dev/null 2>&1; then
129+
sudo apt-get update
130+
sudo apt-get install -y build-essential
131+
fi
132+
- |
133+
GENERATED_CONFIG_INPUTS="$(bash tooling/generate-supported-configurations.sh --print-input-files | tr '\n' ' ')"
134+
BASELINE_CONFIG="$(mktemp)"
135+
trap 'rm -f "$BASELINE_CONFIG"' EXIT
136+
cp metadata/supported-configurations.json "$BASELINE_CONFIG"
137+
138+
bash tooling/generate-supported-configurations.sh
139+
140+
if ! cmp -s "$BASELINE_CONFIG" metadata/supported-configurations.json; then
141+
echo "ERROR: @metadata/supported-configurations.json got out of sync with implemented configurations. Please run tooling/generate-supported-configurations.sh locally."
142+
echo "Generator inputs: $GENERATED_CONFIG_INPUTS"
143+
diff -u "$BASELINE_CONFIG" metadata/supported-configurations.json || true
144+
exit 1
145+
fi
146+
119147
<?php
120148
foreach ($all_minor_major_targets as $major_minor):
121149
foreach ($switch_php_versions as $switch_php_version):

.gitlab/one-pipeline.locked.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# DO NOT EDIT THIS FILE MANUALLY
22
# This file is auto-generated by automation.
33
include:
4-
- remote: https://gitlab-templates.ddbuild.io/libdatadog/one-pipeline/ca/d0b85ce8f091ecfcf164b92dbb8a24affee699ef5dac9414f72765ce77df24c0/one-pipeline.yml
4+
- remote: https://gitlab-templates.ddbuild.io/libdatadog/one-pipeline/ca/fbfa24e9dd887ed24ce65e71f2e41562c809f40cfc26489705b32406de7e096f/one-pipeline.yml

appsec/src/extension/configuration.c

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -91,48 +91,6 @@ static bool _parse_uint64(
9191
return _parse_uint(value, decoded_value, LONG_MAX);
9292
}
9393

94-
static bool _parse_list(
95-
zai_str value, zval *nonnull decoded_value, bool persistent)
96-
{
97-
zval tmp;
98-
ZVAL_ARR(&tmp, pemalloc(sizeof(HashTable), persistent)); // NOLINT
99-
zend_hash_init(Z_ARRVAL(tmp), 8, NULL,
100-
persistent ? ZVAL_INTERNAL_PTR_DTOR : ZVAL_PTR_DTOR, persistent);
101-
102-
char *data = (char *)value.ptr;
103-
if (data && *data) { // non-empty
104-
const char *val_start;
105-
const char *val_end;
106-
do {
107-
if (*data != ',' && *data != ' ' && *data != '\t' &&
108-
*data != '\n') {
109-
val_start = val_end = data;
110-
while (*++data && *data != ',') {
111-
if (*data != ' ' && *data != '\t' && *data != '\n') {
112-
val_end = data;
113-
}
114-
}
115-
size_t val_len = val_end - val_start + 1;
116-
zval val;
117-
ZVAL_NEW_STR(
118-
&val, zend_string_init(val_start, val_len, persistent));
119-
zend_hash_next_index_insert_new(Z_ARRVAL(tmp), &val);
120-
} else {
121-
++data;
122-
}
123-
} while (*data);
124-
125-
if (zend_hash_num_elements(Z_ARRVAL(tmp)) == 0) {
126-
zend_hash_destroy(Z_ARRVAL(tmp));
127-
pefree(Z_ARRVAL(tmp), persistent);
128-
return false;
129-
}
130-
}
131-
132-
ZVAL_COPY_VALUE(decoded_value, &tmp);
133-
return true;
134-
}
135-
13694
#define CUSTOM(...) CUSTOM
13795
// NOLINTNEXTLINE(bugprone-macro-parentheses)
13896
#define CALIAS_EXPAND(name) {.ptr = name, .len = sizeof(name) - 1},

appsec/src/extension/configuration.h

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ extern bool runtime_config_first_init;
2626
#define DEFAULT_OBFUSCATOR_VALUE_REGEX \
2727
"(?i)(?:p(?:ass)?w(?:or)?d|pass(?:[_-]?phrase)?|secret(?:[_-]?key)?|(?:(?:api|private|public|access)[_-]?)key(?:[_-]?id)?|(?:(?:auth|access|id|refresh)[_-]?)?token|consumer[_-]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|jsessionid|phpsessid|asp\\.net(?:[_-]|-)sessionid|sid|jwt)(?:\\s*=([^;&]+)|\"\\s*:\\s*(\"[^\"]+\"|\\d+))|bearer\\s+([a-z0-9\\._\\-]+)|token\\s*:\\s*([a-z0-9]{13})|gh[opsu]_([0-9a-zA-Z]{36})|ey[I-L][\\w=-]+\\.(ey[I-L][\\w=-]+(?:\\.[\\w.+\\/=-]+)?)|[\\-]{5}BEGIN[a-z\\s]+PRIVATE\\sKEY[\\-]{5}([^\\-]+)[\\-]{5}END[a-z\\s]+PRIVATE\\sKEY|ssh-rsa\\s*([a-z0-9\\/\\.+]{100,})"
2828

29-
#define DD_BASE(path) "/opt/datadog-php/"
29+
#define DD_BASE(path) "/opt/datadog-php/" path
3030

3131
// clang-format off
3232
#define DD_CONFIGURATION_GENERAL \
33-
CONFIG(BOOL, DD_APPSEC_ENABLED, "false", .ini_change = zai_config_system_ini_change) \
33+
CONFIG(BOOL, DD_APPSEC_ENABLED, "false", .ini_change = zai_config_system_ini_change) \
3434
SYSCFG(BOOL, DD_APPSEC_CLI_START_ON_RINIT, "false") \
3535
SYSCFG(STRING, DD_APPSEC_RULES, "") \
3636
SYSCFG(CUSTOM(uint64_t), DD_APPSEC_WAF_TIMEOUT, "10000", .parser = _parse_uint64) \
@@ -44,33 +44,30 @@ extern bool runtime_config_first_init;
4444
SYSCFG(BOOL, DD_APPSEC_TESTING_HELPER_METRICS, "false") \
4545
CONFIG(CUSTOM(INT), DD_APPSEC_LOG_LEVEL, "warn", .parser = dd_parse_log_level) \
4646
SYSCFG(STRING, DD_APPSEC_LOG_FILE, "php_error_reporting") \
47-
SYSCFG(BOOL, DD_APPSEC_HELPER_LAUNCH, "true") \
4847
CONFIG(STRING, DD_APPSEC_HELPER_PATH, DD_BASE("bin/libddappsec-helper.so")) \
4948
SYSCFG(BOOL, DD_APPSEC_STACK_TRACE_ENABLED, "true") \
5049
SYSCFG(BOOL, DD_APPSEC_RASP_ENABLED , "true") \
5150
SYSCFG(INT, DD_APPSEC_MAX_STACK_TRACE_DEPTH, "32") \
5251
SYSCFG(INT, DD_APPSEC_MAX_STACK_TRACES, "2") \
5352
SYSCFG(STRING, DD_APPSEC_HELPER_LOG_FILE, "/dev/null") \
5453
SYSCFG(STRING, DD_APPSEC_HELPER_LOG_LEVEL, "info") \
55-
CONFIG(CUSTOM(SET), DD_EXTRA_SERVICES, "", .parser = _parse_list) \
5654
CONFIG(STRING, DD_SERVICE, "") \
5755
CONFIG(STRING, DD_ENV, "") \
5856
CONFIG(STRING, DD_VERSION, "") \
5957
CONFIG(BOOL, DD_REMOTE_CONFIG_ENABLED, "true") \
60-
CONFIG(CUSTOM(uint32_t), DD_REMOTE_CONFIG_POLL_INTERVAL, "1000", .parser = _parse_uint32) \
61-
CONFIG(STRING, DD_AGENT_HOST, "") \
58+
CONFIG(STRING, DD_AGENT_HOST, "localhost") \
6259
CONFIG(INT, DD_TRACE_AGENT_PORT, "0") \
6360
CONFIG(INT, DD_APPSEC_MAX_BODY_BUFF_SIZE, "524288") \
6461
CONFIG(STRING, DD_TRACE_AGENT_URL, "") \
6562
CONFIG(BOOL, DD_TRACE_ENABLED, "true") \
66-
CALIAS(CUSTOM(STRING), DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE, "ident", \
67-
CALIASES("DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING"), .parser = dd_parse_user_collection_mode) \
63+
CALIAS(CUSTOM(STRING), DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE, "ident", \
64+
CALIASES("DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING"), .parser = dd_parse_user_collection_mode) \
6865
CONFIG(BOOL, DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED, "true") \
6966
CONFIG(STRING, DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML, "") \
7067
CONFIG(STRING, DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON, "") \
7168
CONFIG(BOOL, DD_APM_TRACING_ENABLED, "true") \
7269
CONFIG(BOOL, DD_API_SECURITY_ENABLED, "true", .ini_change = zai_config_system_ini_change) \
73-
CONFIG(DOUBLE, DD_API_SECURITY_SAMPLE_DELAY, "30.0", .ini_change = zai_config_system_ini_change)
70+
CONFIG(DOUBLE, DD_API_SECURITY_SAMPLE_DELAY, "30", .ini_change = zai_config_system_ini_change)
7471

7572
#ifdef __linux__
7673
#define DD_CONFIGURATION \

ext/auto_flush.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ char *ddtrace_agent_url(void) {
141141
return zend_strndup(ZSTR_VAL(hostname), ZSTR_LEN(hostname));
142142
}
143143

144-
if (ZSTR_LEN(hostname) > 0) {
144+
if (ZSTR_LEN(hostname) > 0 && zai_config_memoized_entries[DDTRACE_CONFIG_DD_AGENT_HOST].name_index != ZAI_CONFIG_ORIGIN_DEFAULT) {
145145
bool isIPv6 = memchr(ZSTR_VAL(hostname), ':', ZSTR_LEN(hostname));
146146

147147
int64_t port = get_global_DD_TRACE_AGENT_PORT();

ext/configuration.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ enum ddtrace_sampling_rules_format {
5151
#define DD_TRACE_AGENT_FLUSH_INTERVAL_VAL 1001
5252

5353
#define DD_INTEGRATION_ANALYTICS_ENABLED_DEFAULT false
54-
#define DD_INTEGRATION_ANALYTICS_SAMPLE_RATE_DEFAULT 1
54+
#define DD_INTEGRATION_ANALYTICS_SAMPLE_RATE_DEFAULT 1.0
5555

5656
#if PHP_VERSION_ID >= 80300 || defined(_WIN32)
5757
#define DD_SIDECAR_TRACE_SENDER_DEFAULT true
@@ -100,12 +100,12 @@ enum ddtrace_sampling_rules_format {
100100
CONFIG(STRING, DD_TRACE_SOURCES_PATH, DD_DEFAULT_SOURCES_PATH, .ini_change = zai_config_system_ini_change) \
101101
CONFIG(BOOL, DD_AUTOLOAD_NO_COMPILE, "false", .ini_change = zai_config_system_ini_change) \
102102
CONFIG(STRING, DD_TRACE_AGENT_URL, "", .ini_change = zai_config_system_ini_change) \
103-
CONFIG(STRING, DD_AGENT_HOST, "", .ini_change = zai_config_system_ini_change) \
104-
CONFIG(STRING, DD_DOGSTATSD_URL, "") \
105-
CONFIG(STRING, DD_DOGSTATSD_HOST, "") \
103+
CONFIG(STRING, DD_AGENT_HOST, "localhost", .ini_change = zai_config_system_ini_change) \
104+
CONFIG(STRING, DD_DOGSTATSD_URL, "http://localhost:8125") \
105+
CONFIG(STRING, DD_DOGSTATSD_HOST, "localhost") \
106106
CONFIG(STRING, DD_API_KEY, "", .ini_change = zai_config_system_ini_change) \
107107
CONFIG(BOOL, DD_DISTRIBUTED_TRACING, "true") \
108-
CONFIG(STRING, DD_DOGSTATSD_PORT, "8125") \
108+
CONFIG(INT, DD_DOGSTATSD_PORT, "8125") \
109109
CONFIG(STRING, DD_ENV, "", .ini_change = ddtrace_alter_dd_env, \
110110
.env_config_fallback = ddtrace_conf_otel_resource_attributes_env) \
111111
CONFIG(BOOL, DD_AUTOFINISH_SPANS, "false") \
@@ -114,10 +114,10 @@ enum ddtrace_sampling_rules_format {
114114
CONFIG(STRING, DD_SERVICE, "", .ini_change = ddtrace_alter_dd_service, \
115115
.env_config_fallback = ddtrace_conf_otel_service_name) \
116116
CONFIG(MAP, DD_SERVICE_MAPPING, "") \
117-
CONFIG(CUSTOM(MAP), DD_TAGS, "", \
117+
CONFIG(CUSTOM(MAP), DD_TAGS, "", \
118118
.env_config_fallback = ddtrace_conf_otel_resource_attributes_tags, \
119-
.parser = dd_parse_tags) \
120-
CONFIG(INT, DD_TRACE_AGENT_PORT, "0", .ini_change = zai_config_system_ini_change) \
119+
.parser = dd_parse_tags) \
120+
CONFIG(INT, DD_TRACE_AGENT_PORT, "8126", .ini_change = zai_config_system_ini_change) \
121121
CONFIG(BOOL, DD_TRACE_ANALYTICS_ENABLED, "false") \
122122
CONFIG(BOOL, DD_TRACE_APPEND_TRACE_IDS_TO_LOGS, "false") \
123123
CONFIG(BOOL, DD_TRACE_AUTO_FLUSH_ENABLED, "false") /* true in CLI */ \
@@ -177,7 +177,7 @@ enum ddtrace_sampling_rules_format {
177177
CONFIG(SET_LOWERCASE, DD_TRACE_PROPAGATION_STYLE_INJECT, "datadog,tracecontext,baggage") \
178178
CONFIG(SET_LOWERCASE, DD_TRACE_PROPAGATION_STYLE, "datadog,tracecontext,baggage", \
179179
.env_config_fallback = ddtrace_conf_otel_propagators) \
180-
CONFIG(SET, DD_TRACE_BAGGAGE_TAG_KEYS, "user.id,session.id,account.id") \
180+
CONFIG(SET, DD_TRACE_BAGGAGE_TAG_KEYS, "user.id, session.id, account.id") \
181181
CONFIG(BOOL, DD_TRACE_IGNORE_AGENT_SAMPLING_RATES, "false", .ini_change = zai_config_system_ini_change) \
182182
CONFIG(SET, DD_TRACE_TRACED_INTERNAL_FUNCTIONS, "") \
183183
CONFIG(INT, DD_TRACE_AGENT_TIMEOUT, DD_CFG_EXPSTR(DD_TRACE_AGENT_TIMEOUT_VAL), \
@@ -190,7 +190,7 @@ enum ddtrace_sampling_rules_format {
190190
CONFIG(BOOL, DD_TRACE_GENERATE_ROOT_SPAN, "true", .ini_change = ddtrace_span_alter_root_span_config) \
191191
CONFIG(INT, DD_TRACE_SPANS_LIMIT, "1000") \
192192
CONFIG(BOOL, DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED, "true") \
193-
CONFIG(BOOL, DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED, "true") \
193+
CONFIG(BOOL, DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED, "true") \
194194
CONFIG(INT, DD_TRACE_BGS_CONNECT_TIMEOUT, DD_CFG_EXPSTR(DD_TRACE_BGS_CONNECT_TIMEOUT_VAL), \
195195
.ini_change = zai_config_system_ini_change) \
196196
CONFIG(INT, DD_TRACE_BGS_TIMEOUT, DD_CFG_EXPSTR(DD_TRACE_BGS_TIMEOUT_VAL), \
@@ -248,16 +248,16 @@ enum ddtrace_sampling_rules_format {
248248
CONFIG(BOOL, DD_TRACE_WEBSOCKET_MESSAGES_INHERIT_SAMPLING, "true") \
249249
CONFIG(BOOL, DD_TRACE_WEBSOCKET_MESSAGES_SEPARATE_TRACES, "true") \
250250
CONFIG(BOOL, DD_INJECT_FORCE, "false", .ini_change = zai_config_system_ini_change) \
251-
CONFIG(DOUBLE, DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS, "5", .ini_change = zai_config_system_ini_change) \
252-
CONFIG(BOOL, DD_REMOTE_CONFIG_ENABLED, "true", .ini_change = zai_config_system_ini_change) \
251+
CONFIG(DOUBLE, DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS, "5.0", .ini_change = zai_config_system_ini_change) \
252+
CONFIG(BOOL, DD_REMOTE_CONFIG_ENABLED, "true", .ini_change = zai_config_system_ini_change) \
253253
CONFIG(BOOL, DD_DYNAMIC_INSTRUMENTATION_ENABLED, "false", .ini_change = ddtrace_alter_dynamic_instrumentation_config) \
254254
CONFIG(SET, DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS, "", .ini_change = zai_config_system_ini_change) \
255255
CONFIG(BOOL, DD_APM_TRACING_ENABLED, "true") \
256256
CONFIG(SET, DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES, "", .ini_change = zai_config_system_ini_change) \
257257
CONFIG(INT, DD_TRACE_BAGGAGE_MAX_ITEMS, "64") \
258258
CONFIG(INT, DD_TRACE_BAGGAGE_MAX_BYTES, "8192") \
259259
CONFIG(BOOL, DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED, "false") \
260-
CONFIG(SET, DD_TRACE_HTTP_CLIENT_ERROR_STATUSES, "500-599", .ini_change = zai_config_system_ini_change) \
260+
CONFIG(SET, DD_TRACE_HTTP_CLIENT_ERROR_STATUSES, "400-499", .ini_change = zai_config_system_ini_change) \
261261
CONFIG(SET, DD_TRACE_HTTP_SERVER_ERROR_STATUSES, "500-599", .ini_change = zai_config_system_ini_change) \
262262
CONFIG(BOOL, DD_CODE_ORIGIN_FOR_SPANS_ENABLED, "true", .ini_change = ddtrace_alter_DD_CODE_ORIGIN_FOR_SPANS_ENABLED) \
263263
CONFIG(INT, DD_CODE_ORIGIN_MAX_USER_FRAMES, "8") \

0 commit comments

Comments
 (0)