ddtrace 1.12.1 → 1.18.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 (448) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +388 -10
  3. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +3 -5
  4. data/ext/ddtrace_profiling_native_extension/clock_id.h +0 -3
  5. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +3 -22
  6. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
  7. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +41 -6
  8. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +3 -0
  9. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +76 -24
  10. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +1 -1
  11. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +292 -27
  12. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +1 -1
  13. data/ext/ddtrace_profiling_native_extension/extconf.rb +40 -10
  14. data/ext/ddtrace_profiling_native_extension/http_transport.c +48 -16
  15. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +42 -0
  16. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +6 -0
  17. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +1 -1
  18. data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
  19. data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
  20. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +136 -32
  21. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +12 -0
  22. data/ext/ddtrace_profiling_native_extension/profiling.c +1 -2
  23. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +81 -50
  24. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +13 -3
  25. data/ext/ddtrace_profiling_native_extension/time_helpers.c +40 -4
  26. data/ext/ddtrace_profiling_native_extension/time_helpers.h +14 -0
  27. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  28. data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
  29. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  30. data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
  31. data/lib/datadog/appsec/assets.rb +8 -0
  32. data/lib/datadog/appsec/component.rb +21 -2
  33. data/lib/datadog/appsec/configuration/settings.rb +167 -189
  34. data/lib/datadog/appsec/configuration.rb +0 -79
  35. data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
  36. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  37. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  38. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  39. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  40. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  41. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  42. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  43. data/lib/datadog/appsec/contrib/devise/tracking.rb +49 -0
  44. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
  45. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -2
  46. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
  47. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +3 -8
  48. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +3 -6
  49. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +3 -6
  50. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
  51. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +36 -17
  52. data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
  53. data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
  54. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
  55. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -11
  56. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +3 -6
  57. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
  58. data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
  59. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
  60. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
  61. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +3 -6
  62. data/lib/datadog/appsec/event.rb +106 -50
  63. data/lib/datadog/appsec/extensions.rb +1 -130
  64. data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
  65. data/lib/datadog/appsec/monitor/reactive/set_user.rb +3 -6
  66. data/lib/datadog/appsec/processor/actions.rb +49 -0
  67. data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
  68. data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
  69. data/lib/datadog/appsec/processor.rb +35 -7
  70. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  71. data/lib/datadog/appsec/remote.rb +17 -11
  72. data/lib/datadog/appsec/response.rb +82 -4
  73. data/lib/datadog/appsec/sample_rate.rb +21 -0
  74. data/lib/datadog/appsec.rb +3 -4
  75. data/lib/datadog/core/backport.rb +51 -0
  76. data/lib/datadog/core/configuration/agent_settings_resolver.rb +38 -29
  77. data/lib/datadog/core/configuration/base.rb +6 -16
  78. data/lib/datadog/core/configuration/components.rb +15 -3
  79. data/lib/datadog/core/configuration/ext.rb +28 -5
  80. data/lib/datadog/core/configuration/option.rb +269 -21
  81. data/lib/datadog/core/configuration/option_definition.rb +73 -32
  82. data/lib/datadog/core/configuration/options.rb +27 -15
  83. data/lib/datadog/core/configuration/settings.rb +182 -102
  84. data/lib/datadog/core/configuration.rb +4 -0
  85. data/lib/datadog/core/diagnostics/environment_logger.rb +130 -234
  86. data/lib/datadog/core/environment/execution.rb +103 -0
  87. data/lib/datadog/core/environment/ext.rb +13 -11
  88. data/lib/datadog/core/environment/variable_helpers.rb +0 -69
  89. data/lib/datadog/core/environment/yjit.rb +58 -0
  90. data/lib/datadog/core/error.rb +1 -0
  91. data/lib/datadog/core/git/ext.rb +26 -22
  92. data/lib/datadog/core/logging/ext.rb +3 -1
  93. data/lib/datadog/core/metrics/ext.rb +7 -5
  94. data/lib/datadog/core/remote/client/capabilities.rb +6 -1
  95. data/lib/datadog/core/remote/client.rb +3 -0
  96. data/lib/datadog/core/remote/component.rb +27 -36
  97. data/lib/datadog/core/remote/configuration/content.rb +28 -1
  98. data/lib/datadog/core/remote/configuration/repository.rb +3 -1
  99. data/lib/datadog/core/remote/ext.rb +1 -1
  100. data/lib/datadog/core/remote/negotiation.rb +19 -6
  101. data/lib/datadog/core/remote/transport/config.rb +60 -0
  102. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  103. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  104. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  105. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  106. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  107. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  108. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  109. data/lib/datadog/core/remote/transport/http.rb +179 -0
  110. data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
  111. data/lib/datadog/core/remote/worker.rb +4 -1
  112. data/lib/datadog/core/runtime/ext.rb +22 -12
  113. data/lib/datadog/core/runtime/metrics.rb +43 -0
  114. data/lib/datadog/core/telemetry/client.rb +12 -2
  115. data/lib/datadog/core/telemetry/collector.rb +13 -4
  116. data/lib/datadog/core/telemetry/emitter.rb +4 -2
  117. data/lib/datadog/core/telemetry/event.rb +19 -4
  118. data/lib/datadog/core/telemetry/ext.rb +4 -1
  119. data/lib/datadog/core/telemetry/heartbeat.rb +2 -4
  120. data/lib/datadog/core/telemetry/http/ext.rb +10 -8
  121. data/lib/datadog/core/telemetry/http/transport.rb +2 -0
  122. data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
  123. data/lib/datadog/core/telemetry/v2/request.rb +29 -0
  124. data/lib/datadog/core/transport/ext.rb +47 -0
  125. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  126. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  127. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  128. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  129. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  130. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  131. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  132. data/lib/datadog/core/transport/http/env.rb +62 -0
  133. data/lib/datadog/core/transport/http/response.rb +60 -0
  134. data/lib/datadog/core/transport/parcel.rb +22 -0
  135. data/lib/datadog/core/transport/request.rb +17 -0
  136. data/lib/datadog/core/transport/response.rb +64 -0
  137. data/lib/datadog/core/utils/duration.rb +52 -0
  138. data/lib/datadog/core/utils/hash.rb +47 -0
  139. data/lib/datadog/core/utils/network.rb +1 -1
  140. data/lib/datadog/core/utils/safe_dup.rb +27 -20
  141. data/lib/datadog/core/utils.rb +1 -1
  142. data/lib/datadog/core/workers/async.rb +3 -2
  143. data/lib/datadog/core/workers/polling.rb +2 -2
  144. data/lib/datadog/kit/appsec/events.rb +139 -89
  145. data/lib/datadog/kit/enable_core_dumps.rb +5 -6
  146. data/lib/datadog/kit/identity.rb +80 -65
  147. data/lib/datadog/opentelemetry/api/context.rb +10 -3
  148. data/lib/datadog/opentelemetry/sdk/propagator.rb +2 -1
  149. data/lib/datadog/opentelemetry/sdk/span_processor.rb +48 -5
  150. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  151. data/lib/datadog/opentelemetry/trace.rb +58 -0
  152. data/lib/datadog/opentelemetry.rb +1 -0
  153. data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
  154. data/lib/datadog/opentracer.rb +9 -0
  155. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +16 -17
  156. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
  157. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  158. data/lib/datadog/profiling/component.rb +69 -94
  159. data/lib/datadog/profiling/diagnostics/environment_logger.rb +39 -0
  160. data/lib/datadog/profiling/exporter.rb +5 -1
  161. data/lib/datadog/profiling/ext.rb +0 -12
  162. data/lib/datadog/profiling/flush.rb +7 -5
  163. data/lib/datadog/profiling/http_transport.rb +19 -6
  164. data/lib/datadog/profiling/load_native_extension.rb +7 -1
  165. data/lib/datadog/profiling/native_extension.rb +0 -21
  166. data/lib/datadog/profiling/profiler.rb +36 -13
  167. data/lib/datadog/profiling/scheduler.rb +16 -9
  168. data/lib/datadog/profiling.rb +16 -78
  169. data/lib/datadog/tracing/component.rb +70 -11
  170. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  171. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  172. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  173. data/lib/datadog/tracing/configuration/ext.rb +40 -32
  174. data/lib/datadog/tracing/configuration/http.rb +74 -0
  175. data/lib/datadog/tracing/configuration/settings.rb +134 -98
  176. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +9 -6
  177. data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -18
  178. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +9 -6
  179. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -18
  180. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +9 -7
  181. data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -8
  182. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +9 -6
  183. data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -10
  184. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +13 -7
  185. data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -23
  186. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
  187. data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
  188. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +9 -6
  189. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -10
  190. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +18 -11
  191. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +9 -7
  192. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
  193. data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -15
  194. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
  195. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -202
  196. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
  197. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +9 -7
  198. data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -16
  199. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +14 -7
  200. data/lib/datadog/tracing/contrib/aws/ext.rb +37 -24
  201. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
  202. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
  203. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
  204. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
  205. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +3 -10
  206. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -1
  207. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +8 -1
  208. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  209. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  210. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +20 -7
  211. data/lib/datadog/tracing/contrib/dalli/ext.rb +26 -11
  212. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
  213. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +13 -7
  214. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -14
  215. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +14 -7
  216. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -15
  217. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
  218. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +16 -9
  219. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
  220. data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
  221. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
  222. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +19 -10
  223. data/lib/datadog/tracing/contrib/excon/ext.rb +16 -8
  224. data/lib/datadog/tracing/contrib/excon/middleware.rb +25 -5
  225. data/lib/datadog/tracing/contrib/ext.rb +26 -1
  226. data/lib/datadog/tracing/contrib/extensions.rb +32 -0
  227. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +20 -10
  228. data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
  229. data/lib/datadog/tracing/contrib/faraday/middleware.rb +21 -5
  230. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +8 -6
  231. data/lib/datadog/tracing/contrib/grape/ext.rb +16 -14
  232. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +8 -6
  233. data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -5
  234. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +39 -9
  235. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +39 -20
  236. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +37 -18
  237. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
  238. data/lib/datadog/tracing/contrib/grpc/ext.rb +16 -13
  239. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  240. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
  241. data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
  242. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +5 -8
  243. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +33 -11
  244. data/lib/datadog/tracing/contrib/http/ext.rb +16 -9
  245. data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
  246. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +33 -11
  247. data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -9
  248. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
  249. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +33 -11
  250. data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -9
  251. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
  252. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +9 -6
  253. data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -39
  254. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
  255. data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
  256. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -17
  257. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +14 -7
  258. data/lib/datadog/tracing/contrib/mongodb/ext.rb +20 -16
  259. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
  260. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -14
  261. data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -10
  262. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -6
  263. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +52 -0
  264. data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -0
  265. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  266. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  267. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  268. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +22 -14
  269. data/lib/datadog/tracing/contrib/pg/ext.rb +22 -19
  270. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +38 -5
  271. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +14 -7
  272. data/lib/datadog/tracing/contrib/presto/ext.rb +25 -20
  273. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +14 -5
  274. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
  275. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  276. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +12 -8
  277. data/lib/datadog/tracing/contrib/qless/ext.rb +14 -12
  278. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +21 -12
  279. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +9 -7
  280. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
  281. data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
  282. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +16 -12
  283. data/lib/datadog/tracing/contrib/rack/ext.rb +18 -16
  284. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
  285. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  286. data/lib/datadog/tracing/contrib/rack/middlewares.rb +8 -49
  287. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +19 -15
  288. data/lib/datadog/tracing/contrib/rails/ext.rb +7 -5
  289. data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -10
  290. data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
  291. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
  292. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +13 -10
  293. data/lib/datadog/tracing/contrib/rake/ext.rb +14 -12
  294. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +17 -9
  295. data/lib/datadog/tracing/contrib/redis/ext.rb +22 -15
  296. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +3 -38
  297. data/lib/datadog/tracing/contrib/redis/tags.rb +16 -7
  298. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
  299. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +13 -7
  300. data/lib/datadog/tracing/contrib/resque/ext.rb +9 -7
  301. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +16 -9
  302. data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
  303. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
  304. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +9 -6
  305. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
  306. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
  307. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -20
  308. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +9 -6
  309. data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -8
  310. data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
  311. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +14 -8
  312. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
  313. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +18 -11
  314. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -30
  315. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +11 -9
  316. data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
  317. data/lib/datadog/tracing/contrib/sinatra/ext.rb +21 -19
  318. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
  319. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +14 -8
  320. data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -0
  321. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
  322. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
  323. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +9 -6
  324. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +9 -6
  325. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -13
  326. data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
  327. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +11 -11
  328. data/lib/datadog/tracing/contrib.rb +1 -0
  329. data/lib/datadog/tracing/correlation.rb +29 -12
  330. data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
  331. data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
  332. data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
  333. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  334. data/lib/datadog/tracing/distributed/datadog.rb +0 -1
  335. data/lib/datadog/tracing/distributed/propagation.rb +35 -34
  336. data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
  337. data/lib/datadog/tracing/metadata/ext.rb +9 -6
  338. data/lib/datadog/tracing/metadata/tagging.rb +3 -3
  339. data/lib/datadog/tracing/remote.rb +78 -0
  340. data/lib/datadog/tracing/sampling/rule_sampler.rb +29 -0
  341. data/lib/datadog/tracing/span_operation.rb +3 -15
  342. data/lib/datadog/tracing/sync_writer.rb +3 -3
  343. data/lib/datadog/tracing/trace_digest.rb +31 -0
  344. data/lib/datadog/tracing/trace_operation.rb +16 -3
  345. data/lib/datadog/tracing/trace_segment.rb +5 -2
  346. data/lib/datadog/tracing/tracer.rb +12 -1
  347. data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
  348. data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
  349. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  350. data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
  351. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  352. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  353. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  354. data/lib/datadog/tracing/transport/http.rb +124 -0
  355. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  356. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  357. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  358. data/lib/datadog/tracing/transport/io.rb +30 -0
  359. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  360. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  361. data/lib/datadog/tracing/transport/trace_formatter.rb +209 -0
  362. data/lib/datadog/tracing/transport/traces.rb +224 -0
  363. data/lib/datadog/tracing/workers/trace_writer.rb +6 -4
  364. data/lib/datadog/tracing/workers.rb +4 -2
  365. data/lib/datadog/tracing/writer.rb +5 -2
  366. data/lib/ddtrace/transport/ext.rb +22 -14
  367. data/lib/ddtrace/version.rb +9 -12
  368. data/lib/ddtrace.rb +1 -1
  369. metadata +101 -93
  370. data/lib/datadog/ci/configuration/components.rb +0 -32
  371. data/lib/datadog/ci/configuration/settings.rb +0 -53
  372. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
  373. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -20
  374. data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
  375. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
  376. data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
  377. data/lib/datadog/ci/contrib/cucumber/patcher.rb +0 -27
  378. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
  379. data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
  380. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -19
  381. data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
  382. data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
  383. data/lib/datadog/ci/ext/app_types.rb +0 -9
  384. data/lib/datadog/ci/ext/environment.rb +0 -575
  385. data/lib/datadog/ci/ext/settings.rb +0 -10
  386. data/lib/datadog/ci/ext/test.rb +0 -35
  387. data/lib/datadog/ci/extensions.rb +0 -19
  388. data/lib/datadog/ci/flush.rb +0 -38
  389. data/lib/datadog/ci/test.rb +0 -81
  390. data/lib/datadog/ci.rb +0 -20
  391. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
  392. data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
  393. data/lib/datadog/core/configuration/option_set.rb +0 -10
  394. data/lib/datadog/core/transport/config.rb +0 -58
  395. data/lib/datadog/core/transport/http/api.rb +0 -57
  396. data/lib/datadog/core/transport/http/client.rb +0 -45
  397. data/lib/datadog/core/transport/http/config.rb +0 -268
  398. data/lib/datadog/core/transport/http/negotiation.rb +0 -144
  399. data/lib/datadog/core/transport/http.rb +0 -169
  400. data/lib/datadog/core/utils/object_set.rb +0 -43
  401. data/lib/datadog/core/utils/string_table.rb +0 -47
  402. data/lib/datadog/profiling/backtrace_location.rb +0 -34
  403. data/lib/datadog/profiling/buffer.rb +0 -43
  404. data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
  405. data/lib/datadog/profiling/encoding/profile.rb +0 -41
  406. data/lib/datadog/profiling/event.rb +0 -15
  407. data/lib/datadog/profiling/events/stack.rb +0 -82
  408. data/lib/datadog/profiling/old_recorder.rb +0 -107
  409. data/lib/datadog/profiling/pprof/builder.rb +0 -125
  410. data/lib/datadog/profiling/pprof/converter.rb +0 -102
  411. data/lib/datadog/profiling/pprof/message_set.rb +0 -16
  412. data/lib/datadog/profiling/pprof/payload.rb +0 -20
  413. data/lib/datadog/profiling/pprof/pprof.proto +0 -212
  414. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
  415. data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
  416. data/lib/datadog/profiling/pprof/string_table.rb +0 -12
  417. data/lib/datadog/profiling/pprof/template.rb +0 -118
  418. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
  419. data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
  420. data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
  421. data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
  422. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
  423. data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
  424. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
  425. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
  426. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
  427. data/lib/ddtrace/transport/http/api/instance.rb +0 -35
  428. data/lib/ddtrace/transport/http/api/map.rb +0 -16
  429. data/lib/ddtrace/transport/http/api/spec.rb +0 -17
  430. data/lib/ddtrace/transport/http/api.rb +0 -39
  431. data/lib/ddtrace/transport/http/builder.rb +0 -176
  432. data/lib/ddtrace/transport/http/client.rb +0 -52
  433. data/lib/ddtrace/transport/http/env.rb +0 -58
  434. data/lib/ddtrace/transport/http/response.rb +0 -58
  435. data/lib/ddtrace/transport/http/statistics.rb +0 -43
  436. data/lib/ddtrace/transport/http/traces.rb +0 -144
  437. data/lib/ddtrace/transport/http.rb +0 -117
  438. data/lib/ddtrace/transport/io/client.rb +0 -85
  439. data/lib/ddtrace/transport/io/response.rb +0 -25
  440. data/lib/ddtrace/transport/io/traces.rb +0 -99
  441. data/lib/ddtrace/transport/io.rb +0 -28
  442. data/lib/ddtrace/transport/parcel.rb +0 -20
  443. data/lib/ddtrace/transport/request.rb +0 -15
  444. data/lib/ddtrace/transport/response.rb +0 -60
  445. data/lib/ddtrace/transport/serializable_trace.rb +0 -122
  446. data/lib/ddtrace/transport/statistics.rb +0 -75
  447. data/lib/ddtrace/transport/trace_formatter.rb +0 -198
  448. data/lib/ddtrace/transport/traces.rb +0 -216
