datadog 2.20.0 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +73 -1
  3. data/README.md +0 -1
  4. data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
  5. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  6. data/ext/libdatadog_api/ddsketch.c +106 -0
  7. data/ext/libdatadog_api/init.c +3 -0
  8. data/ext/libdatadog_api/library_config.c +35 -27
  9. data/ext/libdatadog_api/process_discovery.c +24 -18
  10. data/ext/libdatadog_extconf_helpers.rb +1 -1
  11. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
  12. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
  13. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
  14. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
  15. data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
  16. data/lib/datadog/appsec/api_security/route_extractor.rb +6 -2
  17. data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
  18. data/lib/datadog/appsec/assets/waf_rules/recommended.json +359 -4
  19. data/lib/datadog/appsec/assets/waf_rules/strict.json +43 -2
  20. data/lib/datadog/appsec/autoload.rb +1 -1
  21. data/lib/datadog/appsec/compressed_json.rb +1 -1
  22. data/lib/datadog/appsec/configuration/settings.rb +9 -0
  23. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
  24. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +3 -2
  25. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +3 -1
  26. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +3 -1
  27. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +9 -4
  28. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -1
  29. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -2
  30. data/lib/datadog/appsec/contrib/rails/patcher.rb +30 -0
  31. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +3 -1
  32. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -4
  33. data/lib/datadog/appsec/event.rb +12 -14
  34. data/lib/datadog/appsec/metrics/collector.rb +19 -3
  35. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +2 -1
  36. data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -4
  37. data/lib/datadog/appsec/remote.rb +25 -13
  38. data/lib/datadog/appsec/security_engine/result.rb +28 -9
  39. data/lib/datadog/appsec/security_engine/runner.rb +17 -7
  40. data/lib/datadog/appsec/security_event.rb +5 -7
  41. data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -4
  42. data/lib/datadog/core/configuration/components.rb +22 -8
  43. data/lib/datadog/core/configuration/config_helper.rb +100 -0
  44. data/lib/datadog/core/configuration/deprecations.rb +36 -0
  45. data/lib/datadog/core/configuration/ext.rb +0 -1
  46. data/lib/datadog/core/configuration/option.rb +38 -43
  47. data/lib/datadog/core/configuration/option_definition.rb +0 -9
  48. data/lib/datadog/core/configuration/options.rb +1 -5
  49. data/lib/datadog/core/configuration/settings.rb +10 -6
  50. data/lib/datadog/core/configuration/stable_config.rb +10 -0
  51. data/lib/datadog/core/configuration/supported_configurations.rb +337 -0
  52. data/lib/datadog/core/configuration.rb +2 -2
  53. data/lib/datadog/core/ddsketch.rb +21 -0
  54. data/lib/datadog/core/deprecations.rb +2 -2
  55. data/lib/datadog/core/environment/ext.rb +0 -2
  56. data/lib/datadog/core/environment/git.rb +2 -2
  57. data/lib/datadog/core/environment/variable_helpers.rb +3 -3
  58. data/lib/datadog/core/environment/yjit.rb +2 -1
  59. data/lib/datadog/core/metrics/client.rb +2 -2
  60. data/lib/datadog/core/pin.rb +4 -8
  61. data/lib/datadog/core/process_discovery/tracer_memfd.rb +2 -4
  62. data/lib/datadog/core/process_discovery.rb +48 -23
  63. data/lib/datadog/core/remote/component.rb +4 -6
  64. data/lib/datadog/core/runtime/ext.rb +0 -1
  65. data/lib/datadog/core/telemetry/component.rb +11 -0
  66. data/lib/datadog/core/telemetry/emitter.rb +6 -6
  67. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
  68. data/lib/datadog/core/telemetry/event/app_started.rb +2 -2
  69. data/lib/datadog/core/telemetry/event.rb +1 -0
  70. data/lib/datadog/core/transport/response.rb +4 -1
  71. data/lib/datadog/core/utils/network.rb +19 -0
  72. data/lib/datadog/core.rb +2 -0
  73. data/lib/datadog/di/boot.rb +5 -3
  74. data/lib/datadog/di/component.rb +14 -0
  75. data/lib/datadog/di/context.rb +70 -0
  76. data/lib/datadog/di/el/compiler.rb +164 -0
  77. data/lib/datadog/di/el/evaluator.rb +159 -0
  78. data/lib/datadog/di/el/expression.rb +42 -0
  79. data/lib/datadog/di/el.rb +5 -0
  80. data/lib/datadog/di/error.rb +25 -0
  81. data/lib/datadog/di/instrumenter.rb +101 -32
  82. data/lib/datadog/di/probe.rb +35 -15
  83. data/lib/datadog/di/probe_builder.rb +39 -1
  84. data/lib/datadog/di/probe_file_loader.rb +1 -1
  85. data/lib/datadog/di/probe_manager.rb +3 -2
  86. data/lib/datadog/di/probe_notification_builder.rb +50 -51
  87. data/lib/datadog/di/serializer.rb +151 -7
  88. data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
  89. data/lib/datadog/profiling/collectors/info.rb +1 -1
  90. data/lib/datadog/profiling/ext.rb +2 -1
  91. data/lib/datadog/profiling/http_transport.rb +1 -1
  92. data/lib/datadog/profiling/tasks/exec.rb +2 -2
  93. data/lib/datadog/tracing/component.rb +6 -17
  94. data/lib/datadog/tracing/configuration/dynamic.rb +2 -2
  95. data/lib/datadog/tracing/configuration/ext.rb +0 -3
  96. data/lib/datadog/tracing/configuration/settings.rb +15 -10
  97. data/lib/datadog/tracing/contrib/component.rb +2 -2
  98. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
  99. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  100. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +63 -27
  101. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -0
  102. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
  103. data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
  104. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  105. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
  106. data/lib/datadog/tracing/metadata/ext.rb +8 -0
  107. data/lib/datadog/version.rb +1 -1
  108. metadata +25 -9
  109. data/ext/libdatadog_api/macos_development.md +0 -26
