|
86 | 86 | import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_BODY_ENABLED; |
87 | 87 | import static datadog.trace.api.ConfigDefaults.DEFAULT_ELASTICSEARCH_PARAMS_ENABLED; |
88 | 88 | import static datadog.trace.api.ConfigDefaults.DEFAULT_EXPERIMENTATAL_JEE_SPLIT_BY_DEPLOYMENT; |
| 89 | +import static datadog.trace.api.ConfigDefaults.DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE; |
| 90 | +import static datadog.trace.api.ConfigDefaults.DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_POLL_INTERVAL_SECONDS; |
| 91 | +import static datadog.trace.api.ConfigDefaults.DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_REQUEST_TIMEOUT_SECONDS; |
89 | 92 | import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_CLIENT_ERROR_STATUSES; |
90 | 93 | import static datadog.trace.api.ConfigDefaults.DEFAULT_GRPC_SERVER_ERROR_STATUSES; |
91 | 94 | import static datadog.trace.api.ConfigDefaults.DEFAULT_HEALTH_METRICS_ENABLED; |
|
361 | 364 | import static datadog.trace.api.config.DebuggerConfig.THIRD_PARTY_EXCLUDES; |
362 | 365 | import static datadog.trace.api.config.DebuggerConfig.THIRD_PARTY_INCLUDES; |
363 | 366 | import static datadog.trace.api.config.DebuggerConfig.THIRD_PARTY_SHADING_IDENTIFIERS; |
| 367 | +import static datadog.trace.api.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE; |
| 368 | +import static datadog.trace.api.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_BASE_URL; |
| 369 | +import static datadog.trace.api.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS; |
| 370 | +import static datadog.trace.api.config.FeatureFlaggingConfig.FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_REQUEST_TIMEOUT_SECONDS; |
364 | 371 | import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_LEVEL; |
365 | 372 | import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_QUEUE_SIZE; |
366 | 373 | import static datadog.trace.api.config.GeneralConfig.AGENTLESS_LOG_SUBMISSION_URL; |
@@ -1213,6 +1220,11 @@ public static String getHostName() { |
1213 | 1220 |
|
1214 | 1221 | private final int remoteConfigMaxExtraServices; |
1215 | 1222 |
|
| 1223 | + private final String featureFlaggingConfigurationSource; |
| 1224 | + private final String featureFlaggingConfigurationSourceAgentlessBaseUrl; |
| 1225 | + private final int featureFlaggingConfigurationSourcePollIntervalSeconds; |
| 1226 | + private final int featureFlaggingConfigurationSourceRequestTimeoutSeconds; |
| 1227 | + |
1216 | 1228 | private final boolean dbmInjectSqlBaseHash; |
1217 | 1229 | private final String dbmPropagationMode; |
1218 | 1230 | private final boolean dbmTracePreparedStatements; |
@@ -2837,6 +2849,40 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) |
2837 | 2849 | configProvider.getInteger( |
2838 | 2850 | REMOTE_CONFIG_MAX_EXTRA_SERVICES, DEFAULT_REMOTE_CONFIG_MAX_EXTRA_SERVICES); |
2839 | 2851 |
|
| 2852 | + featureFlaggingConfigurationSource = |
| 2853 | + normalizeFeatureFlaggingConfigurationSource( |
| 2854 | + configProvider.getString( |
| 2855 | + FEATURE_FLAGS_CONFIGURATION_SOURCE, DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE)); |
| 2856 | + featureFlaggingConfigurationSourceAgentlessBaseUrl = |
| 2857 | + configProvider.getStringNotEmpty( |
| 2858 | + FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_BASE_URL, null); |
| 2859 | + int configuredFeatureFlaggingPollIntervalSeconds = |
| 2860 | + configProvider.getInteger( |
| 2861 | + FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_POLL_INTERVAL_SECONDS, |
| 2862 | + DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_POLL_INTERVAL_SECONDS); |
| 2863 | + if (configuredFeatureFlaggingPollIntervalSeconds <= 0) { |
| 2864 | + log.warn( |
| 2865 | + "Invalid Feature Flagging agentless poll interval: {}. The value must be positive", |
| 2866 | + configuredFeatureFlaggingPollIntervalSeconds); |
| 2867 | + configuredFeatureFlaggingPollIntervalSeconds = |
| 2868 | + DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_POLL_INTERVAL_SECONDS; |
| 2869 | + } |
| 2870 | + featureFlaggingConfigurationSourcePollIntervalSeconds = |
| 2871 | + configuredFeatureFlaggingPollIntervalSeconds; |
| 2872 | + int configuredFeatureFlaggingRequestTimeoutSeconds = |
| 2873 | + configProvider.getInteger( |
| 2874 | + FEATURE_FLAGS_CONFIGURATION_SOURCE_AGENTLESS_REQUEST_TIMEOUT_SECONDS, |
| 2875 | + DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_REQUEST_TIMEOUT_SECONDS); |
| 2876 | + if (configuredFeatureFlaggingRequestTimeoutSeconds <= 0) { |
| 2877 | + log.warn( |
| 2878 | + "Invalid Feature Flagging agentless request timeout: {}. The value must be positive", |
| 2879 | + configuredFeatureFlaggingRequestTimeoutSeconds); |
| 2880 | + configuredFeatureFlaggingRequestTimeoutSeconds = |
| 2881 | + DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE_REQUEST_TIMEOUT_SECONDS; |
| 2882 | + } |
| 2883 | + featureFlaggingConfigurationSourceRequestTimeoutSeconds = |
| 2884 | + configuredFeatureFlaggingRequestTimeoutSeconds; |
| 2885 | + |
2840 | 2886 | dynamicInstrumentationEnabled = |
2841 | 2887 | configProvider.getBoolean( |
2842 | 2888 | DYNAMIC_INSTRUMENTATION_ENABLED, DEFAULT_DYNAMIC_INSTRUMENTATION_ENABLED); |
@@ -3749,6 +3795,14 @@ public boolean isInferredProxyPropagationEnabled() { |
3749 | 3795 | return traceInferredProxyEnabled; |
3750 | 3796 | } |
3751 | 3797 |
|
| 3798 | + private static String normalizeFeatureFlaggingConfigurationSource(final String source) { |
| 3799 | + if (source == null) { |
| 3800 | + return DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE; |
| 3801 | + } |
| 3802 | + final String normalized = source.trim().toLowerCase(Locale.ROOT); |
| 3803 | + return normalized.isEmpty() ? DEFAULT_FEATURE_FLAGGING_CONFIGURATION_SOURCE : normalized; |
| 3804 | + } |
| 3805 | + |
3752 | 3806 | public boolean isBaggageExtract() { |
3753 | 3807 | return tracePropagationStylesToExtract.contains(TracePropagationStyle.BAGGAGE); |
3754 | 3808 | } |
@@ -4656,6 +4710,22 @@ public int getRemoteConfigMaxExtraServices() { |
4656 | 4710 | return remoteConfigMaxExtraServices; |
4657 | 4711 | } |
4658 | 4712 |
|
| 4713 | + public String getFeatureFlaggingConfigurationSource() { |
| 4714 | + return featureFlaggingConfigurationSource; |
| 4715 | + } |
| 4716 | + |
| 4717 | + public String getFeatureFlaggingConfigurationSourceAgentlessBaseUrl() { |
| 4718 | + return featureFlaggingConfigurationSourceAgentlessBaseUrl; |
| 4719 | + } |
| 4720 | + |
| 4721 | + public int getFeatureFlaggingConfigurationSourcePollIntervalSeconds() { |
| 4722 | + return featureFlaggingConfigurationSourcePollIntervalSeconds; |
| 4723 | + } |
| 4724 | + |
| 4725 | + public int getFeatureFlaggingConfigurationSourceRequestTimeoutSeconds() { |
| 4726 | + return featureFlaggingConfigurationSourceRequestTimeoutSeconds; |
| 4727 | + } |
| 4728 | + |
4659 | 4729 | public boolean isDynamicInstrumentationEnabled() { |
4660 | 4730 | return dynamicInstrumentationEnabled; |
4661 | 4731 | } |
@@ -6488,6 +6558,14 @@ public String toString() { |
6488 | 6558 | + remoteConfigMaxPayloadSize |
6489 | 6559 | + ", remoteConfigIntegrityCheckEnabled=" |
6490 | 6560 | + remoteConfigIntegrityCheckEnabled |
| 6561 | + + ", featureFlaggingConfigurationSource=" |
| 6562 | + + featureFlaggingConfigurationSource |
| 6563 | + + ", featureFlaggingConfigurationSourceAgentlessBaseUrl=" |
| 6564 | + + featureFlaggingConfigurationSourceAgentlessBaseUrl |
| 6565 | + + ", featureFlaggingConfigurationSourcePollIntervalSeconds=" |
| 6566 | + + featureFlaggingConfigurationSourcePollIntervalSeconds |
| 6567 | + + ", featureFlaggingConfigurationSourceRequestTimeoutSeconds=" |
| 6568 | + + featureFlaggingConfigurationSourceRequestTimeoutSeconds |
6491 | 6569 | + ", debuggerEnabled=" |
6492 | 6570 | + dynamicInstrumentationEnabled |
6493 | 6571 | + ", debuggerUploadTimeout=" |
|
0 commit comments