ddtrace 1.12.1 → 1.23.2

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 (509) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +613 -9
  3. data/LICENSE-3rdparty.csv +1 -1
  4. data/bin/ddprofrb +15 -0
  5. data/bin/ddtracerb +3 -1
  6. data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
  7. data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
  8. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +3 -5
  9. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -3
  10. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +3 -22
  11. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
  12. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +338 -108
  13. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
  14. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
  15. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +22 -14
  16. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +4 -0
  17. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
  18. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
  19. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +3 -0
  20. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +111 -118
  21. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +11 -4
  22. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +545 -144
  23. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +3 -2
  24. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +68 -17
  25. data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
  26. data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
  27. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +6 -0
  28. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +60 -32
  29. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
  30. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
  31. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +50 -4
  32. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +155 -32
  33. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +16 -0
  34. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +19 -3
  35. data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
  36. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +33 -0
  37. data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
  38. data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
  39. data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
  40. data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
  41. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  42. data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
  43. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  44. data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
  45. data/lib/datadog/appsec/assets.rb +8 -0
  46. data/lib/datadog/appsec/component.rb +21 -2
  47. data/lib/datadog/appsec/configuration/settings.rb +167 -189
  48. data/lib/datadog/appsec/configuration.rb +0 -79
  49. data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
  50. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  51. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  52. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  53. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  54. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  55. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  56. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  57. data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
  58. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
  59. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -2
  60. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
  61. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +3 -8
  62. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +3 -6
  63. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +3 -6
  64. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
  65. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +77 -27
  66. data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
  67. data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
  68. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
  69. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -11
  70. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +3 -6
  71. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
  72. data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
  73. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
  74. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
  75. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +3 -6
  76. data/lib/datadog/appsec/event.rb +106 -50
  77. data/lib/datadog/appsec/extensions.rb +1 -130
  78. data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
  79. data/lib/datadog/appsec/monitor/reactive/set_user.rb +3 -6
  80. data/lib/datadog/appsec/processor/actions.rb +49 -0
  81. data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
  82. data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
  83. data/lib/datadog/appsec/processor.rb +35 -7
  84. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  85. data/lib/datadog/appsec/remote.rb +17 -11
  86. data/lib/datadog/appsec/response.rb +82 -4
  87. data/lib/datadog/appsec/sample_rate.rb +21 -0
  88. data/lib/datadog/appsec.rb +3 -4
  89. data/lib/datadog/auto_instrument.rb +3 -0
  90. data/lib/datadog/core/backport.rb +51 -0
  91. data/lib/datadog/core/configuration/agent_settings_resolver.rb +38 -29
  92. data/lib/datadog/core/configuration/base.rb +6 -16
  93. data/lib/datadog/core/configuration/components.rb +20 -7
  94. data/lib/datadog/core/configuration/ext.rb +28 -5
  95. data/lib/datadog/core/configuration/option.rb +271 -21
  96. data/lib/datadog/core/configuration/option_definition.rb +73 -32
  97. data/lib/datadog/core/configuration/options.rb +27 -15
  98. data/lib/datadog/core/configuration/settings.rb +398 -119
  99. data/lib/datadog/core/configuration.rb +24 -4
  100. data/lib/datadog/core/diagnostics/environment_logger.rb +132 -235
  101. data/lib/datadog/core/environment/class_count.rb +6 -6
  102. data/lib/datadog/core/environment/execution.rb +103 -0
  103. data/lib/datadog/core/environment/ext.rb +13 -11
  104. data/lib/datadog/core/environment/git.rb +25 -0
  105. data/lib/datadog/core/environment/identity.rb +18 -48
  106. data/lib/datadog/core/environment/platform.rb +7 -1
  107. data/lib/datadog/core/environment/variable_helpers.rb +0 -69
  108. data/lib/datadog/core/environment/yjit.rb +58 -0
  109. data/lib/datadog/core/error.rb +1 -0
  110. data/lib/datadog/core/git/ext.rb +6 -23
  111. data/lib/datadog/core/logging/ext.rb +3 -1
  112. data/lib/datadog/core/metrics/ext.rb +7 -5
  113. data/lib/datadog/core/remote/client/capabilities.rb +7 -2
  114. data/lib/datadog/core/remote/client.rb +3 -0
  115. data/lib/datadog/core/remote/component.rb +52 -48
  116. data/lib/datadog/core/remote/configuration/content.rb +28 -1
  117. data/lib/datadog/core/remote/configuration/repository.rb +3 -1
  118. data/lib/datadog/core/remote/ext.rb +2 -1
  119. data/lib/datadog/core/remote/negotiation.rb +20 -7
  120. data/lib/datadog/core/remote/tie/tracing.rb +39 -0
  121. data/lib/datadog/core/remote/tie.rb +27 -0
  122. data/lib/datadog/core/remote/transport/config.rb +60 -0
  123. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  124. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  125. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  126. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  127. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  128. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  129. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  130. data/lib/datadog/core/remote/transport/http.rb +179 -0
  131. data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
  132. data/lib/datadog/core/remote/worker.rb +11 -5
  133. data/lib/datadog/core/runtime/ext.rb +22 -12
  134. data/lib/datadog/core/runtime/metrics.rb +43 -0
  135. data/lib/datadog/core/telemetry/client.rb +28 -10
  136. data/lib/datadog/core/telemetry/emitter.rb +9 -11
  137. data/lib/datadog/core/telemetry/event.rb +250 -44
  138. data/lib/datadog/core/telemetry/ext.rb +8 -1
  139. data/lib/datadog/core/telemetry/heartbeat.rb +3 -7
  140. data/lib/datadog/core/telemetry/http/ext.rb +13 -8
  141. data/lib/datadog/core/telemetry/http/response.rb +4 -0
  142. data/lib/datadog/core/telemetry/http/transport.rb +10 -3
  143. data/lib/datadog/core/telemetry/request.rb +59 -0
  144. data/lib/datadog/core/transport/ext.rb +49 -0
  145. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  146. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  147. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  148. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  149. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  150. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  151. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  152. data/lib/datadog/core/transport/http/env.rb +62 -0
  153. data/lib/datadog/core/transport/http/response.rb +60 -0
  154. data/lib/datadog/core/transport/parcel.rb +22 -0
  155. data/lib/datadog/core/transport/request.rb +17 -0
  156. data/lib/datadog/core/transport/response.rb +64 -0
  157. data/lib/datadog/core/utils/duration.rb +52 -0
  158. data/lib/datadog/core/utils/hash.rb +47 -0
  159. data/lib/datadog/core/utils/network.rb +1 -1
  160. data/lib/datadog/core/utils/safe_dup.rb +27 -20
  161. data/lib/datadog/core/utils/url.rb +25 -0
  162. data/lib/datadog/core/utils.rb +1 -1
  163. data/lib/datadog/core/workers/async.rb +3 -2
  164. data/lib/datadog/core/workers/polling.rb +2 -2
  165. data/lib/datadog/kit/appsec/events.rb +139 -89
  166. data/lib/datadog/kit/enable_core_dumps.rb +5 -6
  167. data/lib/datadog/kit/identity.rb +80 -65
  168. data/lib/datadog/opentelemetry/api/context.rb +10 -3
  169. data/lib/datadog/opentelemetry/sdk/propagator.rb +5 -3
  170. data/lib/datadog/opentelemetry/sdk/span_processor.rb +48 -5
  171. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  172. data/lib/datadog/opentelemetry/trace.rb +58 -0
  173. data/lib/datadog/opentelemetry.rb +4 -0
  174. data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
  175. data/lib/datadog/opentracer.rb +9 -0
  176. data/lib/datadog/profiling/collectors/code_provenance.rb +10 -4
  177. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +43 -20
  178. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
  179. data/lib/datadog/profiling/collectors/info.rb +101 -0
  180. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  181. data/lib/datadog/profiling/component.rb +248 -97
  182. data/lib/datadog/profiling/exporter.rb +26 -5
  183. data/lib/datadog/profiling/ext.rb +2 -12
  184. data/lib/datadog/profiling/flush.rb +10 -5
  185. data/lib/datadog/profiling/http_transport.rb +23 -6
  186. data/lib/datadog/profiling/load_native_extension.rb +25 -6
  187. data/lib/datadog/profiling/native_extension.rb +1 -22
  188. data/lib/datadog/profiling/profiler.rb +36 -13
  189. data/lib/datadog/profiling/scheduler.rb +20 -15
  190. data/lib/datadog/profiling/stack_recorder.rb +19 -4
  191. data/lib/datadog/profiling/tag_builder.rb +5 -0
  192. data/lib/datadog/profiling/tasks/exec.rb +3 -3
  193. data/lib/datadog/profiling/tasks/help.rb +3 -3
  194. data/lib/datadog/profiling.rb +28 -79
  195. data/lib/datadog/tracing/component.rb +70 -11
  196. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  197. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  198. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  199. data/lib/datadog/tracing/configuration/ext.rb +40 -33
  200. data/lib/datadog/tracing/configuration/http.rb +74 -0
  201. data/lib/datadog/tracing/configuration/settings.rb +136 -99
  202. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +10 -6
  203. data/lib/datadog/tracing/contrib/action_cable/ext.rb +21 -18
  204. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +10 -6
  205. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
  206. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +21 -18
  207. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +10 -7
  208. data/lib/datadog/tracing/contrib/action_pack/ext.rb +11 -8
  209. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -6
  210. data/lib/datadog/tracing/contrib/action_view/ext.rb +13 -10
  211. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +14 -7
  212. data/lib/datadog/tracing/contrib/active_job/ext.rb +26 -23
  213. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
  214. data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
  215. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +10 -6
  216. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +13 -10
  217. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -15
  218. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +10 -7
  219. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
  220. data/lib/datadog/tracing/contrib/active_record/ext.rb +18 -15
  221. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
  222. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -202
  223. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
  224. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -7
  225. data/lib/datadog/tracing/contrib/active_support/ext.rb +19 -16
  226. data/lib/datadog/tracing/contrib/analytics.rb +0 -1
  227. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +15 -7
  228. data/lib/datadog/tracing/contrib/aws/ext.rb +38 -24
  229. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
  230. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  231. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
  232. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
  233. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
  234. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +3 -10
  235. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -1
  236. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +19 -2
  237. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  238. data/lib/datadog/tracing/contrib/configurable.rb +1 -1
  239. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  240. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +21 -7
  241. data/lib/datadog/tracing/contrib/dalli/ext.rb +27 -11
  242. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
  243. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +14 -7
  244. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +17 -14
  245. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +15 -7
  246. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +22 -15
  247. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
  248. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +17 -9
  249. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
  250. data/lib/datadog/tracing/contrib/ethon/ext.rb +20 -11
  251. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
  252. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +20 -10
  253. data/lib/datadog/tracing/contrib/excon/ext.rb +17 -8
  254. data/lib/datadog/tracing/contrib/excon/middleware.rb +25 -5
  255. data/lib/datadog/tracing/contrib/ext.rb +26 -1
  256. data/lib/datadog/tracing/contrib/extensions.rb +38 -2
  257. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +27 -10
  258. data/lib/datadog/tracing/contrib/faraday/ext.rb +17 -8
  259. data/lib/datadog/tracing/contrib/faraday/middleware.rb +22 -6
  260. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +9 -6
  261. data/lib/datadog/tracing/contrib/grape/ext.rb +17 -14
  262. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +9 -6
  263. data/lib/datadog/tracing/contrib/graphql/ext.rb +8 -5
  264. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +40 -9
  265. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +39 -20
  266. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +37 -18
  267. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
  268. data/lib/datadog/tracing/contrib/grpc/ext.rb +17 -13
  269. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  270. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
  271. data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
  272. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +5 -8
  273. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +34 -11
  274. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
  275. data/lib/datadog/tracing/contrib/http/ext.rb +17 -9
  276. data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
  277. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +34 -11
  278. data/lib/datadog/tracing/contrib/httpclient/ext.rb +18 -9
  279. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
  280. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +34 -11
  281. data/lib/datadog/tracing/contrib/httprb/ext.rb +17 -9
  282. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
  283. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +10 -6
  284. data/lib/datadog/tracing/contrib/kafka/ext.rb +43 -39
  285. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
  286. data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
  287. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -17
  288. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +15 -7
  289. data/lib/datadog/tracing/contrib/mongodb/ext.rb +21 -16
  290. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
  291. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +22 -14
  292. data/lib/datadog/tracing/contrib/mysql2/ext.rb +16 -10
  293. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +22 -7
  294. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
  295. data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
  296. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  297. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  298. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  299. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +23 -14
  300. data/lib/datadog/tracing/contrib/pg/ext.rb +23 -19
  301. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +49 -9
  302. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +15 -7
  303. data/lib/datadog/tracing/contrib/presto/ext.rb +26 -20
  304. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +14 -5
  305. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
  306. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  307. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +13 -8
  308. data/lib/datadog/tracing/contrib/qless/ext.rb +15 -12
  309. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -12
  310. data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
  311. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +10 -7
  312. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
  313. data/lib/datadog/tracing/contrib/racecar/ext.rb +21 -18
  314. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -12
  315. data/lib/datadog/tracing/contrib/rack/ext.rb +19 -16
  316. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
  317. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  318. data/lib/datadog/tracing/contrib/rack/middlewares.rb +16 -50
  319. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -2
  320. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +20 -15
  321. data/lib/datadog/tracing/contrib/rails/ext.rb +8 -5
  322. data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -10
  323. data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
  324. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
  325. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +14 -10
  326. data/lib/datadog/tracing/contrib/rake/ext.rb +15 -12
  327. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +18 -9
  328. data/lib/datadog/tracing/contrib/redis/ext.rb +23 -15
  329. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +5 -40
  330. data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
  331. data/lib/datadog/tracing/contrib/redis/tags.rb +16 -7
  332. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
  333. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +14 -7
  334. data/lib/datadog/tracing/contrib/resque/ext.rb +10 -7
  335. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +17 -9
  336. data/lib/datadog/tracing/contrib/rest_client/ext.rb +16 -8
  337. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
  338. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +10 -6
  339. data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
  340. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
  341. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
  342. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -20
  343. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +10 -6
  344. data/lib/datadog/tracing/contrib/sequel/ext.rb +11 -8
  345. data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
  346. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +15 -8
  347. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +15 -12
  348. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +19 -11
  349. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +33 -30
  350. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -9
  351. data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
  352. data/lib/datadog/tracing/contrib/sinatra/ext.rb +22 -19
  353. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
  354. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -8
  355. data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -0
  356. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
  357. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
  358. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +10 -6
  359. data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
  360. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +10 -6
  361. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +16 -13
  362. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
  363. data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
  364. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
  365. data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
  366. data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/trilogy}/patcher.rb +10 -6
  367. data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
  368. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +11 -11
  369. data/lib/datadog/tracing/contrib.rb +2 -0
  370. data/lib/datadog/tracing/correlation.rb +29 -12
  371. data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
  372. data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
  373. data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
  374. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  375. data/lib/datadog/tracing/distributed/datadog.rb +0 -1
  376. data/lib/datadog/tracing/distributed/propagation.rb +35 -34
  377. data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
  378. data/lib/datadog/tracing/metadata/ext.rb +9 -6
  379. data/lib/datadog/tracing/metadata/tagging.rb +3 -3
  380. data/lib/datadog/tracing/remote.rb +78 -0
  381. data/lib/datadog/tracing/sampling/matcher.rb +23 -3
  382. data/lib/datadog/tracing/sampling/rule.rb +7 -2
  383. data/lib/datadog/tracing/sampling/rule_sampler.rb +31 -0
  384. data/lib/datadog/tracing/span_operation.rb +3 -15
  385. data/lib/datadog/tracing/sync_writer.rb +3 -3
  386. data/lib/datadog/tracing/trace_digest.rb +31 -0
  387. data/lib/datadog/tracing/trace_operation.rb +17 -5
  388. data/lib/datadog/tracing/trace_segment.rb +5 -2
  389. data/lib/datadog/tracing/tracer.rb +12 -1
  390. data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
  391. data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
  392. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  393. data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
  394. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  395. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  396. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  397. data/lib/datadog/tracing/transport/http.rb +125 -0
  398. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  399. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  400. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  401. data/lib/datadog/tracing/transport/io.rb +30 -0
  402. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  403. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  404. data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
  405. data/lib/datadog/tracing/transport/traces.rb +224 -0
  406. data/lib/datadog/tracing/workers/trace_writer.rb +6 -4
  407. data/lib/datadog/tracing/workers.rb +4 -2
  408. data/lib/datadog/tracing/writer.rb +5 -2
  409. data/lib/datadog/tracing.rb +8 -2
  410. data/lib/ddtrace/transport/ext.rb +22 -14
  411. data/lib/ddtrace/version.rb +9 -12
  412. data/lib/ddtrace.rb +1 -1
  413. metadata +157 -139
  414. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -25
  415. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -110
  416. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -591
  417. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -14
  418. data/ext/ddtrace_profiling_native_extension/time_helpers.c +0 -17
  419. data/ext/ddtrace_profiling_native_extension/time_helpers.h +0 -10
  420. data/lib/datadog/ci/configuration/components.rb +0 -32
  421. data/lib/datadog/ci/configuration/settings.rb +0 -53
  422. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
  423. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -20
  424. data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
  425. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
  426. data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
  427. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
  428. data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
  429. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -19
  430. data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
  431. data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
  432. data/lib/datadog/ci/ext/app_types.rb +0 -9
  433. data/lib/datadog/ci/ext/environment.rb +0 -575
  434. data/lib/datadog/ci/ext/settings.rb +0 -10
  435. data/lib/datadog/ci/ext/test.rb +0 -35
  436. data/lib/datadog/ci/extensions.rb +0 -19
  437. data/lib/datadog/ci/flush.rb +0 -38
  438. data/lib/datadog/ci/test.rb +0 -81
  439. data/lib/datadog/ci.rb +0 -20
  440. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
  441. data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
  442. data/lib/datadog/core/configuration/option_set.rb +0 -10
  443. data/lib/datadog/core/telemetry/collector.rb +0 -231
  444. data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
  445. data/lib/datadog/core/telemetry/v1/application.rb +0 -92
  446. data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
  447. data/lib/datadog/core/telemetry/v1/dependency.rb +0 -43
  448. data/lib/datadog/core/telemetry/v1/host.rb +0 -59
  449. data/lib/datadog/core/telemetry/v1/integration.rb +0 -64
  450. data/lib/datadog/core/telemetry/v1/product.rb +0 -36
  451. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -106
  452. data/lib/datadog/core/transport/config.rb +0 -58
  453. data/lib/datadog/core/transport/http/api.rb +0 -57
  454. data/lib/datadog/core/transport/http/client.rb +0 -45
  455. data/lib/datadog/core/transport/http/config.rb +0 -268
  456. data/lib/datadog/core/transport/http/negotiation.rb +0 -144
  457. data/lib/datadog/core/transport/http.rb +0 -169
  458. data/lib/datadog/core/utils/object_set.rb +0 -43
  459. data/lib/datadog/core/utils/string_table.rb +0 -47
  460. data/lib/datadog/profiling/backtrace_location.rb +0 -34
  461. data/lib/datadog/profiling/buffer.rb +0 -43
  462. data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
  463. data/lib/datadog/profiling/encoding/profile.rb +0 -41
  464. data/lib/datadog/profiling/event.rb +0 -15
  465. data/lib/datadog/profiling/events/stack.rb +0 -82
  466. data/lib/datadog/profiling/old_recorder.rb +0 -107
  467. data/lib/datadog/profiling/pprof/builder.rb +0 -125
  468. data/lib/datadog/profiling/pprof/converter.rb +0 -102
  469. data/lib/datadog/profiling/pprof/message_set.rb +0 -16
  470. data/lib/datadog/profiling/pprof/payload.rb +0 -20
  471. data/lib/datadog/profiling/pprof/pprof.proto +0 -212
  472. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
  473. data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
  474. data/lib/datadog/profiling/pprof/string_table.rb +0 -12
  475. data/lib/datadog/profiling/pprof/template.rb +0 -118
  476. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
  477. data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
  478. data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
  479. data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
  480. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
  481. data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
  482. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
  483. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
  484. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
  485. data/lib/ddtrace/transport/http/api/instance.rb +0 -35
  486. data/lib/ddtrace/transport/http/api/map.rb +0 -16
  487. data/lib/ddtrace/transport/http/api/spec.rb +0 -17
  488. data/lib/ddtrace/transport/http/api.rb +0 -39
  489. data/lib/ddtrace/transport/http/builder.rb +0 -176
  490. data/lib/ddtrace/transport/http/client.rb +0 -52
  491. data/lib/ddtrace/transport/http/env.rb +0 -58
  492. data/lib/ddtrace/transport/http/response.rb +0 -58
  493. data/lib/ddtrace/transport/http/statistics.rb +0 -43
  494. data/lib/ddtrace/transport/http/traces.rb +0 -144
  495. data/lib/ddtrace/transport/http.rb +0 -117
  496. data/lib/ddtrace/transport/io/client.rb +0 -85
  497. data/lib/ddtrace/transport/io/response.rb +0 -25
  498. data/lib/ddtrace/transport/io/traces.rb +0 -99
  499. data/lib/ddtrace/transport/io.rb +0 -28
  500. data/lib/ddtrace/transport/parcel.rb +0 -20
  501. data/lib/ddtrace/transport/request.rb +0 -15
  502. data/lib/ddtrace/transport/response.rb +0 -60
  503. data/lib/ddtrace/transport/serializable_trace.rb +0 -122
  504. data/lib/ddtrace/transport/statistics.rb +0 -75
  505. data/lib/ddtrace/transport/trace_formatter.rb +0 -198
  506. data/lib/ddtrace/transport/traces.rb +0 -216
  507. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
  508. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
  509. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