@@ -34,16 +34,23 @@ module Datadog
34
34
  def datadog_tag_request(uri, span)
35
35
  span.resource = method.to_s.upcase
36
36
 
37
+ if datadog_configuration[:peer_service]
38
+ span.set_tag(
39
+ Tracing::Metadata::Ext::TAG_PEER_SERVICE,
40
+ datadog_configuration[:peer_service]
41
+ )
42
+ end
43
+
44
+ # Tag original global service name if not used
45
+ if span.service != Datadog.configuration.service
46
+ span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
47
+ end
48
+
37
49
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
38
50
 
39
51
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
40
52
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
41
53
 
42
- # Tag as an external peer service
43
- if Contrib::SpanAttributeSchema.default_span_attribute_schema?
44
- span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, span.service)
45
- end
46
-
47
54
  span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, uri.host)
48
55
 
49
56
  # Set analytics sample rate
@@ -53,6 +60,13 @@ module Datadog
53
60
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, method.to_s.upcase)
54
61
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, uri.host)
55
62
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, uri.port)
63
+ span.set_tags(
64
+ Datadog.configuration.tracing.header_tags.request_tags(
65
+ Core::Utils::Hash::CaseInsensitiveWrapper.new(processed_headers)
66
+ )
67
+ )
68
+
69
+ Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
56
70
  end