@@ -0,0 +1,337 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is auto-generated from `supported-configurations.json` by `rake local_config_map:generate`.
4
+ # Do not change manually! Please refer to `docs/AccessEnvironmentVariables.md` for more information.
5
+
6
+ module Datadog
7
+ module Core
8
+ module Configuration
9
+ SUPPORTED_CONFIGURATIONS =
10
+ {"DD_AGENT_HOST" => {version: ["A"]},
11
+ "DD_API_KEY" => {version: ["A"]},
12
+ "DD_API_SECURITY_ENABLED" => {version: ["A"]},
13
+ "DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED" => {version: ["A"]},
14
+ "DD_API_SECURITY_REQUEST_SAMPLE_RATE" => {version: ["A"]},
15
+ "DD_API_SECURITY_SAMPLE_DELAY" => {version: ["A"]},
16
+ "DD_APM_TRACING_ENABLED" => {version: ["A"]},
17
+ "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING" => {version: ["A"]},
18
+ "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE" => {version: ["A"]},
19
+ "DD_APPSEC_ENABLED" => {version: ["A"]},
20
+ "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML" => {version: ["A"]},
21
+ "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON" => {version: ["A"]},
22
+ "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_TEXT" => {version: ["A"]},
23
+ "DD_APPSEC_MAX_STACK_TRACES" => {version: ["A"]},
24
+ "DD_APPSEC_MAX_STACK_TRACE_DEPTH" => {version: ["A"]},
25
+ "DD_APPSEC_MAX_STACK_TRACE_DEPTH_TOP_PERCENT" => {version: ["A"]},
26
+ "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP" => {version: ["A"]},
27
+ "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP" => {version: ["A"]},
28
+ "DD_APPSEC_RASP_ENABLED" => {version: ["A"]},
29
+ "DD_APPSEC_RULES" => {version: ["A"]},
30
+ "DD_APPSEC_SCA_ENABLED" => {version: ["A"]},
31
+ "DD_APPSEC_STACK_TRACE_ENABLED" => {version: ["A"]},
32
+ "DD_APPSEC_TRACE_RATE_LIMIT" => {version: ["A"]},
33
+ "DD_APPSEC_WAF_DEBUG" => {version: ["A"]},
34
+ "DD_APPSEC_WAF_TIMEOUT" => {version: ["A"]},
35
+ "DD_CRASHTRACKING_ENABLED" => {version: ["A"]},
36
+ "DD_DBM_PROPAGATION_MODE" => {version: ["A"]},
37
+ "DD_DISABLE_DATADOG_RAILS" => {version: ["A"]},
38
+ "DD_DYNAMIC_INSTRUMENTATION_ENABLED" => {version: ["A"]},
39
+ "DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE" => {version: ["A"]},
40
+ "DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS" => {version: ["A"]},
41
+ "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES" => {version: ["A"]},
42
+ "DD_ENV" => {version: ["A"]},
43
+ "DD_ERROR_TRACKING_HANDLED_ERRORS" => {version: ["A"]},
44
+ "DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE" => {version: ["A"]},
45
+ "DD_GIT_COMMIT_SHA" => {version: ["A"]},
46
+ "DD_GIT_REPOSITORY_URL" => {version: ["A"]},
47
+ "DD_HEALTH_METRICS_ENABLED" => {version: ["A"]},
48
+ "DD_INJECTION_ENABLED" => {version: ["A"]},
49
+ "DD_INJECT_FORCE" => {version: ["A"]},
50
+ "DD_INSTRUMENTATION_INSTALL_ID" => {version: ["A"]},
51
+ "DD_INSTRUMENTATION_INSTALL_TIME" => {version: ["A"]},
52
+ "DD_INSTRUMENTATION_INSTALL_TYPE" => {version: ["A"]},
53
+ "DD_INSTRUMENTATION_TELEMETRY_ENABLED" => {version: ["A"]},
54
+ "DD_INTEGRATION_SERVICE" => {version: ["A"]},
55
+ "DD_LOGS_INJECTION" => {version: ["A"]},
56
+ "DD_METRIC_AGENT_PORT" => {version: ["A"]},
57
+ "DD_PROFILING_ALLOCATION_ENABLED" => {version: ["A"]},
58
+ "DD_PROFILING_DIR_INTERRUPTION_WORKAROUND_ENABLED" => {version: ["A"]},
59
+ "DD_PROFILING_ENABLED" => {version: ["A"]},
60
+ "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED" => {version: ["A"]},
61
+ "DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED" => {version: ["A"]},
62
+ "DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE" => {version: ["A"]},
63
+ "DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED" => {version: ["A"]},
64
+ "DD_PROFILING_GC_ENABLED" => {version: ["A"]},
65
+ "DD_PROFILING_GVL_ENABLED" => {version: ["A"]},
66
+ "DD_PROFILING_HEAP_CLEAN_AFTER_GC_ENABLED" => {version: ["A"]},
67
+ "DD_PROFILING_MAX_FRAMES" => {version: ["A"]},
68
+ "DD_PROFILING_NATIVE_FILENAMES_ENABLED" => {version: ["A"]},
69
+ "DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED" => {version: ["A"]},
70
+ "DD_PROFILING_OVERHEAD_TARGET_PERCENTAGE" => {version: ["A"]},
71
+ "DD_PROFILING_PREVIEW_OTEL_CONTEXT_ENABLED" => {version: ["A"]},
72
+ "DD_PROFILING_SIGHANDLER_SAMPLING_ENABLED" => {version: ["A"]},
73
+ "DD_PROFILING_SKIP_MYSQL2_CHECK" => {version: ["A"]},
74
+ "DD_PROFILING_TIMELINE_ENABLED" => {version: ["A"]},
75
+ "DD_PROFILING_UPLOAD_PERIOD" => {version: ["A"]},
76
+ "DD_PROFILING_UPLOAD_TIMEOUT" => {version: ["A"]},
77
+ "DD_REDIS_COMMAND_ARGS" => {version: ["A"]},
78
+ "DD_REMOTE_CONFIGURATION_ENABLED" => {version: ["A"]},
79
+ "DD_REMOTE_CONFIG_BOOT_TIMEOUT_SECONDS" => {version: ["A"]},
80
+ "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS" => {version: ["A"]},
81
+ "DD_RODA_ANALYTICS_ENABLED" => {version: ["A"]},
82
+ "DD_RODA_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
83
+ "DD_RUNTIME_METRICS_ENABLED" => {version: ["A"]},
84
+ "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED" => {version: ["A"]},
85
+ "DD_SERVICE" => {version: ["B"]},
86
+ "DD_SITE" => {version: ["A"]},
87
+ "DD_SPAN_SAMPLING_RULES" => {version: ["A"]},
88
+ "DD_SPAN_SAMPLING_RULES_FILE" => {version: ["A"]},
89
+ "DD_TAGS" => {version: ["B"]},
90
+ "DD_TELEMETRY_AGENTLESS_URL" => {version: ["A"]},
91
+ "DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED" => {version: ["A"]},
92
+ "DD_TELEMETRY_HEARTBEAT_INTERVAL" => {version: ["A"]},
93
+ "DD_TELEMETRY_LOG_COLLECTION_ENABLED" => {version: ["A"]},
94
+ "DD_TELEMETRY_METRICS_AGGREGATION_INTERVAL" => {version: ["A"]},
95
+ "DD_TELEMETRY_METRICS_ENABLED" => {version: ["A"]},
96
+ "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED" => {version: ["A"]},
97
+ "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED" => {version: ["A"]},
98
+ "DD_TRACE_ACTION_CABLE_ANALYTICS_ENABLED" => {version: ["A"]},
99
+ "DD_TRACE_ACTION_CABLE_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
100
+ "DD_TRACE_ACTION_CABLE_ENABLED" => {version: ["A"]},
101
+ "DD_TRACE_ACTION_MAILER_ANALYTICS_ENABLED" => {version: ["A"]},
102
+ "DD_TRACE_ACTION_MAILER_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
103
+ "DD_TRACE_ACTION_MAILER_ENABLED" => {version: ["A"]},
104
+ "DD_TRACE_ACTION_PACK_ANALYTICS_ENABLED" => {version: ["A"]},
105
+ "DD_TRACE_ACTION_PACK_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
106
+ "DD_TRACE_ACTION_PACK_ENABLED" => {version: ["A"]},
107
+ "DD_TRACE_ACTION_VIEW_ANALYTICS_ENABLED" => {version: ["A"]},
108
+ "DD_TRACE_ACTION_VIEW_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
109
+ "DD_TRACE_ACTION_VIEW_ENABLED" => {version: ["A"]},
110
+ "DD_TRACE_ACTIVE_JOB_ANALYTICS_ENABLED" => {version: ["A"]},
111
+ "DD_TRACE_ACTIVE_JOB_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
112
+ "DD_TRACE_ACTIVE_JOB_ENABLED" => {version: ["A"]},
113
+ "DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_ENABLED" => {version: ["A"]},
114
+ "DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
115
+ "DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ENABLED" => {version: ["A"]},
116
+ "DD_TRACE_ACTIVE_RECORD_ANALYTICS_ENABLED" => {version: ["A"]},
117
+ "DD_TRACE_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
118
+ "DD_TRACE_ACTIVE_RECORD_ENABLED" => {version: ["A"]},
119
+ "DD_TRACE_ACTIVE_SUPPORT_ANALYTICS_ENABLED" => {version: ["A"]},
120
+ "DD_TRACE_ACTIVE_SUPPORT_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
121
+ "DD_TRACE_ACTIVE_SUPPORT_ENABLED" => {version: ["A"]},
122
+ "DD_TRACE_AGENT_PORT" => {version: ["A"]},
123
+ "DD_TRACE_AGENT_TIMEOUT_SECONDS" => {version: ["A"]},
124
+ "DD_TRACE_AGENT_URL" => {version: ["A"]},
125
+ "DD_TRACE_ANALYTICS_ENABLED" => {version: ["A"]},
126
+ "DD_TRACE_AWS_ANALYTICS_ENABLED" => {version: ["A"]},
127
+ "DD_TRACE_AWS_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
128
+ "DD_TRACE_AWS_ENABLED" => {version: ["A"]},
129
+ "DD_TRACE_AWS_PEER_SERVICE" => {version: ["A"]},
130
+ "DD_TRACE_AWS_SERVICE_NAME" => {version: ["A"]},
131
+ "DD_TRACE_BAGGAGE_TAG_KEYS" => {version: ["A"]},
132
+ "DD_TRACE_CLIENT_IP_ENABLED" => {version: ["A"]},
133
+ "DD_TRACE_CLIENT_IP_HEADER" => {version: ["A"]},
134
+ "DD_TRACE_CONCURRENT_RUBY_ENABLED" => {version: ["A"]},
135
+ "DD_TRACE_DALLI_ANALYTICS_ENABLED" => {version: ["A"]},
136
+ "DD_TRACE_DALLI_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
137
+ "DD_TRACE_DALLI_ENABLED" => {version: ["A"]},
138
+ "DD_TRACE_DALLI_PEER_SERVICE" => {version: ["A"]},
139
+ "DD_TRACE_DALLI_SERVICE_NAME" => {version: ["A"]},
140
+ "DD_TRACE_DEBUG" => {version: ["B"]},
141
+ "DD_TRACE_DELAYED_JOB_ANALYTICS_ENABLED" => {version: ["A"]},
142
+ "DD_TRACE_DELAYED_JOB_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
143
+ "DD_TRACE_DELAYED_JOB_ENABLED" => {version: ["A"]},
144
+ "DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED" => {version: ["A"]},
145
+ "DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
146
+ "DD_TRACE_ELASTICSEARCH_ENABLED" => {version: ["A"]},
147
+ "DD_TRACE_ELASTICSEARCH_PEER_SERVICE" => {version: ["A"]},
148
+ "DD_TRACE_ELASTICSEARCH_SERVICE_NAME" => {version: ["A"]},
149
+ "DD_TRACE_ENABLED" => {version: ["B"]},
150
+ "DD_TRACE_ETHON_ANALYTICS_ENABLED" => {version: ["A"]},
151
+ "DD_TRACE_ETHON_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
152
+ "DD_TRACE_ETHON_ENABLED" => {version: ["A"]},
153
+ "DD_TRACE_ETHON_PEER_SERVICE" => {version: ["A"]},
154
+ "DD_TRACE_ETHON_SERVICE_NAME" => {version: ["A"]},
155
+ "DD_TRACE_EXCON_ANALYTICS_ENABLED" => {version: ["A"]},
156
+ "DD_TRACE_EXCON_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
157
+ "DD_TRACE_EXCON_ENABLED" => {version: ["A"]},
158
+ "DD_TRACE_EXCON_ERROR_STATUS_CODES" => {version: ["A"]},
159
+ "DD_TRACE_EXCON_PEER_SERVICE" => {version: ["A"]},
160
+ "DD_TRACE_EXCON_SERVICE_NAME" => {version: ["A"]},
161
+ "DD_TRACE_FARADAY_ANALYTICS_ENABLED" => {version: ["A"]},
162
+ "DD_TRACE_FARADAY_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
163
+ "DD_TRACE_FARADAY_ENABLED" => {version: ["A"]},
164
+ "DD_TRACE_FARADAY_ERROR_STATUS_CODES" => {version: ["A"]},
165
+ "DD_TRACE_FARADAY_PEER_SERVICE" => {version: ["A"]},
166
+ "DD_TRACE_FARADAY_SERVICE_NAME" => {version: ["A"]},
167
+ "DD_TRACE_GRAPE_ANALYTICS_ENABLED" => {version: ["A"]},
168
+ "DD_TRACE_GRAPE_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
169
+ "DD_TRACE_GRAPE_ENABLED" => {version: ["A"]},
170
+ "DD_TRACE_GRAPE_ERROR_STATUS_CODES" => {version: ["A"]},
171
+ "DD_TRACE_GRAPHQL_ANALYTICS_ENABLED" => {version: ["A"]},
172
+ "DD_TRACE_GRAPHQL_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
173
+ "DD_TRACE_GRAPHQL_ENABLED" => {version: ["A"]},
174
+ "DD_TRACE_GRAPHQL_ERROR_EXTENSIONS" => {version: ["A"]},
175
+ "DD_TRACE_GRAPHQL_ERROR_TRACKING" => {version: ["A"]},
176
+ "DD_TRACE_GRAPHQL_WITH_UNIFIED_TRACER" => {version: ["A"]},
177
+ "DD_TRACE_GRPC_ANALYTICS_ENABLED" => {version: ["A"]},
178
+ "DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
179
+ "DD_TRACE_GRPC_ENABLED" => {version: ["A"]},
180
+ "DD_TRACE_GRPC_PEER_SERVICE" => {version: ["A"]},
181
+ "DD_TRACE_GRPC_SERVICE_NAME" => {version: ["A"]},
182
+ "DD_TRACE_HANAMI_ENABLED" => {version: ["A"]},
183
+ "DD_TRACE_HEADER_TAGS" => {version: ["A"]},
184
+ "DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED" => {version: ["A"]},
185
+ "DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
186
+ "DD_TRACE_HTTPCLIENT_ENABLED" => {version: ["A"]},
187
+ "DD_TRACE_HTTPCLIENT_ERROR_STATUS_CODES" => {version: ["A"]},
188
+ "DD_TRACE_HTTPCLIENT_PEER_SERVICE" => {version: ["A"]},
189
+ "DD_TRACE_HTTPCLIENT_SERVICE_NAME" => {version: ["A"]},
190
+ "DD_TRACE_HTTPRB_ANALYTICS_ENABLED" => {version: ["A"]},
191
+ "DD_TRACE_HTTPRB_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
192
+ "DD_TRACE_HTTPRB_ENABLED" => {version: ["A"]},
193
+ "DD_TRACE_HTTPRB_ERROR_STATUS_CODES" => {version: ["A"]},
194
+ "DD_TRACE_HTTPRB_PEER_SERVICE" => {version: ["A"]},
195
+ "DD_TRACE_HTTPRB_SERVICE_NAME" => {version: ["A"]},
196
+ "DD_TRACE_HTTP_ANALYTICS_ENABLED" => {version: ["A"]},
197
+ "DD_TRACE_HTTP_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
198
+ "DD_TRACE_HTTP_ENABLED" => {version: ["A"]},
199
+ "DD_TRACE_HTTP_ERROR_STATUS_CODES" => {version: ["A"]},
200
+ "DD_TRACE_KAFKA_ANALYTICS_ENABLED" => {version: ["A"]},
201
+ "DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
202
+ "DD_TRACE_KAFKA_ENABLED" => {version: ["A"]},
203
+ "DD_TRACE_KARAFKA_ENABLED" => {version: ["A"]},
204
+ "DD_TRACE_LOGRAGE_ENABLED" => {version: ["A"]},
205
+ "DD_TRACE_MEMCACHED_COMMAND_ENABLED" => {version: ["A"]},
206
+ "DD_TRACE_MONGO_ANALYTICS_ENABLED" => {version: ["A"]},
207
+ "DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
208
+ "DD_TRACE_MONGO_ENABLED" => {version: ["A"]},
209
+ "DD_TRACE_MONGO_JSON_COMMAND" => {version: ["A"]},
210
+ "DD_TRACE_MONGO_PEER_SERVICE" => {version: ["A"]},
211
+ "DD_TRACE_MONGO_SERVICE_NAME" => {version: ["A"]},
212
+ "DD_TRACE_MYSQL2_ANALYTICS_ENABLED" => {version: ["A"]},
213
+ "DD_TRACE_MYSQL2_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
214
+ "DD_TRACE_MYSQL2_ENABLED" => {version: ["A"]},
215
+ "DD_TRACE_MYSQL2_PEER_SERVICE" => {version: ["A"]},
216
+ "DD_TRACE_MYSQL2_SERVICE_NAME" => {version: ["A"]},
217
+ "DD_TRACE_NATIVE_SPAN_EVENTS" => {version: ["A"]},
218
+ "DD_TRACE_NET_HTTP_PEER_SERVICE" => {version: ["A"]},
219
+ "DD_TRACE_NET_HTTP_SERVICE_NAME" => {version: ["A"]},
220
+ "DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED" => {version: ["A"]},
221
+ "DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
222
+ "DD_TRACE_OPENSEARCH_ENABLED" => {version: ["A"]},
223
+ "DD_TRACE_OPENSEARCH_PEER_SERVICE" => {version: ["A"]},
224
+ "DD_TRACE_OPENSEARCH_RESOURCE_PATTERN" => {version: ["A"]},
225
+ "DD_TRACE_OPENSEARCH_SERVICE_NAME" => {version: ["A"]},
226
+ "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED" => {version: ["A"]},
227
+ "DD_TRACE_PEER_SERVICE_MAPPING" => {version: ["A"]},
228
+ "DD_TRACE_PG_ANALYTICS_ENABLED" => {version: ["A"]},
229
+ "DD_TRACE_PG_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
230
+ "DD_TRACE_PG_ENABLED" => {version: ["A"]},
231
+ "DD_TRACE_PG_PEER_SERVICE" => {version: ["A"]},
232
+ "DD_TRACE_PG_SERVICE_NAME" => {version: ["A"]},
233
+ "DD_TRACE_PRESTO_ANALYTICS_ENABLED" => {version: ["A"]},
234
+ "DD_TRACE_PRESTO_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
235
+ "DD_TRACE_PRESTO_ENABLED" => {version: ["A"]},
236
+ "DD_TRACE_PRESTO_PEER_SERVICE" => {version: ["A"]},
237
+ "DD_TRACE_PRESTO_SERVICE_NAME" => {version: ["A"]},
238
+ "DD_TRACE_PROPAGATION_EXTRACT_FIRST" => {version: ["A"]},
239
+ "DD_TRACE_PROPAGATION_STYLE" => {version: ["B"]},
240
+ "DD_TRACE_PROPAGATION_STYLE_EXTRACT" => {version: ["A"]},
241
+ "DD_TRACE_PROPAGATION_STYLE_INJECT" => {version: ["A"]},
242
+ "DD_TRACE_QUE_ANALYTICS_ENABLED" => {version: ["A"]},
243
+ "DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
244
+ "DD_TRACE_QUE_ENABLED" => {version: ["A"]},
245
+ "DD_TRACE_QUE_TAG_ARGS_ENABLED" => {version: ["A"]},
246
+ "DD_TRACE_QUE_TAG_DATA_ENABLED" => {version: ["A"]},
247
+ "DD_TRACE_RACECAR_ANALYTICS_ENABLED" => {version: ["A"]},
248
+ "DD_TRACE_RACECAR_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
249
+ "DD_TRACE_RACECAR_ENABLED" => {version: ["A"]},
250
+ "DD_TRACE_RACK_ANALYTICS_ENABLED" => {version: ["A"]},
251
+ "DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
252
+ "DD_TRACE_RACK_ENABLED" => {version: ["A"]},
253
+ "DD_TRACE_RAILS_ANALYTICS_ENABLED" => {version: ["A"]},
254
+ "DD_TRACE_RAILS_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
255
+ "DD_TRACE_RAILS_ENABLED" => {version: ["A"]},
256
+ "DD_TRACE_RAKE_ANALYTICS_ENABLED" => {version: ["A"]},
257
+ "DD_TRACE_RAKE_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
258
+ "DD_TRACE_RAKE_ENABLED" => {version: ["A"]},
259
+ "DD_TRACE_RATE_LIMIT" => {version: ["A"]},
260
+ "DD_TRACE_REDIS_ANALYTICS_ENABLED" => {version: ["A"]},
261
+ "DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
262
+ "DD_TRACE_REDIS_ENABLED" => {version: ["A"]},
263
+ "DD_TRACE_REDIS_PEER_SERVICE" => {version: ["A"]},
264
+ "DD_TRACE_REDIS_SERVICE_NAME" => {version: ["A"]},
265
+ "DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED" => {version: ["A"]},
266
+ "DD_TRACE_REPORT_HOSTNAME" => {version: ["A"]},
267
+ "DD_TRACE_RESQUE_ANALYTICS_ENABLED" => {version: ["A"]},
268
+ "DD_TRACE_RESQUE_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
269
+ "DD_TRACE_RESQUE_ENABLED" => {version: ["A"]},
270
+ "DD_TRACE_REST_CLIENT_ANALYTICS_ENABLED" => {version: ["A"]},
271
+ "DD_TRACE_REST_CLIENT_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
272
+ "DD_TRACE_REST_CLIENT_ENABLED" => {version: ["A"]},
273
+ "DD_TRACE_REST_CLIENT_PEER_SERVICE" => {version: ["A"]},
274
+ "DD_TRACE_REST_CLIENT_SERVICE_NAME" => {version: ["A"]},
275
+ "DD_TRACE_RODA_ENABLED" => {version: ["A"]},
276
+ "DD_TRACE_SAMPLE_RATE" => {version: ["B"]},
277
+ "DD_TRACE_SAMPLING_RULES" => {version: ["A"]},
278
+ "DD_TRACE_SEMANTIC_LOGGER_ENABLED" => {version: ["A"]},
279
+ "DD_TRACE_SEQUEL_ANALYTICS_ENABLED" => {version: ["A"]},
280
+ "DD_TRACE_SEQUEL_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
281
+ "DD_TRACE_SEQUEL_ENABLED" => {version: ["A"]},
282
+ "DD_TRACE_SHORYUKEN_ANALYTICS_ENABLED" => {version: ["A"]},
283
+ "DD_TRACE_SHORYUKEN_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
284
+ "DD_TRACE_SHORYUKEN_ENABLED" => {version: ["A"]},
285
+ "DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED" => {version: ["A"]},
286
+ "DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
287
+ "DD_TRACE_SIDEKIQ_ENABLED" => {version: ["A"]},
288
+ "DD_TRACE_SINATRA_ANALYTICS_ENABLED" => {version: ["A"]},
289
+ "DD_TRACE_SINATRA_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
290
+ "DD_TRACE_SINATRA_ENABLED" => {version: ["A"]},
291
+ "DD_TRACE_SNEAKERS_ANALYTICS_ENABLED" => {version: ["A"]},
292
+ "DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
293
+ "DD_TRACE_SNEAKERS_ENABLED" => {version: ["A"]},
294
+ "DD_TRACE_STARTUP_LOGS" => {version: ["A"]},
295
+ "DD_TRACE_STRIPE_ANALYTICS_ENABLED" => {version: ["A"]},
296
+ "DD_TRACE_STRIPE_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
297
+ "DD_TRACE_STRIPE_ENABLED" => {version: ["A"]},
298
+ "DD_TRACE_SUCKER_PUNCH_ANALYTICS_ENABLED" => {version: ["A"]},
299
+ "DD_TRACE_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
300
+ "DD_TRACE_SUCKER_PUNCH_ENABLED" => {version: ["A"]},
301
+ "DD_TRACE_TEST_MODE_ENABLED" => {version: ["A"]},
302
+ "DD_TRACE_TRILOGY_ANALYTICS_ENABLED" => {version: ["A"]},
303
+ "DD_TRACE_TRILOGY_ANALYTICS_SAMPLE_RATE" => {version: ["A"]},
304
+ "DD_TRACE_TRILOGY_ENABLED" => {version: ["A"]},
305
+ "DD_TRACE_TRILOGY_PEER_SERVICE" => {version: ["A"]},
306
+ "DD_TRACE_TRILOGY_SERVICE_NAME" => {version: ["A"]},
307
+ "DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH" => {version: ["A"]},
308
+ "DD_VERSION" => {version: ["A"]},
309
+ "OTEL_TRACES_SAMPLER_ARG" => {version: ["A"]}}.freeze
310
+
311
+ ALIASES =
312
+ {"DD_DISABLE_DATADOG_RAILS" => ["DISABLE_DATADOG_RAILS"],
313
+ "DD_PROFILING_GVL_ENABLED" => ["DD_PROFILING_PREVIEW_GVL_ENABLED"],
314
+ "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED" => ["DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED"],
315
+ "DD_SERVICE" => ["OTEL_SERVICE_NAME"],
316
+ "DD_TAGS" => ["OTEL_RESOURCE_ATTRIBUTES"],
317
+ "DD_TRACE_DEBUG" => ["OTEL_LOG_LEVEL"],
318
+ "DD_TRACE_ENABLED" => ["OTEL_TRACES_EXPORTER"],
319
+ "DD_TRACE_PROPAGATION_STYLE" => ["OTEL_PROPAGATORS"],
320
+ "DD_TRACE_SAMPLE_RATE" => ["OTEL_TRACES_SAMPLER"]}.freeze
321
+
322
+ DEPRECATIONS =
323
+ {"DD_PROFILING_PREVIEW_GVL_ENABLED" => "(This doesn't need a deprecation message since there's an alias for it)"}.freeze
324
+
325
+ ALIAS_TO_CANONICAL =
326
+ {"DD_PROFILING_PREVIEW_GVL_ENABLED" => "DD_PROFILING_GVL_ENABLED",
327
+ "DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED" => "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED",
328
+ "DISABLE_DATADOG_RAILS" => "DD_DISABLE_DATADOG_RAILS",
329
+ "OTEL_LOG_LEVEL" => "DD_TRACE_DEBUG",
330
+ "OTEL_PROPAGATORS" => "DD_TRACE_PROPAGATION_STYLE",
331
+ "OTEL_RESOURCE_ATTRIBUTES" => "DD_TAGS",
332
+ "OTEL_SERVICE_NAME" => "DD_SERVICE",
333
+ "OTEL_TRACES_EXPORTER" => "DD_TRACE_ENABLED",
334
+ "OTEL_TRACES_SAMPLER" => "DD_TRACE_SAMPLE_RATE"}.freeze
335
+ end
336
+ end
337
+ end
@@ -238,7 +238,7 @@ module Datadog
238
238
  yield write_components