@@ -1,28 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
4
6
  module Propagation
5
7
  module SqlComment
6
8
  module Ext
7
- ENV_DBM_PROPAGATION_MODE = 'DD_DBM_PROPAGATION_MODE'.freeze
9
+ ENV_DBM_PROPAGATION_MODE = 'DD_DBM_PROPAGATION_MODE'
8
10
 
9
11
  # The default mode for sql comment propagation
10
- DISABLED = 'disabled'.freeze
12
+ DISABLED = 'disabled'
11
13
 
12
14
  # The `service` mode propagates service configuration
13
- SERVICE = 'service'.freeze
15
+ SERVICE = 'service'
14
16
 
15
17
  # The `full` mode propagates service configuration + trace context
16
- FULL = 'full'.freeze
18
+ FULL = 'full'
17
19
 
18
20
  # The value should be `true` when `full` mode
19
- TAG_DBM_TRACE_INJECTED = '_dd.dbm_trace_injected'.freeze
21
+ TAG_DBM_TRACE_INJECTED = '_dd.dbm_trace_injected'
20
22
 
21
- KEY_DATABASE_SERVICE = 'dddbs'.freeze
22
- KEY_ENVIRONMENT = 'dde'.freeze
23
- KEY_PARENT_SERVICE = 'ddps'.freeze
24
- KEY_VERSION = 'ddpv'.freeze
25
- KEY_TRACEPARENT = 'traceparent'.freeze
23
+ KEY_DATABASE_SERVICE = 'dddbs'
24
+ KEY_ENVIRONMENT = 'dde'
25
+ KEY_PARENT_SERVICE = 'ddps'
26
+ KEY_VERSION = 'ddpv'
27
+ KEY_TRACEPARENT = 'traceparent'
26
28
  end