57
71
 
58
72
  def datadog_trace_request(uri)
@@ -71,6 +85,12 @@ module Datadog
71
85
  # If so, add additional tags.
72
86
  if response.is_a?(::RestClient::Response)
73
87
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.code)
88
+
89
+ span.set_tags(
90
+ Datadog.configuration.tracing.header_tags.response_tags(
91
+ Core::Utils::Hash::CaseInsensitiveWrapper.new(response.net_http_res.to_hash)
92
+ )
93
+ )
74
94
  end
75
95
  end
76
96
  rescue ::RestClient::ExceptionWithResponse => e
@@ -11,18 +11,21 @@ module Datadog
11
11
  # Custom settings for the Roda integration
12
12
  class Settings < Contrib::Configuration::Settings
13
13
  option :enabled do |o|
14
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
15
- o.lazy
14
+ o.type :bool
15
+ o.env Ext::ENV_ENABLED
16
+ o.default true
16
17
  end
17
18
 
18
19
  option :analytics_enabled do |o|
19
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
20
- o.lazy
20
+ o.type :bool
21
+ o.env Ext::ENV_ANALYTICS_ENABLED
22
+ o.default false
21
23
  end
22
24
 
23
25
  option :analytics_sample_rate do |o|
24
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
25
- o.lazy
26
+ o.type :float
27
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
28
+ o.default 1.0
26
29
  end