239
239
  rescue ThreadError => e
240
240
  logger_without_components.error(
241
- 'Detected deadlock during datadog initialization. ' \
241
+ "Detected deadlock during datadog initialization: #{e.class}: #{e}. " \
242
242
  'Please report this at https://github.com/datadog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
243
243
  "\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
244
244
  )
@@ -295,7 +295,7 @@ module Datadog
295
295
  # such as reading stable config. In this case we cannot access configuration.
296
296
 
297
297
  @temp_config_logger ||= begin
298
- debug_env_value = ENV[Ext::Diagnostics::ENV_DEBUG_ENABLED]&.strip&.downcase
298
+ debug_env_value = DATADOG_ENV[Ext::Diagnostics::ENV_DEBUG_ENABLED]&.strip&.downcase
299
299
  debug_value = debug_env_value == 'true' || debug_env_value == '1'
300
300
 
301
301
  logger = Core::Logger.new($stdout)
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'datadog/core'
4
+
5
+ module Datadog
6
+ module Core
7
+ # Used to access ddsketch APIs.
8
+ # APIs in this class are implemented as native code.
9
+ class DDSketch
10
+ def self.supported?
11
+ Datadog::Core::LIBDATADOG_API_FAILURE.nil?
12
+ end
13
+
14
+ def initialize
15
+ unless self.class.supported?
16
+ raise(ArgumentError, "DDSketch is not supported: #{Datadog::Core::LIBDATADOG_API_FAILURE}")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -14,10 +14,10 @@ module Datadog
14
14
  # @yieldreturn [String] a String with the lazily evaluated deprecation message.