27
29
  end
28
30
  end
@@ -21,7 +21,7 @@ module Datadog
21
21
  return sql unless mode.enabled?
22
22
 
23
23
  tags = {
24
- Ext::KEY_DATABASE_SERVICE => span_op.service,
24
+ Ext::KEY_DATABASE_SERVICE => span_op.get_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE) || span_op.service,
25
25
  Ext::KEY_ENVIRONMENT => datadog_configuration.env,
26
26
  Ext::KEY_PARENT_SERVICE => datadog_configuration.service,
27
27
  Ext::KEY_VERSION => datadog_configuration.version
@@ -11,24 +11,29 @@ module Datadog
11
11
  # Custom settings for the Qless integration
12
12
  # @public_api
13
13
  class Settings < Contrib::Configuration::Settings
14
+ # @!visibility private
14
15
  option :analytics_enabled do |o|
15
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
- o.lazy
16
+ o.type :bool
17
+ o.env Ext::ENV_ANALYTICS_ENABLED
18
+ o.default false
17
19
  end
18
20
 
19
21
  option :analytics_sample_rate do |o|
20
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
- o.lazy
22
+ o.type :float
23
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
24
+ o.default 1.0
22
25
  end
23
26
 
24
27
  option :tag_job_data do |o|
25
- o.default { env_to_bool(Ext::ENV_TAG_JOB_DATA, false) }
26
- o.lazy
28
+ o.type :bool
29
+ o.env Ext::ENV_TAG_JOB_DATA
30
+ o.default false
27
31
  end