27
30
 
28
31
  option :service_name
@@ -12,8 +12,9 @@ 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
  end
19
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,7 +7,7 @@ module Datadog
5
7
  # SemanticLogger 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_SEMANTIC_LOGGER_ENABLED'.freeze
10
+ ENV_ENABLED = 'DD_TRACE_SEMANTIC_LOGGER_ENABLED'
9
11
  end
10
12
  end
11
13
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../../core/logging/ext'
4
-
5
3
  module Datadog
6
4
  module Tracing
7
5
  module Contrib
@@ -15,6 +13,7 @@ module Datadog
15
13
  # Instance methods for configuration
16
14
  module InstanceMethods
17
15
  def log(log, message = nil, progname = nil, &block)
16
+ return super unless Datadog.configuration.tracing.log_injection
18
17
  return super unless Datadog.configuration.tracing[:semantic_logger].enabled
19
18
  return super unless log.is_a?(::SemanticLogger::Log)
20
19
 
@@ -22,25 +21,10 @@ module Datadog
22
21
 
23
22
  # Retrieves trace information for current thread
24
23
  correlation = Tracing.correlation
25
- # merge original lambda with datadog context
26
-
27
- datadog_trace_log_hash = {
28
- # Adds IDs as tags to log output
29
- dd: {
30
- # To preserve precision during JSON serialization, use strings for large numbers
31
- trace_id: correlation.trace_id.to_s,
32
- span_id: correlation.span_id.to_s,
33
- env: correlation.env.to_s,
34
- service: correlation.service.to_s,
35
- version: correlation.version.to_s
36
- },
37
- ddsource: Core::Logging::Ext::DD_SOURCE
38
- }
39
24
 