15
15
  # @param [Boolean] disallowed_next_major whether this deprecation will be enforced in the next major release.
16
16
  # @param [Object] key A unique key for the deprecation. Only the first message with the same key will be logged.
17
- def log_deprecation(disallowed_next_major: true, key: nil)
17
+ def log_deprecation(disallowed_next_major: true, key: nil, logger: Datadog.logger)
18
18
  return unless log_deprecation?(key)
19
19
 
20
- Datadog.logger.warn do
20
+ logger.warn do
21
21
  message = yield
22
22
  message += ' This will be enforced in the next major release.' if disallowed_next_major
23
23
  message
@@ -18,10 +18,8 @@ module Datadog
18
18
  ENV_API_KEY = 'DD_API_KEY'
19
19
  ENV_ENVIRONMENT = 'DD_ENV'
20
20
  ENV_SERVICE = 'DD_SERVICE'
21
- ENV_OTEL_SERVICE = 'OTEL_SERVICE_NAME'
22
21
  ENV_SITE = 'DD_SITE'
23
22
  ENV_TAGS = 'DD_TAGS'
24
- ENV_OTEL_RESOURCE_ATTRIBUTES = 'OTEL_RESOURCE_ATTRIBUTES'
25
23
  ENV_VERSION = 'DD_VERSION'