28
32
 
29
33
  option :tag_job_tags do |o|
30
- o.default { env_to_bool(Ext::ENV_TAG_JOB_TAGS, false) }
31
- o.lazy
34
+ o.type :bool
35
+ o.env Ext::ENV_TAG_JOB_TAGS
36
+ o.default false
32
37
  end
33
38
 
34
39
  option :service_name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,18 +7,19 @@ module Datadog
5
7
  # Qless integration constants
6
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
7
9
  module Ext
8
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_QLESS_ANALYTICS_ENABLED'.freeze
9
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QLESS_ANALYTICS_SAMPLE_RATE'.freeze
10
- ENV_TAG_JOB_DATA = 'DD_QLESS_TAG_JOB_DATA'.freeze
11
- ENV_TAG_JOB_TAGS = 'DD_QLESS_TAG_JOB_TAGS'.freeze
12
- SERVICE_NAME = 'qless'.freeze
13
- SPAN_JOB = 'qless.job'.freeze
14
- TAG_JOB_ID = 'qless.job.id'.freeze
15
- TAG_JOB_DATA = 'qless.job.data'.freeze
16
- TAG_JOB_QUEUE = 'qless.job.queue'.freeze
17
- TAG_JOB_TAGS = 'qless.job.tags'.freeze
18
- TAG_COMPONENT = 'qless'.freeze
19
- TAG_OPERATION_JOB = 'job'.freeze
10
+ # @!visibility private
11
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_QLESS_ANALYTICS_ENABLED'
12
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QLESS_ANALYTICS_SAMPLE_RATE'
13
+ ENV_TAG_JOB_DATA = 'DD_QLESS_TAG_JOB_DATA'
14
+ ENV_TAG_JOB_TAGS = 'DD_QLESS_TAG_JOB_TAGS'
15
+ SERVICE_NAME = 'qless'
16
+ SPAN_JOB = 'qless.job'
17
+ TAG_JOB_ID = 'qless.job.id'
18
+ TAG_JOB_DATA = 'qless.job.data'
19
+ TAG_JOB_QUEUE = 'qless.job.queue'
20
+ TAG_JOB_TAGS = 'qless.job.tags'
21
+ TAG_COMPONENT = 'qless'
22
+ TAG_OPERATION_JOB = 'job'
20
23
  end