40
- # # if the user already has conflicting log_tags
41
- # # we want them to clobber ours, because we should allow them to override
42
- # # if needed.
43
- log.named_tags = datadog_trace_log_hash.merge(original_named_tags)
25
+ # if the user already has conflicting log_tags
26
+ # we want them to clobber ours, because we should allow them to override if needed.
27
+ log.named_tags = correlation.to_h.merge(original_named_tags)
44
28
  super(log, message, progname, &block)
45
29
  end
46
30
  end
@@ -12,18 +12,21 @@ 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
 
19
20
  option :analytics_enabled do |o|
20
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
21
- o.lazy
21
+ o.type :bool
22
+ o.env Ext::ENV_ANALYTICS_ENABLED
23
+ o.default false
22
24
  end
23
25
 
24
26
  option :analytics_sample_rate do |o|
25
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
26
- o.lazy
27
+ o.type :float
28
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
29
+ o.default 1.0
27
30
  end
28
31
  end
29
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,14 +7,14 @@ module Datadog
5
7
  # Sequel 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_SEQUEL_ENABLED'.freeze
9
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_SEQUEL_ANALYTICS_ENABLED'.freeze
10
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SEQUEL_ANALYTICS_SAMPLE_RATE'.freeze
11
- SPAN_QUERY = 'sequel.query'.freeze
12
- TAG_DB_VENDOR = 'sequel.db.vendor'.freeze
13
- TAG_PREPARED_NAME = 'sequel.prepared.name'.freeze
14
- TAG_COMPONENT = 'sequel'.freeze
15
- TAG_OPERATION_QUERY = 'query'.freeze
10
+ ENV_ENABLED = 'DD_TRACE_SEQUEL_ENABLED'
11
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SEQUEL_ANALYTICS_ENABLED'
12
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SEQUEL_ANALYTICS_SAMPLE_RATE'
13
+ SPAN_QUERY = 'sequel.query'
14
+ TAG_DB_VENDOR = 'sequel.db.vendor'
15
+ TAG_PREPARED_NAME = 'sequel.prepared.name'
16
+ TAG_COMPONENT = 'sequel'
17
+ TAG_OPERATION_QUERY = 'query'
16
18
  end
17
19
  end
18
20
  end
@@ -49,19 +49,19 @@ module Datadog
49
49
  end
50
50
 
51
51
  def set_common_tags(span, db)
52
+ # Tag original global service name if not used
53
+ if span.service != Datadog.configuration.service
54
+ span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
55
+ end
56
+
52
57
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
53
58
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_QUERY)
54
59
 
55
- # Tag as an external peer service
56
- if Contrib::SpanAttributeSchema.default_span_attribute_schema?
57
- span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, span.service)
58
- end
59
-
60
60
  # TODO: Extract host for Sequel with JDBC. The easiest way seem to be through
61
61
  # TODO: the database URI. Unfortunately, JDBC URIs do not work with `URI.parse`.
62
62
  # host, _port = extract_host_port_from_uri(db.uri)
63
- # span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, host)
64
- span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, db.opts[:host]) if db.opts[:host]
63
+ # span.set_tag(Tracing::Metadata::Ext::TAG_DESTINATION_NAME, host)
64
+ span.set_tag(Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME, db.opts[:host]) if db.opts[:host]
65
65
 
66
66
  # Set analytics sample rate
67
67
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
@@ -13,23 +13,29 @@ module Datadog
13
13
  # @public_api
14
14
  class Settings < Contrib::Configuration::Settings
15
15
  option :enabled do |o|
16
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
17
- o.lazy
16
+ o.type :bool
17
+ o.env Ext::ENV_ENABLED
18
+ o.default true
18
19
  end
19
20
 
20
21
  option :analytics_enabled do |o|
21
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
22
- o.lazy
22
+ o.type :bool
23
+ o.env Ext::ENV_ANALYTICS_ENABLED
24
+ o.default false
23
25
  end
24
26
 
25
27
  option :analytics_sample_rate do |o|
26
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
27
- o.lazy
28
+ o.type :float
29
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
30
+ o.default 1.0
28
31
  end
29
32
 
30
33
  option :service_name
31
- option :error_handler, default: Tracing::SpanOperation::Events::DEFAULT_ON_ERROR
32
- option :tag_body, default: false
34
+ option :error_handler do |o|
35
+ o.type :proc
36
+ o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
37
+ end
38
+ option :tag_body, default: false, type: :bool
33
39
  end
34
40
  end
35
41
  end
@@ -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,18 @@ module Datadog
5
7
  # Shoryuken 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_SHORYUKEN_ENABLED'.freeze