26
24
  FALLBACK_SERVICE_NAME =
27
25
  begin
@@ -12,13 +12,13 @@ module Datadog
12
12
  def self.git_repository_url
13
13
  return @git_repository_url if defined?(@git_repository_url)
14
14
 
15
- @git_repository_url = Utils::Url.filter_basic_auth(ENV[Datadog::Core::Git::Ext::ENV_REPOSITORY_URL])
15
+ @git_repository_url = Utils::Url.filter_basic_auth(DATADOG_ENV[Datadog::Core::Git::Ext::ENV_REPOSITORY_URL])
16
16
  end
17
17
 
18
18
  def self.git_commit_sha
19
19
  return @git_commit_sha if defined?(@git_commit_sha)
20
20
 
21
- @git_commit_sha = ENV[Datadog::Core::Git::Ext::ENV_COMMIT_SHA]
21
+ @git_commit_sha = DATADOG_ENV[Datadog::Core::Git::Ext::ENV_COMMIT_SHA]
22
22
  end
23
23
  end
24
24
  end
@@ -20,8 +20,8 @@ module Datadog
20
20
  # @return [default] if the environment value is not found
21
21
  def env_to_bool(var, default = nil, deprecation_warning: true)
22
22
  var = decode_array(var, deprecation_warning)