21
24
  end
22
25
  end
@@ -12,33 +12,43 @@ module Datadog
12
12
  # Default settings for the Que integration
13
13
  class Settings < Contrib::Configuration::Settings
14
14
  option :service_name
15
- option :distributed_tracing, default: true
15
+ option :distributed_tracing, default: true, type: :bool
16
16
 
17
17
  option :enabled do |o|
18
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
19
- o.lazy
18
+ o.type :bool
19
+ o.env Ext::ENV_ENABLED
20
+ o.default true
20
21
  end
21
22
 
23
+ # @!visibility private
22
24
  option :analytics_enabled do |o|
23
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
24
- o.lazy
25
+ o.type :bool
26
+ o.env Ext::ENV_ANALYTICS_ENABLED
27
+ o.default false
25
28
  end
26
29
 
27
30
  option :analytics_sample_rate do |o|
28
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
29
- o.lazy
31
+ o.type :float
32
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
33
+ o.default 1.0
30
34
  end
31
35
 
32
36
  option :tag_args do |o|
33
- o.default { env_to_bool(Ext::ENV_TAG_ARGS_ENABLED, false) }
34
- o.lazy
37
+ o.type :bool
38
+ o.env Ext::ENV_TAG_ARGS_ENABLED
39
+ o.default false
35
40
  end
36
41
 
37
42
  option :tag_data do |o|
38
- o.default { env_to_bool(Ext::ENV_TAG_DATA_ENABLED, false) }
39
- o.lazy
43
+ o.type :bool
44
+ o.env Ext::ENV_TAG_DATA_ENABLED
45
+ o.default false
46
+ end
47
+
48
+ option :error_handler do |o|
49
+ o.type :proc
50
+ o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
40
51
  end
41
- option :error_handler, default: Tracing::SpanOperation::Events::DEFAULT_ON_ERROR
42
52
  end