9
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_SHORYUKEN_ANALYTICS_ENABLED'.freeze
10
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SHORYUKEN_ANALYTICS_SAMPLE_RATE'.freeze
11
- SERVICE_NAME = 'shoryuken'.freeze
12
- SPAN_JOB = 'shoryuken.job'.freeze
13
- TAG_JOB_ID = 'shoryuken.id'.freeze
14
- TAG_JOB_QUEUE = 'shoryuken.queue'.freeze
15
- TAG_JOB_ATTRIBUTES = 'shoryuken.attributes'.freeze
16
- TAG_JOB_BODY = 'shoryuken.body'.freeze
17
- TAG_COMPONENT = 'shoryuken'.freeze
18
- TAG_OPERATION_JOB = 'job'.freeze
19
- TAG_MESSAGING_SYSTEM = 'amazonsqs'.freeze
10
+ ENV_ENABLED = 'DD_TRACE_SHORYUKEN_ENABLED'
11
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SHORYUKEN_ANALYTICS_ENABLED'
12
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SHORYUKEN_ANALYTICS_SAMPLE_RATE'
13
+ SERVICE_NAME = 'shoryuken'
14
+ SPAN_JOB = 'shoryuken.job'
15
+ TAG_JOB_ID = 'shoryuken.id'
16
+ TAG_JOB_QUEUE = 'shoryuken.queue'
17
+ TAG_JOB_ATTRIBUTES = 'shoryuken.attributes'
18
+ TAG_JOB_BODY = 'shoryuken.body'
19
+ TAG_COMPONENT = 'shoryuken'
20
+ TAG_OPERATION_JOB = 'job'
21
+ TAG_MESSAGING_SYSTEM = 'amazonsqs'
20
22
  end
21
23
  end
22
24
  end
@@ -13,30 +13,37 @@ module Datadog
13
13
  # @public_api
14
14
  class Settings < Contrib::Configuration::Settings
15
15
  option :enabled do |o|
16
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
17
- o.lazy
16
+ o.type :bool
17
+ o.env Ext::ENV_ENABLED
18
+ o.default true
18
19
  end
19
20
 
20
21
  option :analytics_enabled do |o|
21
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
22
- o.lazy
22
+ o.type :bool
23
+ o.env Ext::ENV_ANALYTICS_ENABLED
24
+ o.default false
23
25
  end
24
26
 
25
27
  option :analytics_sample_rate do |o|
26
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
27
- o.lazy
28
+ o.type :float
29
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
30
+ o.default 1.0
28
31
  end
29
32
 
30
33
  option :tag_args do |o|
31
- o.default { env_to_bool(Ext::ENV_TAG_JOB_ARGS, false) }
32
- o.lazy
34
+ o.type :bool
35
+ o.env Ext::ENV_TAG_JOB_ARGS
36
+ o.default false
33
37
  end
34
38
 
35
39
  option :service_name
36
40
  option :client_service_name
37
- option :error_handler, default: Tracing::SpanOperation::Events::DEFAULT_ON_ERROR
38
- option :quantize, default: {}
39
- option :distributed_tracing, default: false
41
+ option :error_handler do |o|
42
+ o.type :proc
43
+ o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
44
+ end
45
+ option :quantize, default: {}, type: :hash
46
+ option :distributed_tracing, default: false, type: :bool
40
47
  end
41
48
  end
42
49
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,36 +7,36 @@ module Datadog
5
7
  # Sidekiq integration constants
6
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
7
9
  module Ext
8
- CLIENT_SERVICE_NAME = 'sidekiq-client'.freeze
9
- ENV_ENABLED = 'DD_TRACE_SIDEKIQ_ENABLED'.freeze
10
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED'.freeze
11
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE'.freeze
12
- ENV_TAG_JOB_ARGS = 'DD_SIDEKIQ_TAG_JOB_ARGS'.freeze
13
- SERVICE_NAME = 'sidekiq'.freeze
14
- SPAN_PUSH = 'sidekiq.push'.freeze
15
- SPAN_JOB = 'sidekiq.job'.freeze
16
- SPAN_JOB_FETCH = 'sidekiq.job_fetch'.freeze
17
- SPAN_REDIS_INFO = 'sidekiq.redis_info'.freeze
18
- SPAN_HEARTBEAT = 'sidekiq.heartbeat'.freeze
19
- SPAN_SCHEDULED_PUSH = 'sidekiq.scheduled_push'.freeze
20
- SPAN_SCHEDULED_WAIT = 'sidekiq.scheduled_poller_wait'.freeze
21
- SPAN_STOP = 'sidekiq.stop'.freeze
22
- TAG_JOB_DELAY = 'sidekiq.job.delay'.freeze
23
- TAG_JOB_ID = 'sidekiq.job.id'.freeze
24
- TAG_JOB_QUEUE = 'sidekiq.job.queue'.freeze
25
- TAG_JOB_RETRY = 'sidekiq.job.retry'.freeze
26
- TAG_JOB_RETRY_COUNT = 'sidekiq.job.retry_count'.freeze
27
- TAG_JOB_WRAPPER = 'sidekiq.job.wrapper'.freeze
28
- TAG_JOB_ARGS = 'sidekiq.job.args'.freeze
29
- TAG_COMPONENT = 'sidekiq'.freeze
30
- TAG_OPERATION_PUSH = 'push'.freeze
31
- TAG_OPERATION_JOB = 'job'.freeze
32
- TAG_OPERATION_JOB_FETCH = 'job_fetch'.freeze
33
- TAG_OPERATION_REDIS_INFO = 'redis_info'.freeze
34
- TAG_OPERATION_HEARTBEAT = 'heartbeat'.freeze
35
- TAG_OPERATION_SCHEDULED_PUSH = 'scheduled_push'.freeze
36
- TAG_OPERATION_SCHEDULED_WAIT = 'scheduled_poller_wait'.freeze
37
- TAG_OPERATION_STOP = 'stop'.freeze
10
+ CLIENT_SERVICE_NAME = 'sidekiq-client'
11
+ ENV_ENABLED = 'DD_TRACE_SIDEKIQ_ENABLED'
12
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED'
13
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE'
14
+ ENV_TAG_JOB_ARGS = 'DD_SIDEKIQ_TAG_JOB_ARGS'
15
+ SERVICE_NAME = 'sidekiq'
16
+ SPAN_PUSH = 'sidekiq.push'
17
+ SPAN_JOB = 'sidekiq.job'
18
+ SPAN_JOB_FETCH = 'sidekiq.job_fetch'
19
+ SPAN_REDIS_INFO = 'sidekiq.redis_info'
20
+ SPAN_HEARTBEAT = 'sidekiq.heartbeat'
21
+ SPAN_SCHEDULED_PUSH = 'sidekiq.scheduled_push'
22
+ SPAN_SCHEDULED_WAIT = 'sidekiq.scheduled_poller_wait'
23
+ SPAN_STOP = 'sidekiq.stop'
24
+ TAG_JOB_DELAY = 'sidekiq.job.delay'
25
+ TAG_JOB_ID = 'sidekiq.job.id'
26
+ TAG_JOB_QUEUE = 'sidekiq.job.queue'
27
+ TAG_JOB_RETRY = 'sidekiq.job.retry'
28
+ TAG_JOB_RETRY_COUNT = 'sidekiq.job.retry_count'
29
+ TAG_JOB_WRAPPER = 'sidekiq.job.wrapper'
30
+ TAG_JOB_ARGS = 'sidekiq.job.args'
31
+ TAG_COMPONENT = 'sidekiq'
32
+ TAG_OPERATION_PUSH = 'push'
33
+ TAG_OPERATION_JOB = 'job'
34
+ TAG_OPERATION_JOB_FETCH = 'job_fetch'
35
+ TAG_OPERATION_REDIS_INFO = 'redis_info'
36
+ TAG_OPERATION_HEARTBEAT = 'heartbeat'
37
+ TAG_OPERATION_SCHEDULED_PUSH = 'scheduled_push'
38
+ TAG_OPERATION_SCHEDULED_WAIT = 'scheduled_poller_wait'
39
+ TAG_OPERATION_STOP = 'stop'
38
40
  end