23
- if var && ENV.key?(var)
24
- value = ENV[var].to_s.strip
23
+ if var && DATADOG_ENV.key?(var)
24
+ value = DATADOG_ENV[var].to_s.strip
25
25
  value.downcase!
26
26
  value == 'true' || value == '1'
27
27
  else
@@ -34,7 +34,7 @@ module Datadog
34
34
  def decode_array(var, deprecation_warning)
35
35
  if var.is_a?(Array)
36
36
  var.find.with_index do |env_var, i|
37
- found = ENV.key?(env_var)
37
+ found = DATADOG_ENV.key?(env_var)
38
38
 
39
39
  # Check if we are using a non-preferred environment variable
40
40
  if deprecation_warning && found && i != 0
@@ -54,7 +54,8 @@ module Datadog
54
54
 
55
55
  # Ratio of YJIT-executed instructions
56
56
  def ratio_in_yjit
57
- ::RubyVM::YJIT.runtime_stats[:ratio_in_yjit]
57
+ stats = ::RubyVM::YJIT.runtime_stats
58
+ stats[:ratio_in_yjit] if stats.key?(:ratio_in_yjit)
58
59
  end
59
60
 
60
61
  def available?
@@ -54,11 +54,11 @@ module Datadog
54
54
  end
55
55
 