43
53
  end
44
54
  end
@@ -7,6 +7,7 @@ module Datadog
7
7
  # Que integration constants
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
+ # @!visibility private
10
11
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_QUE_ANALYTICS_ENABLED'
11
12
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE'
12
13
  ENV_ENABLED = 'DD_TRACE_QUE_ENABLED'
@@ -12,18 +12,22 @@ module Datadog
12
12
  # @public_api
13
13
  class Settings < Contrib::Configuration::Settings
14
14
  option :enabled do |o|
15
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
16
- o.lazy
15
+ o.type :bool
16
+ o.env Ext::ENV_ENABLED
17
+ o.default true
17
18
  end
18
19
 
20
+ # @!visibility private
19
21
  option :analytics_enabled do |o|
20
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
21
- o.lazy
22
+ o.type :bool
23
+ o.env Ext::ENV_ANALYTICS_ENABLED
24
+ o.default false
22
25
  end
23
26
 
24
27
  option :analytics_sample_rate do |o|
25
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
26
- o.lazy
28
+ o.type :float
29
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
30
+ o.default 1.0
27
31
  end
28
32
 
29
33
  option :service_name do |o|
@@ -33,7 +37,6 @@ module Datadog
33
37
  Ext::DEFAULT_PEER_SERVICE_NAME
34
38
  )
35
39
  end
36
- o.lazy
37
40
  end
38
41
  end
39
42
  end
@@ -40,11 +40,6 @@ module Datadog
40
40
  span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_MESSAGING_SYSTEM)
41
41
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
42
42
 
43
- # Tag as an external peer service
44
- if Contrib::SpanAttributeSchema.default_span_attribute_schema?
45
- span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, span.service)
46
- end
47
-
48
43
  # Set analytics sample rate
49
44
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
50
45
  Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
@@ -53,6 +48,11 @@ module Datadog
53
48
  # Measure service stats
54
49
  Contrib::Analytics.set_measured(span)
55
50
 
51
+ # Tag original global service name if not used
52
+ if span.service != Datadog.configuration.service
53
+ span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
54
+ end
55
+
56
56
  span.set_tag(Ext::TAG_TOPIC, payload[:topic])
57
57
  span.set_tag(Ext::TAG_CONSUMER, payload[:consumer_class])
58
58
  span.set_tag(Ext::TAG_PARTITION, payload[:partition])
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,24 +7,25 @@ module Datadog
5
7
  # Racecar integration constants
6
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
7
9
  module Ext
8
- ENV_ENABLED = 'DD_TRACE_RACECAR_ENABLED'.freeze
9
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACECAR_ANALYTICS_ENABLED'.freeze
10
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
11
- DEFAULT_PEER_SERVICE_NAME = 'racecar'.freeze
12
- SPAN_CONSUME = 'racecar.consume'.freeze
13
- SPAN_BATCH = 'racecar.batch'.freeze
14
- SPAN_MESSAGE = 'racecar.message'.freeze
15
- TAG_CONSUMER = 'kafka.consumer'.freeze
16
- TAG_FIRST_OFFSET = 'kafka.first_offset'.freeze
17
- TAG_MESSAGE_COUNT = 'kafka.message_count'.freeze
18
- TAG_OFFSET = 'kafka.offset'.freeze
19
- TAG_PARTITION = 'kafka.partition'.freeze
20
- TAG_TOPIC = 'kafka.topic'.freeze
21
- TAG_COMPONENT = 'racecar'.freeze
22
- TAG_OPERATION_CONSUME = 'consume'.freeze
23
- TAG_OPERATION_BATCH = 'batch'.freeze
24
- TAG_OPERATION_MESSAGE = 'message'.freeze
25
- TAG_MESSAGING_SYSTEM = 'kafka'.freeze
10
+ ENV_ENABLED = 'DD_TRACE_RACECAR_ENABLED'
11
+ # @!visibility private
12
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACECAR_ANALYTICS_ENABLED'
13
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACECAR_ANALYTICS_SAMPLE_RATE'
14
+ DEFAULT_PEER_SERVICE_NAME = 'racecar'
15
+ SPAN_CONSUME = 'racecar.consume'
16
+ SPAN_BATCH = 'racecar.batch'
17
+ SPAN_MESSAGE = 'racecar.message'
18
+ TAG_CONSUMER = 'kafka.consumer'
19
+ TAG_FIRST_OFFSET = 'kafka.first_offset'
20
+ TAG_MESSAGE_COUNT = 'kafka.message_count'
21
+ TAG_OFFSET = 'kafka.offset'
22
+ TAG_PARTITION = 'kafka.partition'
23
+ TAG_TOPIC = 'kafka.topic'
24
+ TAG_COMPONENT = 'racecar'
25
+ TAG_OPERATION_CONSUME = 'consume'
26
+ TAG_OPERATION_BATCH = 'batch'
27
+ TAG_OPERATION_MESSAGE = 'message'
28
+ TAG_MESSAGING_SYSTEM = 'kafka'
26
29
  end
27
30
  end
28
31
  end
@@ -17,30 +17,35 @@ module Datadog
17
17
  }.freeze
18
18
 
19
19
  option :enabled do |o|
20
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
21
- o.lazy
20
+ o.type :bool
21
+ o.env Ext::ENV_ENABLED
22
+ o.default true
22
23
  end
23
24
 
25
+ # @!visibility private
24
26
  option :analytics_enabled do |o|
25
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
26
- o.lazy
27
+ o.type :bool, nilable: true
28
+ o.env Ext::ENV_ANALYTICS_ENABLED
27
29
  end
28
30
 
29
31
  option :analytics_sample_rate do |o|
30
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
31
- o.lazy
32
+ o.type :float
33
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
34
+ o.default 1.0
32
35
  end
33
36
 
34
37
  option :application