39
41
  end
40
42
  end
@@ -14,23 +14,25 @@ module Datadog
14
14
  }.freeze
15
15
 
16
16
  option :enabled do |o|
17
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
18
- o.lazy
17
+ o.type :bool
18
+ o.env Ext::ENV_ENABLED
19
+ o.default true
19
20
  end
20
21
 
21
22
  option :analytics_enabled do |o|
22
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
23
- o.lazy
23
+ o.type :bool, nilable: true
24
+ o.env Ext::ENV_ANALYTICS_ENABLED
24
25
  end
25
26
 
26
27
  option :analytics_sample_rate do |o|
27
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
28
- o.lazy
28
+ o.type :float
29
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
30
+ o.default 1.0
29
31
  end
30
32
 
31
- option :distributed_tracing, default: true
32
- option :headers, default: DEFAULT_HEADERS
33
- option :resource_script_names, default: false
33
+ option :distributed_tracing, default: true, type: :bool
34
+ option :headers, default: DEFAULT_HEADERS, type: :hash
35
+ option :resource_script_names, default: false, type: :bool
34
36
 
35
37
  option :service_name
36
38
  end
@@ -19,23 +19,6 @@ module Datadog
19
19
  env[Ext::RACK_ENV_SINATRA_REQUEST_SPAN] = span
20
20
  end
21
21
 
22
- def request_header_tags(env, headers)
23
- headers ||= []
24
-
25
- {}.tap do |result|
26
- headers.each do |header|
27
- rack_header = header_to_rack_header(header)
28
- if env.key?(rack_header)
29
- result[Tracing::Metadata::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header]
30
- end
31
- end
32
- end
33
- end
34
-
35
- def header_to_rack_header(name)
36
- "HTTP_#{name.to_s.upcase.gsub(/[-\s]/, '_')}"
37
- end
38
-
39
22
  def route_path(env, use_script_names: Datadog.configuration.tracing[:sinatra][:resource_script_names])
40
23
  return unless env['sinatra.route']
41
24
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Tracing
3
5
  module Contrib
@@ -5,27 +7,27 @@ module Datadog
5
7
  # Sinatra 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_SINATRA_ENABLED'.freeze