56
56
  def default_hostname
57
- ENV.fetch(Configuration::Ext::Agent::ENV_DEFAULT_HOST, Ext::DEFAULT_HOST)
57
+ DATADOG_ENV.fetch(Configuration::Ext::Agent::ENV_DEFAULT_HOST, Ext::DEFAULT_HOST)
58
58
  end
59
59
 
60
60
  def default_port
61
- ENV.fetch(Configuration::Ext::Metrics::ENV_DEFAULT_PORT, Ext::DEFAULT_PORT).to_i
61
+ DATADOG_ENV.fetch(Configuration::Ext::Metrics::ENV_DEFAULT_PORT, Ext::DEFAULT_PORT).to_i
62
62
  end
63
63
 
64
64
  def default_statsd_client
@@ -43,18 +43,14 @@ module Datadog
43
43
  # rubocop:disable Style/TrivialAccessors
44
44
  def onto(obj)
45
45
  unless obj.respond_to? :datadog_pin=
46
- obj.instance_exec do
47
- def datadog_pin=(pin)
48
- @datadog_pin = pin
49
- end
46
+ obj.define_singleton_method(:datadog_pin=) do |pin|
47
+ @datadog_pin = pin
50
48
  end
51
49
  end
52
50
 
53
51
  unless obj.respond_to? :datadog_pin
54
- obj.instance_exec do
55
- def datadog_pin
56
- @datadog_pin
57
- end
52
+ obj.define_singleton_method(:datadog_pin) do
53
+ @datadog_pin
58
54
  end
59
55
  end
60
56
 
@@ -2,11 +2,9 @@
2
2
 