35
- option :distributed_tracing, default: true
36
- option :headers, default: DEFAULT_HEADERS
37
- option :middleware_names, default: false
38
- option :quantize, default: {}
39
- option :request_queuing, default: false
38
+ option :distributed_tracing, default: true, type: :bool
39
+ option :headers, default: DEFAULT_HEADERS, type: :hash
40
+ option :middleware_names, default: false, type: :bool
41
+ option :quantize, default: {}, type: :hash
42
+ option :request_queuing do |o|
43
+ o.default false
44
+ end
40
45
 
41
46
  option :service_name
42
47
 
43
- option :web_service_name, default: Ext::DEFAULT_PEER_WEBSERVER_SERVICE_NAME
48
+ option :web_service_name, default: Ext::DEFAULT_PEER_WEBSERVER_SERVICE_NAME, type: :string
44
49
  end
45
50
  end
46
51
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,22 +7,23 @@ module Datadog
5
7
  # Rack integration constants
6
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
7
9
  module Ext
8
- ENV_ENABLED = 'DD_TRACE_RACK_ENABLED'.freeze
9
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACK_ANALYTICS_ENABLED'.freeze
10
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE'.freeze
11
- RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
12
- SPAN_HTTP_PROXY_REQUEST = 'http.proxy.request'.freeze
13
- SPAN_HTTP_PROXY_QUEUE = 'http.proxy.queue'.freeze
14
- SPAN_HTTP_SERVER_QUEUE = 'http_server.queue'.freeze
15
- SPAN_REQUEST = 'rack.request'.freeze
16
- TAG_COMPONENT = 'rack'.freeze
17
- TAG_COMPONENT_HTTP_PROXY = 'http_proxy'.freeze
18
- TAG_OPERATION_REQUEST = 'request'.freeze
19
- TAG_OPERATION_HTTP_PROXY_REQUEST = 'request'.freeze
20
- TAG_OPERATION_HTTP_PROXY_QUEUE = 'queue'.freeze
21
- TAG_OPERATION_HTTP_SERVER_QUEUE = 'queue'.freeze
22
- WEBSERVER_APP = 'webserver'.freeze
23
- DEFAULT_PEER_WEBSERVER_SERVICE_NAME = 'web-server'.freeze
10
+ ENV_ENABLED = 'DD_TRACE_RACK_ENABLED'
11
+ # @!visibility private
12
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACK_ANALYTICS_ENABLED'
13
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE'
14
+ RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'
15
+ SPAN_HTTP_PROXY_REQUEST = 'http.proxy.request'
16
+ SPAN_HTTP_PROXY_QUEUE = 'http.proxy.queue'
17
+ SPAN_HTTP_SERVER_QUEUE = 'http_server.queue'
18
+ SPAN_REQUEST = 'rack.request'
19
+ TAG_COMPONENT = 'rack'
20
+ TAG_COMPONENT_HTTP_PROXY = 'http_proxy'
21
+ TAG_OPERATION_REQUEST = 'request'
22
+ TAG_OPERATION_HTTP_PROXY_REQUEST = 'request'
23
+ TAG_OPERATION_HTTP_PROXY_QUEUE = 'queue'
24
+ TAG_OPERATION_HTTP_SERVER_QUEUE = 'queue'
25
+ WEBSERVER_APP = 'webserver'
26
+ DEFAULT_PEER_WEBSERVER_SERVICE_NAME = 'web-server'
24
27
  end
25
28
  end
26
29
  end
@@ -19,6 +19,9 @@ module Datadog
19
19
  @env[Header.to_rack_header(header_name)]
20
20
  end
21
21
 
22
+ # Allows this class to have a similar API to a {Hash}.
23
+ alias [] get
24
+
22
25
  # Tests whether a header with the given name exists in the environment.
23
26
  def key?(header_name)
24
27
  @env.key?(Header.to_rack_header(header_name))
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Contrib
6
+ module Rack
7
+ # Matches Rack-style headers with a matcher and sets matching headers into a span.
8
+ module HeaderTagging
9
+ def self.tag_request_headers(span, env, configuration)
10
+ # Wrap env in a case-insensitive Rack-style accessor.
11
+ headers = env.is_a?(Header::RequestHeaderCollection) ? env : Header::RequestHeaderCollection.new(env)
12
+
13
+ # Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
14
+ tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
15
+ Datadog.configuration.tracing.header_tags.request_tags(headers)
16
+ else
17
+ whitelist = configuration[:headers][:request] || []
18
+ whitelist.each_with_object({}) do |header, result|
19
+ header_value = headers.get(header)
20
+ unless header_value.nil?
21
+ header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
22
+ result[header_tag] = header_value
23
+ end
24
+ end
25
+ end
26
+
27
+ span.set_tags(tags)
28
+ end
29
+
30
+ def self.tag_response_headers(span, headers, configuration)
31
+ headers = Core::Utils::Hash::CaseInsensitiveWrapper.new(headers) # Make header access case-insensitive
32
+
33
+ # Use global DD_TRACE_HEADER_TAGS if integration-level configuration is not provided
34
+ tags = if configuration.using_default?(:headers) && !Datadog.configuration.tracing.using_default?(:header_tags)
35
+ Datadog.configuration.tracing.header_tags.response_tags(headers)
36
+ else
37
+ whitelist = configuration[:headers][:response] || []
38
+ whitelist.each_with_object({}) do |header, result|
39
+ header_value = headers[header]
40
+
41
+ next if header_value.nil?
42
+
43
+ header_tag = Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)
44
+
45
+ # Maintain the value format between Rack 2 and 3
46
+ #
47
+ # Rack 2.x => { 'foo' => 'bar,baz' }
48
+ # Rack 3.x => { 'foo' => ['bar', 'baz'] }
49
+ result[header_tag] = if header_value.is_a? Array
50
+ header_value.join(',')
51
+ else
52
+ header_value
53
+ end
54
+ end
55
+ end
56
+
57
+ span.set_tags(tags)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,6 +1,8 @@
1
1
  require 'date'
2
2
 