9
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_SINATRA_ANALYTICS_ENABLED'.freeze
10
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SINATRA_ANALYTICS_SAMPLE_RATE'.freeze
11
- RACK_ENV_SINATRA_REQUEST_SPAN = 'datadog.sinatra_request_span'.freeze
12
- SPAN_RENDER_TEMPLATE = 'sinatra.render_template'.freeze
13
- SPAN_REQUEST = 'sinatra.request'.freeze
14
- SPAN_ROUTE = 'sinatra.route'.freeze
15
- TAG_APP_NAME = 'sinatra.app.name'.freeze
16
- TAG_COMPONENT = 'sinatra'.freeze
17
- TAG_OPERATION_RENDER_TEMPLATE = 'render_template'.freeze
18
- TAG_OPERATION_REQUEST = 'request'.freeze
19
- TAG_OPERATION_ROUTE = 'route'.freeze
20
- TAG_ROUTE_PATH = 'sinatra.route.path'.freeze
21
- TAG_SCRIPT_NAME = 'sinatra.script_name'.freeze
22
- TAG_TEMPLATE_ENGINE = 'sinatra.template_engine'.freeze
23
- TAG_TEMPLATE_NAME = 'sinatra.template_name'.freeze
10
+ ENV_ENABLED = 'DD_TRACE_SINATRA_ENABLED'
11
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SINATRA_ANALYTICS_ENABLED'
12
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SINATRA_ANALYTICS_SAMPLE_RATE'
13
+ RACK_ENV_SINATRA_REQUEST_SPAN = 'datadog.sinatra_request_span'
14
+ SPAN_RENDER_TEMPLATE = 'sinatra.render_template'
15
+ SPAN_REQUEST = 'sinatra.request'
16
+ SPAN_ROUTE = 'sinatra.route'
17
+ TAG_APP_NAME = 'sinatra.app.name'
18
+ TAG_COMPONENT = 'sinatra'
19
+ TAG_OPERATION_RENDER_TEMPLATE = 'render_template'
20
+ TAG_OPERATION_REQUEST = 'request'
21
+ TAG_OPERATION_ROUTE = 'route'
22
+ TAG_ROUTE_PATH = 'sinatra.route.path'
23
+ TAG_SCRIPT_NAME = 'sinatra.script_name'
24
+ TAG_TEMPLATE_ENGINE = 'sinatra.template_engine'
25
+ TAG_TEMPLATE_NAME = 'sinatra.template_name'
24
26
 
25
27
  # === Deprecated: To be removed ===
26
- RACK_ENV_REQUEST_SPAN = 'datadog.sinatra_request_span'.freeze
27
- RACK_ENV_MIDDLEWARE_START_TIME = 'datadog.sinatra_middleware_start_time'.freeze
28
- RACK_ENV_MIDDLEWARE_TRACED = 'datadog.sinatra_middleware_traced'.freeze
28
+ RACK_ENV_REQUEST_SPAN = 'datadog.sinatra_request_span'
29
+ RACK_ENV_MIDDLEWARE_START_TIME = 'datadog.sinatra_middleware_start_time'
30
+ RACK_ENV_MIDDLEWARE_TRACED = 'datadog.sinatra_middleware_traced'
29
31
  # === Deprecated: To be removed ===
30
32
  end
31
33
  end
@@ -3,9 +3,9 @@
3
3
  require_relative '../../metadata/ext'
4
4
  require_relative '../analytics'
5
5
  require_relative '../rack/ext'
6
+ require_relative '../rack/header_tagging'
6
7
  require_relative 'env'
7
8
  require_relative 'ext'
8
- require_relative 'headers'
9
9
 
10
10
  module Datadog
11
11
  module Tracing
@@ -20,8 +20,6 @@ module Datadog
20
20
 
21
21
  # rubocop:disable Metrics/AbcSize
22
22
  # rubocop:disable Metrics/MethodLength
23
- # rubocop:disable Metrics/CyclomaticComplexity
24
- # rubocop:disable Metrics/PerceivedComplexity
25
23
  def call(env)
26
24
  # Set the trace context (e.g. distributed tracing)
27
25
  if configuration[:distributed_tracing] && Tracing.active_trace.nil?
@@ -45,9 +43,7 @@ module Datadog
45
43
 
46
44
  response = @app.call(env)
47
45
  ensure
48
- Sinatra::Env.request_header_tags(env, configuration[:headers][:request]).each do |name, value|
49
- span.set_tag(name, value) if span.get_tag(name).nil?
50
- end
46
+ Contrib::Rack::HeaderTagging.tag_request_headers(span, env, configuration)
51
47
 
52
48
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
53
49
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
@@ -85,12 +81,7 @@ module Datadog
85
81
  end
86
82
 
87
83
  if (headers = response[1])
88
- Sinatra::Headers.response_header_tags(
89
- headers,
90
- configuration[:headers][:response]
91
- ).each do |name, value|
92
- span.set_tag(name, value) if span.get_tag(name).nil?
93
- end
84
+ Contrib::Rack::HeaderTagging.tag_response_headers(span, headers, configuration)
94
85
  end
95
86
  end
96
87
 
@@ -104,8 +95,6 @@ module Datadog
104
95
  end
105
96
  # rubocop:enable Metrics/AbcSize
106
97
  # rubocop:enable Metrics/MethodLength
107
- # rubocop:enable Metrics/CyclomaticComplexity
108
- # rubocop:enable Metrics/PerceivedComplexity
109
98
 
110
99
  private
111
100
 
@@ -11,23 +11,29 @@ module Datadog
11
11
  # Default settings for the Shoryuken integration
12
12
  class Settings < Contrib::Configuration::Settings
13
13
  option :enabled do |o|
14
- o.default { env_to_bool(Ext::ENV_ENABLED, true) }
15
- o.lazy
14
+ o.type :bool
15
+ o.env Ext::ENV_ENABLED
16
+ o.default true
16
17
  end
17
18
 
18
19
  option :analytics_enabled do |o|
19
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
20
- o.lazy
20
+ o.type :bool
21
+ o.env Ext::ENV_ANALYTICS_ENABLED
22
+ o.default false
21
23
  end
22
24
 
23
25
  option :analytics_sample_rate do |o|
24
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
25
- o.lazy
26
+ o.type :float
27
+ o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
28
+ o.default 1.0
26
29
  end
27
30
 
28
31
  option :service_name
29
- option :error_handler, default: Tracing::SpanOperation::Events::DEFAULT_ON_ERROR
30
- option :tag_body, default: false
32
+ option :error_handler do |o|
33
+ o.type :proc
34
+ o.default_proc(&Tracing::SpanOperation::Events::DEFAULT_ON_ERROR)
35
+ end
36
+ option :tag_body, default: false, type: :bool
31
37
  end
32
38
  end
33
39
  end