3
3
  module Datadog
4
4
  module Core
5
- class ProcessDiscovery
5
+ module ProcessDiscovery
6
6
  class TracerMemfd
7
- attr_accessor :logger
8
-
9
- def shutdown!
7
+ def shutdown!(logger)
10
8
  ProcessDiscovery._native_close_tracer_memfd(self, logger)
11
9
  end
12
10
  end
@@ -2,34 +2,59 @@
2
2
 
3
3
  require 'datadog/core/process_discovery/tracer_memfd'
4
4
 
5
+ require_relative 'utils/at_fork_monkey_patch'
6
+ require_relative 'utils/only_once'
7
+
5
8
  module Datadog
6
9
  module Core
7
10
  # Class used to store tracer metadata in a native file descriptor.
8
- class ProcessDiscovery
9
- def self.get_and_store_metadata(settings, logger)
10
- if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
11
- logger.debug("Cannot enable process discovery: #{libdatadog_api_failure}")
12
- return
11
+ module ProcessDiscovery
12
+ ONLY_ONCE = Core::Utils::OnlyOnce.new
13
+
14
+ class << self
15
+ def publish(settings)
16
+ if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
17
+ Datadog.logger.debug { "Cannot enable process discovery: #{libdatadog_api_failure}" }
18
+ return
19
+ end
20
+
21
+ ONLY_ONCE.run { apply_at_fork_patch }
22
+
23
+ metadata = get_metadata(settings)
24
+
25
+ shutdown!
26
+ @file_descriptor = _native_store_tracer_metadata(Datadog.logger, **metadata)
13
27
  end
14
- metadata = get_metadata(settings)
15
- memfd = _native_store_tracer_metadata(logger, **metadata)
16
- memfd.logger = logger if memfd
17
- memfd
18
- end
19
28
 
20
- # According to the RFC, runtime_id, service_name, service_env, service_version are optional.
21
- # In the C method exposed by ddcommon, memfd_create replaces empty strings by None for these fields.
22
- private_class_method def self.get_metadata(settings)
23
- {
24
- schema_version: 1,
25
- runtime_id: Core::Environment::Identity.id,
26
- tracer_language: Core::Environment::Identity.lang,
27
- tracer_version: Core::Environment::Identity.gem_datadog_version_semver2,
28
- hostname: Core::Environment::Socket.hostname,
29
- service_name: settings.service || '',
30
- service_env: settings.env || '',
31
- service_version: settings.version || ''
32
- }
29
+ def shutdown!
30
+ @file_descriptor&.shutdown!(Datadog.logger)
31
+ @file_descriptor = nil
32
+ end
33
+
34
+ private
35
+
36
+ # According to the RFC, runtime_id, service_name, service_env, service_version are optional.
37
+ # In the C method exposed by ddcommon, memfd_create replaces empty strings by None for these fields.
38
+ def get_metadata(settings)
39
+ {
40
+ runtime_id: Core::Environment::Identity.id,
41
+ tracer_language: Core::Environment::Identity.lang,
42
+ tracer_version: Core::Environment::Identity.gem_datadog_version_semver2,
43
+ hostname: Core::Environment::Socket.hostname,
44
+ service_name: settings.service || '',
45
+ service_env: settings.env || '',
46
+ service_version: settings.version || '',
47
+ # TODO: Implement process tags and container id
48
+ process_tags: '',
49
+ container_id: ''
50
+ }
51
+ end
52
+
53
+ def apply_at_fork_patch
54
+ # The runtime-id changes after a fork. We apply this patch to at_fork to ensure that the runtime-id is updated.
55
+ Utils::AtForkMonkeyPatch.apply!
56
+ Utils::AtForkMonkeyPatch.at_fork(:child) { publish(Datadog.configuration) }
57
+ end
33
58
  end
34
59
  end
35
60
  end
@@ -135,13 +135,11 @@ module Datadog
135
135
 
136
136
  # Release all current waiters
137
137
  def lift
138
- @mutex.lock
138
+ @mutex.synchronize do
139
+ @once ||= true
139
140
 
140
- @once ||= true
141
-
142
- @condition.broadcast
143
- ensure
144
- @mutex.unlock
141
+ @condition.broadcast
142
+ end
145
143
  end
146
144
  end
147
145
 
@@ -13,7 +13,6 @@ module Datadog
13
13
  # @public_api
14
14
  module Metrics
15
15
  ENV_ENABLED = 'DD_RUNTIME_METRICS_ENABLED'
16
- ENV_OTEL_METRICS_EXPORTER = 'OTEL_METRICS_EXPORTER'
17
16
 
18
17
  METRIC_CLASS_COUNT = 'runtime.ruby.class_count'
19
18
  METRIC_GC_PREFIX = 'runtime.ruby.gc'
@@ -19,6 +19,8 @@ module Datadog
19
19
  #
20
20
  # @api private
21
21
  class Component
22
+ ENDPOINT_COLLECTION_MESSAGE_LIMIT = 300
23
+
22
24
  attr_reader :enabled, :logger, :transport, :worker
23
25
 
24
26
  include Core::Utils::Forking
@@ -165,6 +167,15 @@ module Datadog
165
167
  @worker.enqueue(Event::AppClientConfigurationChange.new(changes, 'remote_config'))
166
168
  end
167
169
 
170
+ # Report application endpoints
171
+ def app_endpoints_loaded(endpoints, page_size: ENDPOINT_COLLECTION_MESSAGE_LIMIT)
172
+ return if !@enabled || forked?
173
+
174
+ endpoints.each_slice(page_size).with_index do |endpoints_slice, i|
175
+ @worker.enqueue(Event::AppEndpointsLoaded.new(endpoints_slice, is_first: i.zero?))
176
+ end
177
+ end
178
+
168
179
  # Increments a count metric.
169
180
  def inc(namespace, metric_name, value, tags: {}, common: true)
170
181
  @metrics_manager.inc(namespace, metric_name, value, tags: tags, common: common)