3
3
  require_relative '../../../core/environment/variable_helpers'
4
+ require_relative '../../../core/backport'
5
+ require_relative '../../../core/remote/tie/tracing'
4
6
  require_relative '../../client_ip'
5
7
  require_relative '../../metadata/ext'
6
8
  require_relative '../../propagation/http'
@@ -8,6 +10,7 @@ require_relative '../analytics'
8
10
  require_relative '../utils/quantization/http'
9
11
  require_relative 'ext'
10
12
  require_relative 'header_collection'
13
+ require_relative 'header_tagging'
11
14
  require_relative 'request_queue'
12
15
 
13
16
  module Datadog
@@ -69,6 +72,8 @@ module Datadog
69
72
 
70
73
  return @app.call(env) if previous_request_span
71
74
 
75
+ boot = Datadog::Core::Remote::Tie.boot
76
+
72
77
  # Extract distributed tracing context before creating any spans,
73
78
  # so that all spans will be added to the distributed trace.
74
79
  if configuration[:distributed_tracing]
@@ -87,9 +92,15 @@ module Datadog
87
92
  # we must ensure that the span `resource` is set later
88
93
  request_span = Tracing.trace(Ext::SPAN_REQUEST, **trace_options)
89
94
  request_span.resource = nil
90
- request_trace = Tracing.active_trace
95
+
96
+ # When tracing and distributed tracing are both disabled, `.active_trace` will be `nil`,
97
+ # Return a null object to continue operation
98
+ request_trace = Tracing.active_trace || TraceOperation.new
99
+
91
100
  env[Ext::RACK_ENV_REQUEST_SPAN] = request_span
92
101
 
102
+ Datadog::Core::Remote::Tie::Tracing.tag(boot, request_span)
103
+
93
104
  # Copy the original env, before the rest of the stack executes.
94
105
  # Values may change; we want values before that happens.
95
106
  original_env = env.dup
@@ -137,8 +148,6 @@ module Datadog
137
148
  # rubocop:disable Metrics/MethodLength
138
149
  def set_request_tags!(trace, request_span, env, status, headers, response, original_env)
139
150
  request_header_collection = Header::RequestHeaderCollection.new(env)
140
- request_headers_tags = parse_request_headers(request_header_collection)
141
- response_headers_tags = parse_response_headers(headers || {})
142
151
 
143
152
  # Since it could be mutated, it would be more accurate to fetch from the original env,
144
153
  # e.g. ActionDispatch::ShowExceptions middleware with Rails exceptions_app configuration
@@ -227,15 +236,8 @@ module Datadog
227
236
  request_span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_USER_AGENT, user_agent)
228
237
  end
229
238
 
230
- # Request headers
231
- request_headers_tags.each do |name, value|
232
- request_span.set_tag(name, value) if request_span.get_tag(name).nil?
233
- end
234
-
235
- # Response headers
236
- response_headers_tags.each do |name, value|
237
- request_span.set_tag(name, value) if request_span.get_tag(name).nil?
238
- end
239
+ HeaderTagging.tag_request_headers(request_span, request_header_collection, configuration)
240
+ HeaderTagging.tag_response_headers(request_span, headers, configuration) if headers
239
241
 
240
242
  # detect if the status code is a 5xx and flag the request span as an error
241
243
  # unless it has been already set by the underlying framework
@@ -253,19 +255,12 @@ module Datadog
253
255
  end
254
256
 
255
257
  def trace_http_server(span_name, start_time:)
256
- span = Tracing.trace(
258
+ Tracing.trace(
257
259
  span_name,
258
260
  span_type: Tracing::Metadata::Ext::HTTP::TYPE_PROXY,
259
261
  start_time: start_time,
260
262
  service: configuration[:web_service_name]
261
263
  )
262
-
263
- # Set peer service (so its not believed to belong to this app)
264
- if Contrib::SpanAttributeSchema.default_span_attribute_schema?
265
- span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, configuration[:web_service_name])
266
- end
267
-
268
- span
269
264
  end
270
265
 
271
266
  def parse_url(env, original_env)
@@ -304,7 +299,7 @@ module Datadog
304
299
  else
305
300
  # normally REQUEST_URI starts at the path, but it
306
301
  # might contain the full URL in some cases (e.g WEBrick)
307
- request_uri.sub(/^#{base_url}/, '')
302
+ Datadog::Core::BackportFrom25.string_delete_prefix(request_uri, base_url)
308
303
  end
309
304
 
310
305
  base_url + fullpath
@@ -313,35 +308,6 @@ module Datadog
313
308
  def parse_user_agent_header(headers)
314
309
  headers.get(Tracing::Metadata::Ext::HTTP::HEADER_USER_AGENT)
315
310
  end
316
-
317
- def parse_request_headers(headers)
318
- whitelist = configuration[:headers][:request] || []
319
- whitelist.each_with_object({}) do |header, result|
320
- header_value = headers.get(header)
321
- unless header_value.nil?
322
- header_tag = Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)
323
- result[header_tag] = header_value
324
- end
325
- end
326
- end
327
-
328
- def parse_response_headers(headers)
329
- {}.tap do |result|
330
- whitelist = configuration[:headers][:response] || []
331
- whitelist.each do |header|
332
- if headers.key?(header)
333
- result[Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[header]
334
- else
335
- # Try a case-insensitive lookup
336
- uppercased_header = header.to_s.upcase
337
- matching_header = headers.keys.find { |h| h.upcase == uppercased_header }
338
- if matching_header
339
- result[Tracing::Metadata::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header]
340
- end
341
- end
342
- end
343
- end
344
- end
345
311
  end
346
312
  end
347
313
  end
@@ -1,5 +1,3 @@
1
- require_relative '../auto_instrument'
2
-
3
1
  # Railtie to include AutoInstrumentation in rails loading
4
2
  class DatadogAutoInstrumentRailtie < Rails::Railtie
5
3
  # we want to load before config initializers so that any user supplied config