ddtrace 0.34.1 → 1.23.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1171) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +3321 -277
  3. data/LICENSE-3rdparty.csv +8 -0
  4. data/README.md +17 -9
  5. data/bin/ddprofrb +15 -0
  6. data/bin/ddtracerb +17 -0
  7. data/ext/datadog_profiling_loader/datadog_profiling_loader.c +134 -0
  8. data/ext/datadog_profiling_loader/extconf.rb +72 -0
  9. data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +156 -0
  10. data/ext/datadog_profiling_native_extension/clock_id.h +22 -0
  11. data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +56 -0
  12. data/ext/datadog_profiling_native_extension/clock_id_noop.c +22 -0
  13. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +1161 -0
  14. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
  15. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
  16. data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
  17. data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
  18. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
  19. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
  20. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
  21. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  22. data/ext/datadog_profiling_native_extension/collectors_stack.c +372 -0
  23. data/ext/datadog_profiling_native_extension/collectors_stack.h +27 -0
  24. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +1402 -0
  25. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +15 -0
  26. data/ext/datadog_profiling_native_extension/extconf.rb +302 -0
  27. data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
  28. data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
  29. data/ext/datadog_profiling_native_extension/helpers.h +23 -0
  30. data/ext/datadog_profiling_native_extension/http_transport.c +375 -0
  31. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
  32. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
  33. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +319 -0
  34. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +892 -0
  35. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +61 -0
  36. data/ext/datadog_profiling_native_extension/profiling.c +267 -0
  37. data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
  38. data/ext/datadog_profiling_native_extension/ruby_helpers.h +122 -0
  39. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +115 -0
  40. data/ext/datadog_profiling_native_extension/setup_signal_handler.h +11 -0
  41. data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
  42. data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
  43. data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
  44. data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
  45. data/lib/datadog/appsec/assets/blocked.html +99 -0
  46. data/lib/datadog/appsec/assets/blocked.json +1 -0
  47. data/lib/datadog/appsec/assets/blocked.text +5 -0
  48. data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
  49. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  50. data/lib/datadog/appsec/assets/waf_rules/recommended.json +7703 -0
  51. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  52. data/lib/datadog/appsec/assets/waf_rules/strict.json +1635 -0
  53. data/lib/datadog/appsec/assets.rb +44 -0
  54. data/lib/datadog/appsec/autoload.rb +11 -0
  55. data/lib/datadog/appsec/component.rb +94 -0
  56. data/lib/datadog/appsec/configuration/settings.rb +202 -0
  57. data/lib/datadog/appsec/configuration.rb +11 -0
  58. data/lib/datadog/appsec/contrib/auto_instrument.rb +25 -0
  59. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  60. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  61. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  62. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  63. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  64. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  65. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  66. data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
  67. data/lib/datadog/appsec/contrib/integration.rb +37 -0
  68. data/lib/datadog/appsec/contrib/patcher.rb +12 -0
  69. data/lib/datadog/appsec/contrib/rack/ext.rb +13 -0
  70. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +104 -0
  71. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
  72. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +160 -0
  73. data/lib/datadog/appsec/contrib/rack/integration.rb +42 -0
  74. data/lib/datadog/appsec/contrib/rack/patcher.rb +34 -0
  75. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +81 -0
  76. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +60 -0
  77. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +66 -0
  78. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +44 -0
  79. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +224 -0
  80. data/lib/datadog/appsec/contrib/rails/ext.rb +13 -0
  81. data/lib/datadog/appsec/contrib/rails/framework.rb +16 -0
  82. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
  83. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +69 -0
  84. data/lib/datadog/appsec/contrib/rails/integration.rb +41 -0
  85. data/lib/datadog/appsec/contrib/rails/patcher.rb +165 -0
  86. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +66 -0
  87. data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
  88. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
  89. data/lib/datadog/appsec/contrib/sinatra/ext.rb +14 -0
  90. data/lib/datadog/appsec/contrib/sinatra/framework.rb +20 -0
  91. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
  92. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
  93. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +115 -0
  94. data/lib/datadog/appsec/contrib/sinatra/integration.rb +41 -0
  95. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +166 -0
  96. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +61 -0
  97. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
  98. data/lib/datadog/appsec/event.rb +169 -0
  99. data/lib/datadog/appsec/ext.rb +10 -0
  100. data/lib/datadog/appsec/extensions.rb +15 -0
  101. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
  102. data/lib/datadog/appsec/instrumentation/gateway.rb +64 -0
  103. data/lib/datadog/appsec/instrumentation.rb +9 -0
  104. data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
  105. data/lib/datadog/appsec/monitor/reactive/set_user.rb +58 -0
  106. data/lib/datadog/appsec/monitor.rb +11 -0
  107. data/lib/datadog/appsec/processor/actions.rb +49 -0
  108. data/lib/datadog/appsec/processor/rule_loader.rb +123 -0
  109. data/lib/datadog/appsec/processor/rule_merger.rb +152 -0
  110. data/lib/datadog/appsec/processor.rb +171 -0
  111. data/lib/datadog/appsec/rate_limiter.rb +58 -0
  112. data/lib/datadog/appsec/reactive/address_hash.rb +22 -0
  113. data/lib/datadog/appsec/reactive/engine.rb +47 -0
  114. data/lib/datadog/appsec/reactive/operation.rb +68 -0
  115. data/lib/datadog/appsec/reactive/subscriber.rb +19 -0
  116. data/lib/datadog/appsec/remote.rb +129 -0
  117. data/lib/datadog/appsec/response.rb +151 -0
  118. data/lib/datadog/appsec/sample_rate.rb +21 -0
  119. data/lib/datadog/appsec/scope.rb +61 -0
  120. data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
  121. data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
  122. data/lib/datadog/appsec/utils/http.rb +11 -0
  123. data/lib/datadog/appsec/utils.rb +9 -0
  124. data/lib/datadog/appsec.rb +60 -0
  125. data/lib/datadog/auto_instrument.rb +3 -0
  126. data/lib/datadog/core/backport.rb +51 -0
  127. data/lib/datadog/core/buffer/cruby.rb +55 -0
  128. data/lib/datadog/core/buffer/random.rb +134 -0
  129. data/lib/datadog/core/buffer/thread_safe.rb +58 -0
  130. data/lib/datadog/core/chunker.rb +35 -0
  131. data/lib/datadog/core/configuration/agent_settings_resolver.rb +405 -0
  132. data/lib/datadog/core/configuration/base.rb +89 -0
  133. data/lib/datadog/core/configuration/components.rb +174 -0
  134. data/lib/datadog/core/configuration/ext.rb +47 -0
  135. data/lib/datadog/core/configuration/option.rb +319 -0
  136. data/lib/datadog/core/configuration/option_definition.rb +176 -0
  137. data/lib/datadog/core/configuration/options.rb +128 -0
  138. data/lib/datadog/core/configuration/settings.rb +848 -0
  139. data/lib/datadog/core/configuration.rb +309 -0
  140. data/lib/datadog/core/diagnostics/environment_logger.rb +183 -0
  141. data/lib/datadog/core/diagnostics/health.rb +19 -0
  142. data/lib/datadog/core/encoding.rb +72 -0
  143. data/lib/datadog/core/environment/cgroup.rb +51 -0
  144. data/lib/datadog/core/environment/class_count.rb +21 -0
  145. data/lib/datadog/core/environment/container.rb +89 -0
  146. data/lib/datadog/core/environment/execution.rb +103 -0
  147. data/lib/datadog/core/environment/ext.rb +46 -0
  148. data/lib/datadog/core/environment/gc.rb +20 -0
  149. data/lib/datadog/core/environment/git.rb +25 -0
  150. data/lib/datadog/core/environment/identity.rb +84 -0
  151. data/lib/datadog/core/environment/platform.rb +44 -0
  152. data/lib/datadog/core/environment/socket.rb +24 -0
  153. data/lib/datadog/core/environment/thread_count.rb +20 -0
  154. data/lib/datadog/core/environment/variable_helpers.rb +53 -0
  155. data/lib/datadog/core/environment/vm_cache.rb +64 -0
  156. data/lib/datadog/core/environment/yjit.rb +58 -0
  157. data/lib/datadog/core/error.rb +100 -0
  158. data/lib/datadog/core/extensions.rb +16 -0
  159. data/lib/datadog/core/git/ext.rb +16 -0
  160. data/lib/datadog/core/header_collection.rb +43 -0
  161. data/lib/datadog/core/logger.rb +44 -0
  162. data/lib/datadog/core/logging/ext.rb +13 -0
  163. data/lib/datadog/core/metrics/client.rb +197 -0
  164. data/lib/datadog/core/metrics/ext.rb +18 -0
  165. data/lib/datadog/core/metrics/helpers.rb +25 -0
  166. data/lib/datadog/core/metrics/logging.rb +42 -0
  167. data/lib/datadog/core/metrics/metric.rb +14 -0
  168. data/lib/datadog/core/metrics/options.rb +48 -0
  169. data/lib/datadog/core/pin.rb +73 -0
  170. data/lib/datadog/core/remote/client/capabilities.rb +62 -0
  171. data/lib/datadog/core/remote/client.rb +232 -0
  172. data/lib/datadog/core/remote/component.rb +162 -0
  173. data/lib/datadog/core/remote/configuration/content.rb +111 -0
  174. data/lib/datadog/core/remote/configuration/digest.rb +62 -0
  175. data/lib/datadog/core/remote/configuration/path.rb +90 -0
  176. data/lib/datadog/core/remote/configuration/repository.rb +294 -0
  177. data/lib/datadog/core/remote/configuration/target.rb +74 -0
  178. data/lib/datadog/core/remote/configuration.rb +18 -0
  179. data/lib/datadog/core/remote/dispatcher.rb +59 -0
  180. data/lib/datadog/core/remote/ext.rb +13 -0
  181. data/lib/datadog/core/remote/negotiation.rb +70 -0
  182. data/lib/datadog/core/remote/tie/tracing.rb +39 -0
  183. data/lib/datadog/core/remote/tie.rb +27 -0
  184. data/lib/datadog/core/remote/transport/config.rb +60 -0
  185. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  186. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  187. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  188. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  189. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  190. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  191. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  192. data/lib/datadog/core/remote/transport/http.rb +179 -0
  193. data/lib/datadog/core/remote/transport/negotiation.rb +62 -0
  194. data/lib/datadog/core/remote/worker.rb +102 -0
  195. data/lib/datadog/core/remote.rb +24 -0
  196. data/lib/datadog/core/runtime/ext.rb +38 -0
  197. data/lib/datadog/core/runtime/metrics.rb +183 -0
  198. data/lib/datadog/core/telemetry/client.rb +95 -0
  199. data/lib/datadog/core/telemetry/emitter.rb +44 -0
  200. data/lib/datadog/core/telemetry/event.rb +273 -0
  201. data/lib/datadog/core/telemetry/ext.rb +16 -0
  202. data/lib/datadog/core/telemetry/heartbeat.rb +33 -0
  203. data/lib/datadog/core/telemetry/http/adapters/net.rb +111 -0
  204. data/lib/datadog/core/telemetry/http/env.rb +20 -0
  205. data/lib/datadog/core/telemetry/http/ext.rb +25 -0
  206. data/lib/datadog/core/telemetry/http/response.rb +68 -0
  207. data/lib/datadog/core/telemetry/http/transport.rb +61 -0
  208. data/lib/datadog/core/telemetry/request.rb +59 -0
  209. data/lib/datadog/core/transport/ext.rb +49 -0
  210. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  211. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  212. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  213. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  214. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  215. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  216. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  217. data/lib/datadog/core/transport/http/env.rb +62 -0
  218. data/lib/datadog/core/transport/http/response.rb +60 -0
  219. data/lib/datadog/core/transport/parcel.rb +22 -0
  220. data/lib/datadog/core/transport/request.rb +17 -0
  221. data/lib/datadog/core/transport/response.rb +64 -0
  222. data/lib/datadog/core/utils/compression.rb +36 -0
  223. data/lib/datadog/core/utils/duration.rb +52 -0
  224. data/lib/datadog/core/utils/forking.rb +61 -0
  225. data/lib/datadog/core/utils/hash.rb +79 -0
  226. data/lib/datadog/core/utils/network.rb +140 -0
  227. data/lib/datadog/core/utils/only_once.rb +42 -0
  228. data/lib/datadog/core/utils/safe_dup.rb +50 -0
  229. data/lib/datadog/core/utils/sequence.rb +26 -0
  230. data/lib/datadog/core/utils/time.rb +52 -0
  231. data/lib/datadog/core/utils/url.rb +25 -0
  232. data/lib/datadog/core/utils.rb +92 -0
  233. data/lib/datadog/core/vendor/ipaddr.rb +78 -0
  234. data/lib/datadog/core/vendor/multipart-post/LICENSE +11 -0
  235. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +118 -0
  236. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +59 -0
  237. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +137 -0
  238. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +11 -0
  239. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +10 -0
  240. data/lib/datadog/core/vendor/multipart-post/multipart.rb +14 -0
  241. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +34 -0
  242. data/lib/datadog/core/worker.rb +24 -0
  243. data/lib/datadog/core/workers/async.rb +183 -0
  244. data/lib/datadog/core/workers/interval_loop.rb +123 -0
  245. data/lib/datadog/core/workers/polling.rb +57 -0
  246. data/lib/datadog/core/workers/queue.rb +44 -0
  247. data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
  248. data/lib/datadog/core.rb +45 -0
  249. data/lib/datadog/kit/appsec/events.rb +169 -0
  250. data/lib/datadog/kit/enable_core_dumps.rb +49 -0
  251. data/lib/datadog/kit/identity.rb +104 -0
  252. data/lib/datadog/kit.rb +11 -0
  253. data/lib/datadog/opentelemetry/api/context.rb +193 -0
  254. data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
  255. data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
  256. data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
  257. data/lib/datadog/opentelemetry/sdk/propagator.rb +92 -0
  258. data/lib/datadog/opentelemetry/sdk/span_processor.rb +134 -0
  259. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  260. data/lib/datadog/opentelemetry/trace.rb +58 -0
  261. data/lib/datadog/opentelemetry.rb +51 -0
  262. data/lib/datadog/opentracer/binary_propagator.rb +26 -0
  263. data/lib/datadog/opentracer/carrier.rb +9 -0
  264. data/lib/datadog/opentracer/distributed_headers.rb +54 -0
  265. data/lib/datadog/opentracer/global_tracer.rb +17 -0
  266. data/lib/datadog/opentracer/propagator.rb +26 -0
  267. data/lib/datadog/opentracer/rack_propagator.rb +71 -0
  268. data/lib/datadog/opentracer/scope.rb +18 -0
  269. data/lib/datadog/opentracer/scope_manager.rb +9 -0
  270. data/lib/datadog/opentracer/span.rb +99 -0
  271. data/lib/datadog/opentracer/span_context.rb +19 -0
  272. data/lib/datadog/opentracer/span_context_factory.rb +27 -0
  273. data/lib/datadog/opentracer/text_map_propagator.rb +87 -0
  274. data/lib/datadog/opentracer/thread_local_scope.rb +34 -0
  275. data/lib/datadog/opentracer/thread_local_scope_manager.rb +64 -0
  276. data/lib/datadog/opentracer/tracer.rb +212 -0
  277. data/lib/datadog/opentracer.rb +33 -0
  278. data/lib/datadog/profiling/collectors/code_provenance.rb +119 -0
  279. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +137 -0
  280. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  281. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
  282. data/lib/datadog/profiling/collectors/info.rb +101 -0
  283. data/lib/datadog/profiling/collectors/stack.rb +13 -0
  284. data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
  285. data/lib/datadog/profiling/component.rb +426 -0
  286. data/lib/datadog/profiling/exporter.rb +104 -0
  287. data/lib/datadog/profiling/ext/forking.rb +96 -0
  288. data/lib/datadog/profiling/ext.rb +35 -0
  289. data/lib/datadog/profiling/flush.rb +43 -0
  290. data/lib/datadog/profiling/http_transport.rb +147 -0
  291. data/lib/datadog/profiling/load_native_extension.rb +39 -0
  292. data/lib/datadog/profiling/native_extension.rb +20 -0
  293. data/lib/datadog/profiling/preload.rb +5 -0
  294. data/lib/datadog/profiling/profiler.rb +62 -0
  295. data/lib/datadog/profiling/scheduler.rb +135 -0
  296. data/lib/datadog/profiling/stack_recorder.rb +71 -0
  297. data/lib/datadog/profiling/tag_builder.rb +58 -0
  298. data/lib/datadog/profiling/tasks/exec.rb +48 -0
  299. data/lib/datadog/profiling/tasks/help.rb +16 -0
  300. data/lib/datadog/profiling/tasks/setup.rb +58 -0
  301. data/lib/datadog/profiling.rb +161 -0
  302. data/lib/datadog/tracing/analytics.rb +25 -0
  303. data/lib/datadog/tracing/buffer.rb +127 -0
  304. data/lib/datadog/tracing/client_ip.rb +61 -0
  305. data/lib/datadog/tracing/component.rb +235 -0
  306. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  307. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  308. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  309. data/lib/datadog/tracing/configuration/ext.rb +108 -0
  310. data/lib/datadog/tracing/configuration/http.rb +74 -0
  311. data/lib/datadog/tracing/configuration/settings.rb +502 -0
  312. data/lib/datadog/tracing/context.rb +68 -0
  313. data/lib/datadog/tracing/context_provider.rb +80 -0
  314. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +39 -0
  315. data/lib/datadog/tracing/contrib/action_cable/event.rb +71 -0
  316. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +56 -0
  317. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +61 -0
  318. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +57 -0
  319. data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
  320. data/lib/datadog/tracing/contrib/action_cable/ext.rb +33 -0
  321. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +88 -0
  322. data/lib/datadog/tracing/contrib/action_cable/integration.rb +48 -0
  323. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
  324. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +40 -0
  325. data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
  326. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +58 -0
  327. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +45 -0
  328. data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
  329. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +34 -0
  330. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +48 -0
  331. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
  332. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +136 -0
  333. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
  334. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +50 -0
  335. data/lib/datadog/tracing/contrib/action_pack/ext.rb +23 -0
  336. data/lib/datadog/tracing/contrib/action_pack/integration.rb +48 -0
  337. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
  338. data/lib/datadog/tracing/contrib/action_pack/utils.rb +38 -0
  339. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +38 -0
  340. data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
  341. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +52 -0
  342. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +55 -0
  343. data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
  344. data/lib/datadog/tracing/contrib/action_view/ext.rb +25 -0
  345. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +76 -0
  346. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +89 -0
  347. data/lib/datadog/tracing/contrib/action_view/integration.rb +55 -0
  348. data/lib/datadog/tracing/contrib/action_view/patcher.rb +45 -0
  349. data/lib/datadog/tracing/contrib/action_view/utils.rb +34 -0
  350. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +44 -0
  351. data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
  352. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +48 -0
  353. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +47 -0
  354. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +47 -0
  355. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +49 -0
  356. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +47 -0
  357. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +48 -0
  358. data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
  359. data/lib/datadog/tracing/contrib/active_job/ext.rb +40 -0
  360. data/lib/datadog/tracing/contrib/active_job/integration.rb +48 -0
  361. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +24 -0
  362. data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
  363. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +37 -0
  364. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +68 -0
  365. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +43 -0
  366. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +45 -0
  367. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
  368. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +25 -0
  369. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +43 -0
  370. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +32 -0
  371. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +34 -0
  372. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +150 -0
  373. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +47 -0
  374. data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
  375. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +56 -0
  376. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +75 -0
  377. data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
  378. data/lib/datadog/tracing/contrib/active_record/ext.rb +30 -0
  379. data/lib/datadog/tracing/contrib/active_record/integration.rb +54 -0
  380. data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
  381. data/lib/datadog/tracing/contrib/active_record/utils.rb +126 -0
  382. data/lib/datadog/tracing/contrib/active_record/vendor/MIT-LICENSE +20 -0
  383. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +305 -0
  384. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +186 -0
  385. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +76 -0
  386. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
  387. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +46 -0
  388. data/lib/datadog/tracing/contrib/active_support/ext.rb +32 -0
  389. data/lib/datadog/tracing/contrib/active_support/integration.rb +49 -0
  390. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
  391. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
  392. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +162 -0
  393. data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
  394. data/lib/datadog/tracing/contrib/analytics.rb +28 -0
  395. data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
  396. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +52 -0
  397. data/lib/datadog/tracing/contrib/aws/ext.rb +50 -0
  398. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +119 -0
  399. data/lib/datadog/tracing/contrib/aws/integration.rb +45 -0
  400. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +62 -0
  401. data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
  402. data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
  403. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
  404. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
  405. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
  406. data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
  407. data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
  408. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
  409. data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
  410. data/lib/datadog/tracing/contrib/aws/services.rb +137 -0
  411. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  412. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +24 -0
  413. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
  414. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
  415. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +20 -0
  416. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +42 -0
  417. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +49 -0
  418. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  419. data/lib/datadog/tracing/contrib/configurable.rb +102 -0
  420. data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
  421. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
  422. data/lib/datadog/tracing/contrib/configuration/settings.rb +39 -0
  423. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +57 -0
  424. data/lib/datadog/tracing/contrib/dalli/ext.rb +40 -0
  425. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +73 -0
  426. data/lib/datadog/tracing/contrib/dalli/integration.rb +50 -0
  427. data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
  428. data/lib/datadog/tracing/contrib/dalli/quantize.rb +24 -0
  429. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +45 -0
  430. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +29 -0
  431. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +41 -0
  432. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +37 -0
  433. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +108 -0
  434. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +34 -0
  435. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +53 -0
  436. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +34 -0
  437. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +48 -0
  438. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +160 -0
  439. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +85 -0
  440. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +55 -0
  441. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +221 -0
  442. data/lib/datadog/tracing/contrib/ethon/ext.rb +32 -0
  443. data/lib/datadog/tracing/contrib/ethon/integration.rb +46 -0
  444. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +102 -0
  445. data/lib/datadog/tracing/contrib/ethon/patcher.rb +30 -0
  446. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +57 -0
  447. data/lib/datadog/tracing/contrib/excon/ext.rb +29 -0
  448. data/lib/datadog/tracing/contrib/excon/integration.rb +46 -0
  449. data/lib/datadog/tracing/contrib/excon/middleware.rb +192 -0
  450. data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
  451. data/lib/datadog/tracing/contrib/ext.rb +55 -0
  452. data/lib/datadog/tracing/contrib/extensions.rb +233 -0
  453. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +68 -0
  454. data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
  455. data/lib/datadog/tracing/contrib/faraday/ext.rb +29 -0
  456. data/lib/datadog/tracing/contrib/faraday/integration.rb +46 -0
  457. data/lib/datadog/tracing/contrib/faraday/middleware.rb +110 -0
  458. data/lib/datadog/tracing/contrib/faraday/patcher.rb +54 -0
  459. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
  460. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +45 -0
  461. data/lib/datadog/tracing/contrib/grape/endpoint.rb +248 -0
  462. data/lib/datadog/tracing/contrib/grape/ext.rb +29 -0
  463. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +35 -0
  464. data/lib/datadog/tracing/contrib/grape/integration.rb +42 -0
  465. data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
  466. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +39 -0
  467. data/lib/datadog/tracing/contrib/graphql/ext.rb +20 -0
  468. data/lib/datadog/tracing/contrib/graphql/integration.rb +42 -0
  469. data/lib/datadog/tracing/contrib/graphql/patcher.rb +88 -0
  470. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +79 -0
  471. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +119 -0
  472. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +107 -0
  473. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +101 -0
  474. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
  475. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
  476. data/lib/datadog/tracing/contrib/grpc/ext.rb +29 -0
  477. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  478. data/lib/datadog/tracing/contrib/grpc/integration.rb +48 -0
  479. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
  480. data/lib/datadog/tracing/contrib/grpc/patcher.rb +34 -0
  481. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
  482. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +23 -0
  483. data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
  484. data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
  485. data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
  486. data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
  487. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
  488. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
  489. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +40 -0
  490. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +75 -0
  491. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
  492. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
  493. data/lib/datadog/tracing/contrib/http/ext.rb +29 -0
  494. data/lib/datadog/tracing/contrib/http/instrumentation.rb +158 -0
  495. data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
  496. data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
  497. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
  498. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +75 -0
  499. data/lib/datadog/tracing/contrib/httpclient/ext.rb +30 -0
  500. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +135 -0
  501. data/lib/datadog/tracing/contrib/httpclient/integration.rb +46 -0
  502. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +40 -0
  503. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +75 -0
  504. data/lib/datadog/tracing/contrib/httprb/ext.rb +29 -0
  505. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +145 -0
  506. data/lib/datadog/tracing/contrib/httprb/integration.rb +46 -0
  507. data/lib/datadog/tracing/contrib/httprb/patcher.rb +40 -0
  508. data/lib/datadog/tracing/contrib/integration.rb +78 -0
  509. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +39 -0
  510. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +19 -0
  511. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
  512. data/lib/datadog/tracing/contrib/kafka/event.rb +53 -0
  513. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +40 -0
  514. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +47 -0
  515. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +45 -0
  516. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +45 -0
  517. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +35 -0
  518. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +35 -0
  519. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +35 -0
  520. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +39 -0
  521. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +42 -0
  522. data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
  523. data/lib/datadog/tracing/contrib/kafka/ext.rb +55 -0
  524. data/lib/datadog/tracing/contrib/kafka/integration.rb +42 -0
  525. data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
  526. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +24 -0
  527. data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
  528. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +31 -0
  529. data/lib/datadog/tracing/contrib/lograge/integration.rb +48 -0
  530. data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
  531. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +55 -0
  532. data/lib/datadog/tracing/contrib/mongodb/ext.rb +38 -0
  533. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
  534. data/lib/datadog/tracing/contrib/mongodb/integration.rb +46 -0
  535. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +47 -0
  536. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
  537. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +139 -0
  538. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +63 -0
  539. data/lib/datadog/tracing/contrib/mysql2/ext.rb +28 -0
  540. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +95 -0
  541. data/lib/datadog/tracing/contrib/mysql2/integration.rb +41 -0
  542. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
  543. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
  544. data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
  545. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  546. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  547. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  548. data/lib/datadog/tracing/contrib/patchable.rb +109 -0
  549. data/lib/datadog/tracing/contrib/patcher.rb +83 -0
  550. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +64 -0
  551. data/lib/datadog/tracing/contrib/pg/ext.rb +35 -0
  552. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +211 -0
  553. data/lib/datadog/tracing/contrib/pg/integration.rb +41 -0
  554. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  555. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +51 -0
  556. data/lib/datadog/tracing/contrib/presto/ext.rb +38 -0
  557. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +136 -0
  558. data/lib/datadog/tracing/contrib/presto/integration.rb +41 -0
  559. data/lib/datadog/tracing/contrib/presto/patcher.rb +35 -0
  560. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
  561. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
  562. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
  563. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +53 -0
  564. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +45 -0
  565. data/lib/datadog/tracing/contrib/qless/ext.rb +27 -0
  566. data/lib/datadog/tracing/contrib/qless/integration.rb +41 -0
  567. data/lib/datadog/tracing/contrib/qless/patcher.rb +36 -0
  568. data/lib/datadog/tracing/contrib/qless/qless_job.rb +75 -0
  569. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +30 -0
  570. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +57 -0
  571. data/lib/datadog/tracing/contrib/que/ext.rb +33 -0
  572. data/lib/datadog/tracing/contrib/que/integration.rb +44 -0
  573. data/lib/datadog/tracing/contrib/que/patcher.rb +26 -0
  574. data/lib/datadog/tracing/contrib/que/tracer.rb +63 -0
  575. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +46 -0
  576. data/lib/datadog/tracing/contrib/racecar/event.rb +81 -0
  577. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +36 -0
  578. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +33 -0
  579. data/lib/datadog/tracing/contrib/racecar/events/message.rb +36 -0
  580. data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
  581. data/lib/datadog/tracing/contrib/racecar/ext.rb +33 -0
  582. data/lib/datadog/tracing/contrib/racecar/integration.rb +42 -0
  583. data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
  584. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +54 -0
  585. data/lib/datadog/tracing/contrib/rack/ext.rb +31 -0
  586. data/lib/datadog/tracing/contrib/rack/header_collection.rb +38 -0
  587. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  588. data/lib/datadog/tracing/contrib/rack/integration.rb +48 -0
  589. data/lib/datadog/tracing/contrib/rack/middlewares.rb +315 -0
  590. data/lib/datadog/tracing/contrib/rack/patcher.rb +117 -0
  591. data/lib/datadog/tracing/contrib/rack/request_queue.rb +46 -0
  592. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +8 -0
  593. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +84 -0
  594. data/lib/datadog/tracing/contrib/rails/ext.rb +20 -0
  595. data/lib/datadog/tracing/contrib/rails/framework.rb +148 -0
  596. data/lib/datadog/tracing/contrib/rails/integration.rb +47 -0
  597. data/lib/datadog/tracing/contrib/rails/log_injection.rb +27 -0
  598. data/lib/datadog/tracing/contrib/rails/middlewares.rb +46 -0
  599. data/lib/datadog/tracing/contrib/rails/patcher.rb +87 -0
  600. data/lib/datadog/tracing/contrib/rails/railtie.rb +17 -0
  601. data/lib/datadog/tracing/contrib/rails/utils.rb +28 -0
  602. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +55 -0
  603. data/lib/datadog/tracing/contrib/rake/ext.rb +27 -0
  604. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +101 -0
  605. data/lib/datadog/tracing/contrib/rake/integration.rb +41 -0
  606. data/lib/datadog/tracing/contrib/rake/patcher.rb +33 -0
  607. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +47 -0
  608. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +57 -0
  609. data/lib/datadog/tracing/contrib/redis/ext.rb +35 -0
  610. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +51 -0
  611. data/lib/datadog/tracing/contrib/redis/integration.rb +78 -0
  612. data/lib/datadog/tracing/contrib/redis/patcher.rb +90 -0
  613. data/lib/datadog/tracing/contrib/redis/quantize.rb +80 -0
  614. data/lib/datadog/tracing/contrib/redis/tags.rb +68 -0
  615. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +83 -0
  616. data/lib/datadog/tracing/contrib/redis/vendor/LICENSE +20 -0
  617. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +160 -0
  618. data/lib/datadog/tracing/contrib/registerable.rb +50 -0
  619. data/lib/datadog/tracing/contrib/registry.rb +52 -0
  620. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +44 -0
  621. data/lib/datadog/tracing/contrib/resque/ext.rb +22 -0
  622. data/lib/datadog/tracing/contrib/resque/integration.rb +46 -0
  623. data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
  624. data/lib/datadog/tracing/contrib/resque/resque_job.rb +106 -0
  625. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +55 -0
  626. data/lib/datadog/tracing/contrib/rest_client/ext.rb +28 -0
  627. data/lib/datadog/tracing/contrib/rest_client/integration.rb +41 -0
  628. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +28 -0
  629. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +129 -0
  630. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +38 -0
  631. data/lib/datadog/tracing/contrib/roda/ext.rb +19 -0
  632. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
  633. data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
  634. data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
  635. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +24 -0
  636. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
  637. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +35 -0
  638. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +50 -0
  639. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
  640. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +37 -0
  641. data/lib/datadog/tracing/contrib/sequel/database.rb +60 -0
  642. data/lib/datadog/tracing/contrib/sequel/dataset.rb +67 -0
  643. data/lib/datadog/tracing/contrib/sequel/ext.rb +23 -0
  644. data/lib/datadog/tracing/contrib/sequel/integration.rb +41 -0
  645. data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
  646. data/lib/datadog/tracing/contrib/sequel/utils.rb +88 -0
  647. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +45 -0
  648. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +27 -0
  649. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +42 -0
  650. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
  651. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +65 -0
  652. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +66 -0
  653. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +53 -0
  654. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
  655. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +45 -0
  656. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +59 -0
  657. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +90 -0
  658. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +61 -0
  659. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +36 -0
  660. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +34 -0
  661. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +57 -0
  662. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
  663. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +118 -0
  664. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +44 -0
  665. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +44 -0
  666. data/lib/datadog/tracing/contrib/sinatra/env.rb +36 -0
  667. data/lib/datadog/tracing/contrib/sinatra/ext.rb +37 -0
  668. data/lib/datadog/tracing/contrib/sinatra/framework.rb +114 -0
  669. data/lib/datadog/tracing/contrib/sinatra/integration.rb +41 -0
  670. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +75 -0
  671. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +84 -0
  672. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +116 -0
  673. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +43 -0
  674. data/lib/datadog/tracing/contrib/sneakers/ext.rb +27 -0
  675. data/lib/datadog/tracing/contrib/sneakers/integration.rb +44 -0
  676. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +27 -0
  677. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +60 -0
  678. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +92 -0
  679. data/lib/datadog/tracing/contrib/status_code_matcher.rb +72 -0
  680. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +37 -0
  681. data/lib/datadog/tracing/contrib/stripe/ext.rb +27 -0
  682. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  683. data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
  684. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  685. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +39 -0
  686. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
  687. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +28 -0
  688. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +102 -0
  689. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +41 -0
  690. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +35 -0
  691. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
  692. data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
  693. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
  694. data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
  695. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
  696. data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
  697. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +109 -0
  698. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +177 -0
  699. data/lib/datadog/tracing/contrib.rb +82 -0
  700. data/lib/datadog/tracing/correlation.rb +128 -0
  701. data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
  702. data/lib/datadog/tracing/diagnostics/ext.rb +36 -0
  703. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  704. data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
  705. data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
  706. data/lib/datadog/tracing/distributed/datadog.rb +199 -0
  707. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
  708. data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
  709. data/lib/datadog/tracing/distributed/headers/ext.rb +34 -0
  710. data/lib/datadog/tracing/distributed/helpers.rb +65 -0
  711. data/lib/datadog/tracing/distributed/none.rb +18 -0
  712. data/lib/datadog/tracing/distributed/propagation.rb +127 -0
  713. data/lib/datadog/tracing/distributed/trace_context.rb +415 -0
  714. data/lib/datadog/tracing/event.rb +74 -0
  715. data/lib/datadog/tracing/flush.rb +96 -0
  716. data/lib/datadog/tracing/metadata/analytics.rb +26 -0
  717. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  718. data/lib/datadog/tracing/metadata/ext.rb +191 -0
  719. data/lib/datadog/tracing/metadata/tagging.rb +129 -0
  720. data/lib/datadog/tracing/metadata.rb +20 -0
  721. data/lib/datadog/tracing/pipeline/span_filter.rb +46 -0
  722. data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
  723. data/lib/datadog/tracing/pipeline.rb +61 -0
  724. data/lib/datadog/tracing/propagation/http.rb +14 -0
  725. data/lib/datadog/tracing/remote.rb +78 -0
  726. data/lib/datadog/tracing/runtime/metrics.rb +17 -0
  727. data/lib/datadog/tracing/sampling/all_sampler.rb +25 -0
  728. data/lib/datadog/tracing/sampling/ext.rb +56 -0
  729. data/lib/datadog/tracing/sampling/matcher.rb +88 -0
  730. data/lib/datadog/tracing/sampling/priority_sampler.rb +165 -0
  731. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +94 -0
  732. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +62 -0
  733. data/lib/datadog/tracing/sampling/rate_limiter.rb +186 -0
  734. data/lib/datadog/tracing/sampling/rate_sampler.rb +68 -0
  735. data/lib/datadog/tracing/sampling/rule.rb +77 -0
  736. data/lib/datadog/tracing/sampling/rule_sampler.rb +159 -0
  737. data/lib/datadog/tracing/sampling/sampler.rb +42 -0
  738. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  739. data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
  740. data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
  741. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  742. data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
  743. data/lib/datadog/tracing/span.rb +214 -0
  744. data/lib/datadog/tracing/span_operation.rb +505 -0
  745. data/lib/datadog/tracing/sync_writer.rb +67 -0
  746. data/lib/datadog/tracing/trace_digest.rb +177 -0
  747. data/lib/datadog/tracing/trace_operation.rb +485 -0
  748. data/lib/datadog/tracing/trace_segment.rb +220 -0
  749. data/lib/datadog/tracing/tracer.rb +541 -0
  750. data/lib/datadog/tracing/transport/http/api/instance.rb +37 -0
  751. data/lib/datadog/tracing/transport/http/api/spec.rb +19 -0
  752. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  753. data/lib/datadog/tracing/transport/http/builder.rb +162 -0
  754. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  755. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  756. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  757. data/lib/datadog/tracing/transport/http.rb +125 -0
  758. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  759. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  760. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  761. data/lib/datadog/tracing/transport/io.rb +30 -0
  762. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  763. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  764. data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
  765. data/lib/datadog/tracing/transport/traces.rb +224 -0
  766. data/lib/datadog/tracing/utils.rb +83 -0
  767. data/lib/datadog/tracing/workers/trace_writer.rb +194 -0
  768. data/lib/datadog/tracing/workers.rb +123 -0
  769. data/lib/datadog/tracing/writer.rb +186 -0
  770. data/lib/datadog/tracing.rb +148 -0
  771. data/lib/ddtrace/auto_instrument.rb +16 -0
  772. data/lib/ddtrace/auto_instrument_base.rb +8 -0
  773. data/lib/ddtrace/profiling/preload.rb +2 -0
  774. data/lib/ddtrace/transport/ext.rb +47 -0
  775. data/lib/ddtrace/version.rb +19 -5
  776. data/lib/ddtrace.rb +9 -72
  777. metadata +808 -632
  778. data/.circleci/config.yml +0 -441
  779. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
  780. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
  781. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
  782. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
  783. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
  784. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
  785. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
  786. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
  787. data/.dockerignore +0 -1
  788. data/.env +0 -26
  789. data/.github/CODEOWNERS +0 -1
  790. data/.gitignore +0 -59
  791. data/.rspec +0 -1
  792. data/.rubocop.yml +0 -81
  793. data/.yardopts +0 -5
  794. data/Appraisals +0 -944
  795. data/CONTRIBUTING.md +0 -85
  796. data/Gemfile +0 -7
  797. data/Rakefile +0 -722
  798. data/benchmarks/postgres_database.yml +0 -9
  799. data/benchmarks/sidekiq_test.rb +0 -154
  800. data/ddtrace.gemspec +0 -64
  801. data/docker-compose.yml +0 -335
  802. data/docs/DevelopmentGuide.md +0 -195
  803. data/docs/GettingStarted.md +0 -2142
  804. data/lib/ddtrace/analytics.rb +0 -36
  805. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  806. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  807. data/lib/ddtrace/augmentation/shim.rb +0 -102
  808. data/lib/ddtrace/augmentation.rb +0 -13
  809. data/lib/ddtrace/buffer.rb +0 -119
  810. data/lib/ddtrace/configuration/base.rb +0 -84
  811. data/lib/ddtrace/configuration/dependency_resolver.rb +0 -24
  812. data/lib/ddtrace/configuration/option.rb +0 -64
  813. data/lib/ddtrace/configuration/option_definition.rb +0 -123
  814. data/lib/ddtrace/configuration/option_definition_set.rb +0 -18
  815. data/lib/ddtrace/configuration/option_set.rb +0 -6
  816. data/lib/ddtrace/configuration/options.rb +0 -112
  817. data/lib/ddtrace/configuration/pin_setup.rb +0 -30
  818. data/lib/ddtrace/configuration/settings.rb +0 -187
  819. data/lib/ddtrace/configuration.rb +0 -30
  820. data/lib/ddtrace/context.rb +0 -305
  821. data/lib/ddtrace/context_flush.rb +0 -69
  822. data/lib/ddtrace/context_provider.rb +0 -50
  823. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +0 -25
  824. data/lib/ddtrace/contrib/action_cable/event.rb +0 -65
  825. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +0 -49
  826. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +0 -55
  827. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +0 -50
  828. data/lib/ddtrace/contrib/action_cable/events.rb +0 -33
  829. data/lib/ddtrace/contrib/action_cable/ext.rb +0 -23
  830. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +0 -31
  831. data/lib/ddtrace/contrib/action_cable/integration.rb +0 -38
  832. data/lib/ddtrace/contrib/action_cable/patcher.rb +0 -27
  833. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -148
  834. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +0 -25
  835. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +0 -27
  836. data/lib/ddtrace/contrib/action_pack/ext.rb +0 -16
  837. data/lib/ddtrace/contrib/action_pack/integration.rb +0 -38
  838. data/lib/ddtrace/contrib/action_pack/patcher.rb +0 -23
  839. data/lib/ddtrace/contrib/action_pack/utils.rb +0 -36
  840. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +0 -26
  841. data/lib/ddtrace/contrib/action_view/event.rb +0 -39
  842. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +0 -45
  843. data/lib/ddtrace/contrib/action_view/events/render_template.rb +0 -48
  844. data/lib/ddtrace/contrib/action_view/events.rb +0 -30
  845. data/lib/ddtrace/contrib/action_view/ext.rb +0 -17
  846. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +0 -74
  847. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +0 -167
  848. data/lib/ddtrace/contrib/action_view/integration.rb +0 -45
  849. data/lib/ddtrace/contrib/action_view/patcher.rb +0 -47
  850. data/lib/ddtrace/contrib/action_view/utils.rb +0 -32
  851. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +0 -25
  852. data/lib/ddtrace/contrib/active_model_serializers/event.rb +0 -68
  853. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +0 -32
  854. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +0 -35
  855. data/lib/ddtrace/contrib/active_model_serializers/events.rb +0 -30
  856. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +0 -17
  857. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +0 -40
  858. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -29
  859. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +0 -45
  860. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +0 -30
  861. data/lib/ddtrace/contrib/active_record/event.rb +0 -30
  862. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +0 -60
  863. data/lib/ddtrace/contrib/active_record/events/sql.rb +0 -64
  864. data/lib/ddtrace/contrib/active_record/events.rb +0 -30
  865. data/lib/ddtrace/contrib/active_record/ext.rb +0 -21
  866. data/lib/ddtrace/contrib/active_record/integration.rb +0 -46
  867. data/lib/ddtrace/contrib/active_record/patcher.rb +0 -23
  868. data/lib/ddtrace/contrib/active_record/utils.rb +0 -76
  869. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +0 -157
  870. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +0 -48
  871. data/lib/ddtrace/contrib/active_support/cache/redis.rb +0 -47
  872. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +0 -25
  873. data/lib/ddtrace/contrib/active_support/ext.rb +0 -21
  874. data/lib/ddtrace/contrib/active_support/integration.rb +0 -40
  875. data/lib/ddtrace/contrib/active_support/notifications/event.rb +0 -62
  876. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +0 -66
  877. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +0 -159
  878. data/lib/ddtrace/contrib/active_support/patcher.rb +0 -23
  879. data/lib/ddtrace/contrib/analytics.rb +0 -24
  880. data/lib/ddtrace/contrib/aws/configuration/settings.rb +0 -25
  881. data/lib/ddtrace/contrib/aws/ext.rb +0 -20
  882. data/lib/ddtrace/contrib/aws/instrumentation.rb +0 -56
  883. data/lib/ddtrace/contrib/aws/integration.rb +0 -42
  884. data/lib/ddtrace/contrib/aws/parsed_context.rb +0 -56
  885. data/lib/ddtrace/contrib/aws/patcher.rb +0 -49
  886. data/lib/ddtrace/contrib/aws/services.rb +0 -115
  887. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +0 -15
  888. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -35
  889. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +0 -11
  890. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +0 -23
  891. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +0 -38
  892. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +0 -28
  893. data/lib/ddtrace/contrib/configurable.rb +0 -76
  894. data/lib/ddtrace/contrib/configuration/resolver.rb +0 -16
  895. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +0 -39
  896. data/lib/ddtrace/contrib/configuration/settings.rb +0 -35
  897. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +0 -25
  898. data/lib/ddtrace/contrib/dalli/ext.rb +0 -17
  899. data/lib/ddtrace/contrib/dalli/instrumentation.rb +0 -50
  900. data/lib/ddtrace/contrib/dalli/integration.rb +0 -38
  901. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -67
  902. data/lib/ddtrace/contrib/dalli/quantize.rb +0 -22
  903. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +0 -25
  904. data/lib/ddtrace/contrib/delayed_job/ext.rb +0 -18
  905. data/lib/ddtrace/contrib/delayed_job/integration.rb +0 -38
  906. data/lib/ddtrace/contrib/delayed_job/patcher.rb +0 -28
  907. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -61
  908. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +0 -26
  909. data/lib/ddtrace/contrib/elasticsearch/ext.rb +0 -19
  910. data/lib/ddtrace/contrib/elasticsearch/integration.rb +0 -39
  911. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +0 -118
  912. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +0 -80
  913. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +0 -27
  914. data/lib/ddtrace/contrib/ethon/easy_patch.rb +0 -148
  915. data/lib/ddtrace/contrib/ethon/ext.rb +0 -15
  916. data/lib/ddtrace/contrib/ethon/integration.rb +0 -43
  917. data/lib/ddtrace/contrib/ethon/multi_patch.rb +0 -80
  918. data/lib/ddtrace/contrib/ethon/patcher.rb +0 -25
  919. data/lib/ddtrace/contrib/excon/configuration/settings.rb +0 -28
  920. data/lib/ddtrace/contrib/excon/ext.rb +0 -14
  921. data/lib/ddtrace/contrib/excon/integration.rb +0 -43
  922. data/lib/ddtrace/contrib/excon/middleware.rb +0 -157
  923. data/lib/ddtrace/contrib/excon/patcher.rb +0 -27
  924. data/lib/ddtrace/contrib/extensions.rb +0 -59
  925. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +0 -33
  926. data/lib/ddtrace/contrib/faraday/connection.rb +0 -18
  927. data/lib/ddtrace/contrib/faraday/ext.rb +0 -14
  928. data/lib/ddtrace/contrib/faraday/integration.rb +0 -43
  929. data/lib/ddtrace/contrib/faraday/middleware.rb +0 -81
  930. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -81
  931. data/lib/ddtrace/contrib/faraday/rack_builder.rb +0 -18
  932. data/lib/ddtrace/contrib/grape/configuration/settings.rb +0 -27
  933. data/lib/ddtrace/contrib/grape/endpoint.rb +0 -208
  934. data/lib/ddtrace/contrib/grape/ext.rb +0 -19
  935. data/lib/ddtrace/contrib/grape/instrumentation.rb +0 -33
  936. data/lib/ddtrace/contrib/grape/integration.rb +0 -39
  937. data/lib/ddtrace/contrib/grape/patcher.rb +0 -73
  938. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +0 -27
  939. data/lib/ddtrace/contrib/graphql/ext.rb +0 -13
  940. data/lib/ddtrace/contrib/graphql/integration.rb +0 -39
  941. data/lib/ddtrace/contrib/graphql/patcher.rb +0 -57
  942. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +0 -25
  943. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +0 -56
  944. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +0 -76
  945. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +0 -74
  946. data/lib/ddtrace/contrib/grpc/ext.rb +0 -15
  947. data/lib/ddtrace/contrib/grpc/integration.rb +0 -38
  948. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +0 -49
  949. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -72
  950. data/lib/ddtrace/contrib/http/circuit_breaker.rb +0 -63
  951. data/lib/ddtrace/contrib/http/configuration/settings.rb +0 -27
  952. data/lib/ddtrace/contrib/http/ext.rb +0 -14
  953. data/lib/ddtrace/contrib/http/instrumentation.rb +0 -170
  954. data/lib/ddtrace/contrib/http/integration.rb +0 -45
  955. data/lib/ddtrace/contrib/http/patcher.rb +0 -26
  956. data/lib/ddtrace/contrib/http_annotation_helper.rb +0 -10
  957. data/lib/ddtrace/contrib/integration.rb +0 -16
  958. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +0 -28
  959. data/lib/ddtrace/contrib/mongodb/ext.rb +0 -20
  960. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +0 -68
  961. data/lib/ddtrace/contrib/mongodb/integration.rb +0 -38
  962. data/lib/ddtrace/contrib/mongodb/parsers.rb +0 -68
  963. data/lib/ddtrace/contrib/mongodb/patcher.rb +0 -31
  964. data/lib/ddtrace/contrib/mongodb/subscribers.rb +0 -108
  965. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +0 -25
  966. data/lib/ddtrace/contrib/mysql2/ext.rb +0 -15
  967. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +0 -60
  968. data/lib/ddtrace/contrib/mysql2/integration.rb +0 -38
  969. data/lib/ddtrace/contrib/mysql2/patcher.rb +0 -27
  970. data/lib/ddtrace/contrib/patchable.rb +0 -59
  971. data/lib/ddtrace/contrib/patcher.rb +0 -56
  972. data/lib/ddtrace/contrib/presto/configuration/settings.rb +0 -25
  973. data/lib/ddtrace/contrib/presto/ext.rb +0 -25
  974. data/lib/ddtrace/contrib/presto/instrumentation.rb +0 -107
  975. data/lib/ddtrace/contrib/presto/integration.rb +0 -38
  976. data/lib/ddtrace/contrib/presto/patcher.rb +0 -30
  977. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +0 -25
  978. data/lib/ddtrace/contrib/racecar/event.rb +0 -71
  979. data/lib/ddtrace/contrib/racecar/events/batch.rb +0 -27
  980. data/lib/ddtrace/contrib/racecar/events/message.rb +0 -27
  981. data/lib/ddtrace/contrib/racecar/events.rb +0 -30
  982. data/lib/ddtrace/contrib/racecar/ext.rb +0 -21
  983. data/lib/ddtrace/contrib/racecar/integration.rb +0 -39
  984. data/lib/ddtrace/contrib/racecar/patcher.rb +0 -26
  985. data/lib/ddtrace/contrib/rack/configuration/settings.rb +0 -41
  986. data/lib/ddtrace/contrib/rack/ext.rb +0 -18
  987. data/lib/ddtrace/contrib/rack/integration.rb +0 -38
  988. data/lib/ddtrace/contrib/rack/middlewares.rb +0 -287
  989. data/lib/ddtrace/contrib/rack/patcher.rb +0 -107
  990. data/lib/ddtrace/contrib/rack/request_queue.rb +0 -39
  991. data/lib/ddtrace/contrib/rails/configuration/settings.rb +0 -81
  992. data/lib/ddtrace/contrib/rails/ext.rb +0 -13
  993. data/lib/ddtrace/contrib/rails/framework.rb +0 -125
  994. data/lib/ddtrace/contrib/rails/integration.rb +0 -44
  995. data/lib/ddtrace/contrib/rails/middlewares.rb +0 -38
  996. data/lib/ddtrace/contrib/rails/patcher.rb +0 -74
  997. data/lib/ddtrace/contrib/rails/railtie.rb +0 -17
  998. data/lib/ddtrace/contrib/rails/utils.rb +0 -20
  999. data/lib/ddtrace/contrib/rake/configuration/settings.rb +0 -27
  1000. data/lib/ddtrace/contrib/rake/ext.rb +0 -18
  1001. data/lib/ddtrace/contrib/rake/instrumentation.rb +0 -88
  1002. data/lib/ddtrace/contrib/rake/integration.rb +0 -38
  1003. data/lib/ddtrace/contrib/rake/patcher.rb +0 -30
  1004. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +0 -36
  1005. data/lib/ddtrace/contrib/redis/configuration/settings.rb +0 -25
  1006. data/lib/ddtrace/contrib/redis/ext.rb +0 -18
  1007. data/lib/ddtrace/contrib/redis/integration.rb +0 -42
  1008. data/lib/ddtrace/contrib/redis/patcher.rb +0 -97
  1009. data/lib/ddtrace/contrib/redis/quantize.rb +0 -47
  1010. data/lib/ddtrace/contrib/redis/tags.rb +0 -38
  1011. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +0 -159
  1012. data/lib/ddtrace/contrib/registerable.rb +0 -33
  1013. data/lib/ddtrace/contrib/registry.rb +0 -42
  1014. data/lib/ddtrace/contrib/resque/configuration/settings.rb +0 -26
  1015. data/lib/ddtrace/contrib/resque/ext.rb +0 -14
  1016. data/lib/ddtrace/contrib/resque/integration.rb +0 -47
  1017. data/lib/ddtrace/contrib/resque/patcher.rb +0 -29
  1018. data/lib/ddtrace/contrib/resque/resque_job.rb +0 -80
  1019. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +0 -26
  1020. data/lib/ddtrace/contrib/rest_client/ext.rb +0 -14
  1021. data/lib/ddtrace/contrib/rest_client/integration.rb +0 -38
  1022. data/lib/ddtrace/contrib/rest_client/patcher.rb +0 -23
  1023. data/lib/ddtrace/contrib/rest_client/request_patch.rb +0 -89
  1024. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +0 -23
  1025. data/lib/ddtrace/contrib/sequel/database.rb +0 -61
  1026. data/lib/ddtrace/contrib/sequel/dataset.rb +0 -62
  1027. data/lib/ddtrace/contrib/sequel/ext.rb +0 -15
  1028. data/lib/ddtrace/contrib/sequel/integration.rb +0 -38
  1029. data/lib/ddtrace/contrib/sequel/patcher.rb +0 -33
  1030. data/lib/ddtrace/contrib/sequel/utils.rb +0 -46
  1031. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +0 -24
  1032. data/lib/ddtrace/contrib/shoryuken/ext.rb +0 -18
  1033. data/lib/ddtrace/contrib/shoryuken/integration.rb +0 -39
  1034. data/lib/ddtrace/contrib/shoryuken/patcher.rb +0 -24
  1035. data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -49
  1036. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -43
  1037. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +0 -31
  1038. data/lib/ddtrace/contrib/sidekiq/ext.rb +0 -23
  1039. data/lib/ddtrace/contrib/sidekiq/integration.rb +0 -38
  1040. data/lib/ddtrace/contrib/sidekiq/patcher.rb +0 -34
  1041. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -66
  1042. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -45
  1043. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +0 -34
  1044. data/lib/ddtrace/contrib/sinatra/env.rb +0 -38
  1045. data/lib/ddtrace/contrib/sinatra/ext.rb +0 -18
  1046. data/lib/ddtrace/contrib/sinatra/headers.rb +0 -31
  1047. data/lib/ddtrace/contrib/sinatra/integration.rb +0 -38
  1048. data/lib/ddtrace/contrib/sinatra/patcher.rb +0 -27
  1049. data/lib/ddtrace/contrib/sinatra/tracer.rb +0 -87
  1050. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +0 -75
  1051. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +0 -25
  1052. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +0 -26
  1053. data/lib/ddtrace/contrib/sucker_punch/ext.rb +0 -18
  1054. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +0 -84
  1055. data/lib/ddtrace/contrib/sucker_punch/integration.rb +0 -38
  1056. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +0 -42
  1057. data/lib/ddtrace/correlation.rb +0 -35
  1058. data/lib/ddtrace/diagnostics/health.rb +0 -37
  1059. data/lib/ddtrace/distributed_tracing/headers/b3.rb +0 -44
  1060. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +0 -56
  1061. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +0 -42
  1062. data/lib/ddtrace/distributed_tracing/headers/headers.rb +0 -70
  1063. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +0 -45
  1064. data/lib/ddtrace/encoding.rb +0 -95
  1065. data/lib/ddtrace/environment.rb +0 -27
  1066. data/lib/ddtrace/error.rb +0 -27
  1067. data/lib/ddtrace/event.rb +0 -52
  1068. data/lib/ddtrace/ext/analytics.rb +0 -12
  1069. data/lib/ddtrace/ext/app_types.rb +0 -11
  1070. data/lib/ddtrace/ext/correlation.rb +0 -10
  1071. data/lib/ddtrace/ext/diagnostics.rb +0 -31
  1072. data/lib/ddtrace/ext/distributed.rb +0 -33
  1073. data/lib/ddtrace/ext/environment.rb +0 -13
  1074. data/lib/ddtrace/ext/errors.rb +0 -10
  1075. data/lib/ddtrace/ext/forced_tracing.rb +0 -25
  1076. data/lib/ddtrace/ext/http.rb +0 -46
  1077. data/lib/ddtrace/ext/manual_tracing.rb +0 -9
  1078. data/lib/ddtrace/ext/metrics.rb +0 -15
  1079. data/lib/ddtrace/ext/net.rb +0 -10
  1080. data/lib/ddtrace/ext/priority.rb +0 -16
  1081. data/lib/ddtrace/ext/runtime.rb +0 -26
  1082. data/lib/ddtrace/ext/sampling.rb +0 -16
  1083. data/lib/ddtrace/ext/sql.rb +0 -8
  1084. data/lib/ddtrace/ext/transport.rb +0 -17
  1085. data/lib/ddtrace/forced_tracing.rb +0 -36
  1086. data/lib/ddtrace/logger.rb +0 -81
  1087. data/lib/ddtrace/metrics.rb +0 -222
  1088. data/lib/ddtrace/monkey.rb +0 -58
  1089. data/lib/ddtrace/opentelemetry/extensions.rb +0 -13
  1090. data/lib/ddtrace/opentelemetry/span.rb +0 -33
  1091. data/lib/ddtrace/opentracer/binary_propagator.rb +0 -24
  1092. data/lib/ddtrace/opentracer/carrier.rb +0 -6
  1093. data/lib/ddtrace/opentracer/distributed_headers.rb +0 -52
  1094. data/lib/ddtrace/opentracer/global_tracer.rb +0 -15
  1095. data/lib/ddtrace/opentracer/propagator.rb +0 -22
  1096. data/lib/ddtrace/opentracer/rack_propagator.rb +0 -60
  1097. data/lib/ddtrace/opentracer/scope.rb +0 -15
  1098. data/lib/ddtrace/opentracer/scope_manager.rb +0 -6
  1099. data/lib/ddtrace/opentracer/span.rb +0 -98
  1100. data/lib/ddtrace/opentracer/span_context.rb +0 -14
  1101. data/lib/ddtrace/opentracer/span_context_factory.rb +0 -23
  1102. data/lib/ddtrace/opentracer/text_map_propagator.rb +0 -75
  1103. data/lib/ddtrace/opentracer/thread_local_scope.rb +0 -30
  1104. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +0 -40
  1105. data/lib/ddtrace/opentracer/tracer.rb +0 -208
  1106. data/lib/ddtrace/opentracer.rb +0 -40
  1107. data/lib/ddtrace/patcher.rb +0 -47
  1108. data/lib/ddtrace/pin.rb +0 -114
  1109. data/lib/ddtrace/pipeline/span_filter.rb +0 -38
  1110. data/lib/ddtrace/pipeline/span_processor.rb +0 -20
  1111. data/lib/ddtrace/pipeline.rb +0 -46
  1112. data/lib/ddtrace/propagation/grpc_propagator.rb +0 -61
  1113. data/lib/ddtrace/propagation/http_propagator.rb +0 -75
  1114. data/lib/ddtrace/quantization/hash.rb +0 -103
  1115. data/lib/ddtrace/quantization/http.rb +0 -86
  1116. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  1117. data/lib/ddtrace/runtime/class_count.rb +0 -17
  1118. data/lib/ddtrace/runtime/container.rb +0 -73
  1119. data/lib/ddtrace/runtime/gc.rb +0 -16
  1120. data/lib/ddtrace/runtime/identity.rb +0 -41
  1121. data/lib/ddtrace/runtime/metrics.rb +0 -93
  1122. data/lib/ddtrace/runtime/object_space.rb +0 -19
  1123. data/lib/ddtrace/runtime/socket.rb +0 -14
  1124. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  1125. data/lib/ddtrace/sampler.rb +0 -290
  1126. data/lib/ddtrace/sampling/matcher.rb +0 -57
  1127. data/lib/ddtrace/sampling/rate_limiter.rb +0 -127
  1128. data/lib/ddtrace/sampling/rule.rb +0 -61
  1129. data/lib/ddtrace/sampling/rule_sampler.rb +0 -125
  1130. data/lib/ddtrace/sampling.rb +0 -2
  1131. data/lib/ddtrace/span.rb +0 -297
  1132. data/lib/ddtrace/sync_writer.rb +0 -72
  1133. data/lib/ddtrace/tracer.rb +0 -437
  1134. data/lib/ddtrace/transport/http/adapters/net.rb +0 -112
  1135. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -24
  1136. data/lib/ddtrace/transport/http/adapters/test.rb +0 -77
  1137. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -64
  1138. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -27
  1139. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -22
  1140. data/lib/ddtrace/transport/http/api/instance.rb +0 -29
  1141. data/lib/ddtrace/transport/http/api/map.rb +0 -14
  1142. data/lib/ddtrace/transport/http/api/spec.rb +0 -15
  1143. data/lib/ddtrace/transport/http/api.rb +0 -46
  1144. data/lib/ddtrace/transport/http/builder.rb +0 -165
  1145. data/lib/ddtrace/transport/http/client.rb +0 -107
  1146. data/lib/ddtrace/transport/http/env.rb +0 -48
  1147. data/lib/ddtrace/transport/http/response.rb +0 -26
  1148. data/lib/ddtrace/transport/http/statistics.rb +0 -30
  1149. data/lib/ddtrace/transport/http/traces.rb +0 -140
  1150. data/lib/ddtrace/transport/http.rb +0 -91
  1151. data/lib/ddtrace/transport/io/client.rb +0 -76
  1152. data/lib/ddtrace/transport/io/response.rb +0 -23
  1153. data/lib/ddtrace/transport/io/traces.rb +0 -44
  1154. data/lib/ddtrace/transport/io.rb +0 -26
  1155. data/lib/ddtrace/transport/parcel.rb +0 -17
  1156. data/lib/ddtrace/transport/request.rb +0 -13
  1157. data/lib/ddtrace/transport/response.rb +0 -49
  1158. data/lib/ddtrace/transport/statistics.rb +0 -72
  1159. data/lib/ddtrace/transport/traces.rb +0 -33
  1160. data/lib/ddtrace/utils/database.rb +0 -25
  1161. data/lib/ddtrace/utils/time.rb +0 -14
  1162. data/lib/ddtrace/utils.rb +0 -65
  1163. data/lib/ddtrace/vendor/active_record/connection_specification.rb +0 -301
  1164. data/lib/ddtrace/worker.rb +0 -20
  1165. data/lib/ddtrace/workers/async.rb +0 -165
  1166. data/lib/ddtrace/workers/loop.rb +0 -105
  1167. data/lib/ddtrace/workers/polling.rb +0 -48
  1168. data/lib/ddtrace/workers/queue.rb +0 -39
  1169. data/lib/ddtrace/workers.rb +0 -125
  1170. data/lib/ddtrace/writer.rb +0 -161
  1171. data/tasks/release_gem.rake +0 -28
@@ -1,2142 +0,0 @@
1
- # Datadog Ruby Trace Client
2
-
3
- `ddtrace` is Datadog’s tracing client for Ruby. It is used to trace requests as they flow across web servers,
4
- databases and microservices so that developers have high visibility into bottlenecks and troublesome requests.
5
-
6
- ## Getting started
7
-
8
- For the general APM documentation, see our [setup documentation][setup docs].
9
-
10
- For more information about what APM looks like once your application is sending information to Datadog, take a look at [Visualizing your APM data][visualization docs].
11
-
12
- To contribute, check out the [contribution guidelines][contribution docs] and [development guide][development docs].
13
-
14
- [setup docs]: https://docs.datadoghq.com/tracing/
15
- [development docs]: https://github.com/DataDog/dd-trace-rb/blob/master/README.md#development
16
- [visualization docs]: https://docs.datadoghq.com/tracing/visualization/
17
- [contribution docs]: https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md
18
- [development docs]: https://github.com/DataDog/dd-trace-rb/blob/master/docs/DevelopmentGuide.md
19
-
20
- ## Table of Contents
21
-
22
- - [Compatibility](#compatibility)
23
- - [Installation](#installation)
24
- - [Quickstart for Rails applications](#quickstart-for-rails-applications)
25
- - [Quickstart for Ruby applications](#quickstart-for-ruby-applications)
26
- - [Quickstart for OpenTracing](#quickstart-for-opentracing)
27
- - [Manual instrumentation](#manual-instrumentation)
28
- - [Integration instrumentation](#integration-instrumentation)
29
- - [Action Cable](#action-cable)
30
- - [Action View](#action-view)
31
- - [Active Model Serializers](#active-model-serializers)
32
- - [Action Pack](#action-pack)
33
- - [Active Record](#active-record)
34
- - [Active Support](#active-support)
35
- - [AWS](#aws)
36
- - [Concurrent Ruby](#concurrent-ruby)
37
- - [Dalli](#dalli)
38
- - [DelayedJob](#delayedjob)
39
- - [Elasticsearch](#elasticsearch)
40
- - [Ethon & Typhoeus](#ethon)
41
- - [Excon](#excon)
42
- - [Faraday](#faraday)
43
- - [Grape](#grape)
44
- - [GraphQL](#graphql)
45
- - [gRPC](#grpc)
46
- - [MongoDB](#mongodb)
47
- - [MySQL2](#mysql2)
48
- - [Net/HTTP](#net-http)
49
- - [Presto](#presto)
50
- - [Racecar](#racecar)
51
- - [Rack](#rack)
52
- - [Rails](#rails)
53
- - [Rake](#rake)
54
- - [Redis](#redis)
55
- - [Rest Client](#rest-client)
56
- - [Resque](#resque)
57
- - [Shoryuken](#shoryuken)
58
- - [Sequel](#sequel)
59
- - [Sidekiq](#sidekiq)
60
- - [Sinatra](#sinatra)
61
- - [Sucker Punch](#sucker-punch)
62
- - [Advanced configuration](#advanced-configuration)
63
- - [Tracer settings](#tracer-settings)
64
- - [Custom logging](#custom-logging)
65
- - [Environment and tags](#environment-and-tags)
66
- - [Sampling](#sampling)
67
- - [Priority sampling](#priority-sampling)
68
- - [Distributed tracing](#distributed-tracing)
69
- - [HTTP request queuing](#http-request-queuing)
70
- - [Processing pipeline](#processing-pipeline)
71
- - [Filtering](#filtering)
72
- - [Processing](#processing)
73
- - [Trace correlation](#trace-correlation)
74
- - [Configuring the transport layer](#configuring-the-transport-layer)
75
- - [Metrics](#metrics)
76
- - [For application runtime](#for-application-runtime)
77
- - [OpenTracing](#opentracing)
78
-
79
- ## Compatibility
80
-
81
- **Supported Ruby interpreters**:
82
-
83
- | Type | Documentation | Version | Support type | Gem version support |
84
- | ----- | -------------------------- | ----- | ------------------------------------ | ------------------- |
85
- | MRI | https://www.ruby-lang.org/ | 2.7 | Full | Latest |
86
- | | | 2.6 | Full | Latest |
87
- | | | 2.5 | Full | Latest |
88
- | | | 2.4 | Full | Latest |
89
- | | | 2.3 | Full | Latest |
90
- | | | 2.2 | Full | Latest |
91
- | | | 2.1 | Full | Latest |
92
- | | | 2.0 | Full | Latest |
93
- | | | 1.9.3 | Maintenance (until August 6th, 2020) | < 0.27.0 |
94
- | | | 1.9.1 | Maintenance (until August 6th, 2020) | < 0.27.0 |
95
- | JRuby | http://jruby.org/ | 9.1.5 | Alpha | Latest |
96
-
97
- **Supported web servers**:
98
-
99
- | Type | Documentation | Version | Support type |
100
- | --------- | --------------------------------- | ------------ | ------------ |
101
- | Puma | http://puma.io/ | 2.16+ / 3.6+ | Full |
102
- | Unicorn | https://bogomips.org/unicorn/ | 4.8+ / 5.1+ | Full |
103
- | Passenger | https://www.phusionpassenger.com/ | 5.0+ | Full |
104
-
105
- **Supported tracing frameworks**:
106
-
107
- | Type | Documentation | Version | Gem version support |
108
- | ----------- | ----------------------------------------------- | --------------------- | ------------------- |
109
- | OpenTracing | https://github.com/opentracing/opentracing-ruby | 0.4.1+ (w/ Ruby 2.1+) | >= 0.16.0 |
110
-
111
- *Full* support indicates all tracer features are available.
112
-
113
- *Deprecated* indicates support will transition to *Maintenance* in a future release.
114
-
115
- *Maintenance* indicates only critical bugfixes are backported until EOL.
116
-
117
- *EOL* indicates support is no longer provided.
118
-
119
- ## Installation
120
-
121
- The following steps will help you quickly start tracing your Ruby application.
122
-
123
- ### Setup the Datadog Agent
124
-
125
- Before downloading tracing on your application, install the Datadog Agent. The Ruby APM tracer sends trace data through the Datadog Agent.
126
-
127
- [Install and configure the Datadog Agent](https://docs.datadoghq.com/tracing/setup), see additional documentation for [tracing Docker applications](https://docs.datadoghq.com/tracing/setup/docker/).
128
-
129
- ### Quickstart for Rails applications
130
-
131
- 1. Add the `ddtrace` gem to your Gemfile:
132
-
133
- ```ruby
134
- source 'https://rubygems.org'
135
- gem 'ddtrace'
136
- ```
137
-
138
- 2. Install the gem with `bundle install`
139
- 3. Create a `config/initializers/datadog.rb` file containing:
140
-
141
- ```ruby
142
- Datadog.configure do |c|
143
- # This will activate auto-instrumentation for Rails
144
- c.use :rails
145
- end
146
- ```
147
-
148
- You can also activate additional integrations here (see [Integration instrumentation](#integration-instrumentation))
149
-
150
- ### Quickstart for Ruby applications
151
-
152
- 1. Install the gem with `gem install ddtrace`
153
- 2. Add a configuration block to your Ruby application:
154
-
155
- ```ruby
156
- require 'ddtrace'
157
- Datadog.configure do |c|
158
- # Configure the tracer here.
159
- # Activate integrations, change tracer settings, etc...
160
- # By default without additional configuration, nothing will be traced.
161
- end
162
- ```
163
-
164
- 3. Add or activate instrumentation by doing either of the following:
165
- - Activate integration instrumentation (see [Integration instrumentation](#integration-instrumentation))
166
- - Add manual instrumentation around your code (see [Manual instrumentation](#manual-instrumentation))
167
-
168
- ### Quickstart for OpenTracing
169
-
170
- 1. Install the gem with `gem install ddtrace`
171
- 2. To your OpenTracing configuration file, add the following:
172
-
173
- ```ruby
174
- require 'opentracing'
175
- require 'ddtrace'
176
- require 'ddtrace/opentracer'
177
-
178
- # Activate the Datadog tracer for OpenTracing
179
- OpenTracing.global_tracer = Datadog::OpenTracer::Tracer.new
180
- ```
181
-
182
- 3. (Optional) Add a configuration block to your Ruby application to configure Datadog with:
183
-
184
- ```ruby
185
- Datadog.configure do |c|
186
- # Configure the Datadog tracer here.
187
- # Activate integrations, change tracer settings, etc...
188
- # By default without additional configuration,
189
- # no additional integrations will be traced, only
190
- # what you have instrumented with OpenTracing.
191
- end
192
- ```
193
-
194
- 4. (Optional) Add or activate additional instrumentation by doing either of the following:
195
- - Activate Datadog integration instrumentation (see [Integration instrumentation](#integration-instrumentation))
196
- - Add Datadog manual instrumentation around your code (see [Manual instrumentation](#manual-instrumentation))
197
-
198
- ### Final steps for installation
199
-
200
- After setting up, your services will appear on the [APM services page](https://app.datadoghq.com/apm/services) within a few minutes. Learn more about [using the APM UI][visualization docs].
201
-
202
- ## Manual Instrumentation
203
-
204
- If you aren't using a supported framework instrumentation, you may want to manually instrument your code.
205
-
206
- To trace any Ruby code, you can use the `Datadog.tracer.trace` method:
207
-
208
- ```ruby
209
- Datadog.tracer.trace(name, options) do |span|
210
- # Wrap this block around the code you want to instrument
211
- # Additionally, you can modify the span here.
212
- # e.g. Change the resource name, set tags, etc...
213
- end
214
- ```
215
-
216
- Where `name` should be a `String` that describes the generic kind of operation being done (e.g. `'web.request'`, or `'request.parse'`)
217
-
218
- And `options` is an optional `Hash` that accepts the following parameters:
219
-
220
- | Key | Type | Description | Default |
221
- | --- | --- | --- | --- |
222
- | `service` | `String` | The service name which this span belongs (e.g. `'my-web-service'`) | Tracer `default-service`, `$PROGRAM_NAME` or `'ruby'` |
223
- | `resource` | `String` | Name of the resource or action being operated on. Traces with the same resource value will be grouped together for the purpose of metrics (but still independently viewable.) Usually domain specific, such as a URL, query, request, etc. (e.g. `'Article#submit'`, `http://example.com/articles/list`.) | `name` of Span. |
224
- | `span_type` | `String` | The type of the span (such as `'http'`, `'db'`, etc.) | `nil` |
225
- | `child_of` | `Datadog::Span` / `Datadog::Context` | Parent for this span. If not provided, will automatically become current active span. | `nil` |
226
- | `start_time` | `Integer` | When the span actually starts. Useful when tracing events that have already happened. | `Time.now.utc` |
227
- | `tags` | `Hash` | Extra tags which should be added to the span. | `{}` |
228
- | `on_error` | `Proc` | Handler invoked when a block is provided to trace, and it raises an error. Provided `span` and `error` as arguments. Sets error on the span by default. | `proc { |span, error| span.set_error(error) unless span.nil? }` |
229
-
230
- It's highly recommended you set both `service` and `resource` at a minimum. Spans without a `service` or `resource` as `nil` will be discarded by the Datadog agent.
231
-
232
- Example of manual instrumentation in action:
233
-
234
- ```ruby
235
- get '/posts' do
236
- Datadog.tracer.trace('web.request', service: 'my-blog', resource: 'GET /posts') do |span|
237
- # Trace the activerecord call
238
- Datadog.tracer.trace('posts.fetch') do
239
- @posts = Posts.order(created_at: :desc).limit(10)
240
- end
241
-
242
- # Add some APM tags
243
- span.set_tag('http.method', request.request_method)
244
- span.set_tag('posts.count', @posts.length)
245
-
246
- # Trace the template rendering
247
- Datadog.tracer.trace('template.render') do
248
- erb :index
249
- end
250
- end
251
- end
252
- ```
253
-
254
- ### Asynchronous tracing
255
-
256
- It might not always be possible to wrap `Datadog.tracer.trace` around a block of code. Some event or notification based instrumentation might only notify you when an event begins or ends.
257
-
258
- To trace these operations, you can trace code asynchronously by calling `Datadog.tracer.trace` without a block:
259
-
260
- ```ruby
261
- # Some instrumentation framework calls this after an event finishes...
262
- def db_query(start, finish, query)
263
- span = Datadog.tracer.trace('database.query')
264
- span.resource = query
265
- span.start_time = start
266
- span.finish(finish)
267
- end
268
- ```
269
-
270
- Calling `Datadog.tracer.trace` without a block will cause the function to return a `Datadog::Span` that is started, but not finished. You can then modify this span however you wish, then close it `finish`.
271
-
272
- *You must not leave any unfinished spans.* If any spans are left open when the trace completes, the trace will be discarded. You can [activate debug mode](#tracer-settings) to check for warnings if you suspect this might be happening.
273
-
274
- To avoid this scenario when handling start/finish events, you can use `Datadog.tracer.active_span` to get the current active span.
275
-
276
- ```ruby
277
- # e.g. ActiveSupport::Notifications calls this when an event starts
278
- def start(name, id, payload)
279
- # Start a span
280
- Datadog.tracer.trace(name)
281
- end
282
-
283
- # e.g. ActiveSupport::Notifications calls this when an event finishes
284
- def finish(name, id, payload)
285
- # Retrieve current active span (thread-safe)
286
- current_span = Datadog.tracer.active_span
287
- unless current_span.nil?
288
- current_span.resource = payload[:query]
289
- current_span.finish
290
- end
291
- end
292
- ```
293
- ### Enriching traces from nested methods
294
-
295
- You can tag additional information to the current active span from any method. Note however that if the method is called and there is no span currently active `active_span` will be nil.
296
-
297
- ```ruby
298
- # e.g. adding tag to active span
299
-
300
- current_span = Datadog.tracer.active_span
301
- current_span.set_tag('my_tag', 'my_value') unless current_span.nil?
302
- ```
303
-
304
- You can also get the root span of the current active trace using the `active_root_span` method. This method will return `nil` if there is no active trace.
305
-
306
- ```ruby
307
- # e.g. adding tag to active root span
308
-
309
- current_root_span = Datadog.tracer.active_root_span
310
- current_root_span.set_tag('my_tag', 'my_value') unless current_root_span.nil?
311
- ```
312
-
313
- ## Integration instrumentation
314
-
315
- Many popular libraries and frameworks are supported out-of-the-box, which can be auto-instrumented. Although they are not activated automatically, they can be easily activated and configured by using the `Datadog.configure` API:
316
-
317
- ```ruby
318
- Datadog.configure do |c|
319
- # Activates and configures an integration
320
- c.use :integration_name, options
321
- end
322
- ```
323
-
324
- `options` is a `Hash` of integration-specific configuration settings.
325
-
326
- For a list of available integrations, and their configuration options, please refer to the following:
327
-
328
- | Name | Key | Versions Supported | How to configure | Gem source |
329
- | ------------------------ | -------------------------- | ------------------------ | ----------------------------------- | ------------------------------------------------------------------------------ |
330
- | Action Cable | `action_cable` | `>= 5.0` | *[Link](#action-cable)* | *[Link](https://github.com/rails/rails/tree/master/actioncable)* |
331
- | Action View | `action_view` | `>= 3.0` | *[Link](#action-view)* | *[Link](https://github.com/rails/rails/tree/master/actionview)* |
332
- | Active Model Serializers | `active_model_serializers` | `>= 0.9` | *[Link](#active-model-serializers)* | *[Link](https://github.com/rails-api/active_model_serializers)* |
333
- | Action Pack | `action_pack` | `>= 3.0` | *[Link](#action-pack)* | *[Link](https://github.com/rails/rails/tree/master/actionpack)* |
334
- | Active Record | `active_record` | `>= 3.0` | *[Link](#active-record)* | *[Link](https://github.com/rails/rails/tree/master/activerecord)* |
335
- | Active Support | `active_support` | `>= 3.0` | *[Link](#active-support)* | *[Link](https://github.com/rails/rails/tree/master/activesupport)* |
336
- | AWS | `aws` | `>= 2.0` | *[Link](#aws)* | *[Link](https://github.com/aws/aws-sdk-ruby)* |
337
- | Concurrent Ruby | `concurrent_ruby` | `>= 0.9` | *[Link](#concurrent-ruby)* | *[Link](https://github.com/ruby-concurrency/concurrent-ruby)* |
338
- | Dalli | `dalli` | `>= 2.0` | *[Link](#dalli)* | *[Link](https://github.com/petergoldstein/dalli)* |
339
- | DelayedJob | `delayed_job` | `>= 4.1` | *[Link](#delayedjob)* | *[Link](https://github.com/collectiveidea/delayed_job)* |
340
- | Elasticsearch | `elasticsearch` | `>= 1.0` | *[Link](#elasticsearch)* | *[Link](https://github.com/elastic/elasticsearch-ruby)* |
341
- | Ethon | `ethon` | `>= 0.11` | *[Link](#ethon)* | *[Link](https://github.com/typhoeus/ethon)* |
342
- | Excon | `excon` | `>= 0.50` | *[Link](#excon)* | *[Link](https://github.com/excon/excon)* |
343
- | Faraday | `faraday` | `>= 0.14` | *[Link](#faraday)* | *[Link](https://github.com/lostisland/faraday)* |
344
- | Grape | `grape` | `>= 1.0` | *[Link](#grape)* | *[Link](https://github.com/ruby-grape/grape)* |
345
- | GraphQL | `graphql` | `>= 1.7.9` | *[Link](#graphql)* | *[Link](https://github.com/rmosolgo/graphql-ruby)* |
346
- | gRPC | `grpc` | `>= 1.7` | *[Link](#grpc)* | *[Link](https://github.com/grpc/grpc/tree/master/src/rubyc)* |
347
- | MongoDB | `mongo` | `>= 2.1` | *[Link](#mongodb)* | *[Link](https://github.com/mongodb/mongo-ruby-driver)* |
348
- | MySQL2 | `mysql2` | `>= 0.3.21` | *[Link](#mysql2)* | *[Link](https://github.com/brianmario/mysql2)* |
349
- | Net/HTTP | `http` | *(Any supported Ruby)* | *[Link](#nethttp)* | *[Link](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html)* |
350
- | Presto | `presto` | `>= 0.5.14` | *[Link](#presto)* | *[Link](https://github.com/treasure-data/presto-client-ruby)* |
351
- | Racecar | `racecar` | `>= 0.3.5` | *[Link](#racecar)* | *[Link](https://github.com/zendesk/racecar)* |
352
- | Rack | `rack` | `>= 1.1` | *[Link](#rack)* | *[Link](https://github.com/rack/rack)* |
353
- | Rails | `rails` | `>= 3.0` | *[Link](#rails)* | *[Link](https://github.com/rails/rails)* |
354
- | Rake | `rake` | `>= 12.0` | *[Link](#rake)* | *[Link](https://github.com/ruby/rake)* |
355
- | Redis | `redis` | `>= 3.2` | *[Link](#redis)* | *[Link](https://github.com/redis/redis-rb)* |
356
- | Resque | `resque` | `>= 1.0, < 2.0` | *[Link](#resque)* | *[Link](https://github.com/resque/resque)* |
357
- | Rest Client | `rest-client` | `>= 1.8` | *[Link](#rest-client)* | *[Link](https://github.com/rest-client/rest-client)* |
358
- | Sequel | `sequel` | `>= 3.41` | *[Link](#sequel)* | *[Link](https://github.com/jeremyevans/sequel)* |
359
- | Shoryuken | `shoryuken` | `>= 3.2` | *[Link](#shoryuken)* | *[Link](https://github.com/phstc/shoryuken)* |
360
- | Sidekiq | `sidekiq` | `>= 3.5.4` | *[Link](#sidekiq)* | *[Link](https://github.com/mperham/sidekiq)* |
361
- | Sinatra | `sinatra` | `>= 1.4` | *[Link](#sinatra)* | *[Link](https://github.com/sinatra/sinatra)* |
362
- | Sucker Punch | `sucker_punch` | `>= 2.0` | *[Link](#sucker-punch)* | *[Link](https://github.com/brandonhilkert/sucker_punch)* |
363
-
364
- ### Action Cable
365
-
366
- The Action Cable integration traces broadcast messages and channel actions.
367
-
368
- You can enable it through `Datadog.configure`:
369
-
370
- ```ruby
371
- require 'ddtrace'
372
-
373
- Datadog.configure do |c|
374
- c.use :action_cable, options
375
- end
376
- ```
377
-
378
- Where `options` is an optional `Hash` that accepts the following parameters:
379
-
380
- | Key | Description | Default |
381
- | --- | ----------- | ------- |
382
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
383
- | `service_name` | Service name used for `action_cable` instrumentation | `'action_cable'` |
384
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
385
-
386
- ### Action View
387
-
388
- Most of the time, Active Support is set up as part of Rails, but it can be activated separately:
389
-
390
- ```ruby
391
- require 'actionview'
392
- require 'ddtrace'
393
-
394
- Datadog.configure do |c|
395
- c.use :action_view, options
396
- end
397
- ```
398
-
399
- Where `options` is an optional `Hash` that accepts the following parameters:
400
-
401
- | Key | Description | Default |
402
- | ---| --- | --- |
403
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
404
- | `service_name` | Service name used for rendering instrumentation. | `action_view` |
405
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
406
- | `template_base_path` | Used when the template name is parsed. If you don't store your templates in the `views/` folder, you may need to change this value | `'views/'` |
407
-
408
- ### Active Model Serializers
409
-
410
- The Active Model Serializers integration traces the `serialize` event for version 0.9+ and the `render` event for version 0.10+.
411
-
412
- ```ruby
413
- require 'active_model_serializers'
414
- require 'ddtrace'
415
-
416
- Datadog.configure do |c|
417
- c.use :active_model_serializers, options
418
- end
419
-
420
- my_object = MyModel.new(name: 'my object')
421
- ActiveModelSerializers::SerializableResource.new(test_obj).serializable_hash
422
- ```
423
-
424
- | Key | Description | Default |
425
- | --- | ----------- | ------- |
426
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
427
- | `service_name` | Service name used for `active_model_serializers` instrumentation. | `'active_model_serializers'` |
428
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
429
-
430
- ### Action Pack
431
-
432
- Most of the time, Action Pack is set up as part of Rails, but it can be activated separately:
433
-
434
- ```ruby
435
- require 'actionpack'
436
- require 'ddtrace'
437
-
438
- Datadog.configure do |c|
439
- c.use :action_pack, options
440
- end
441
- ```
442
-
443
- Where `options` is an optional `Hash` that accepts the following parameters:
444
-
445
- | Key | Description | Default |
446
- | ---| --- | --- |
447
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
448
- | `service_name` | Service name used for rendering instrumentation. | `action_pack` |
449
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
450
-
451
- ### Active Record
452
-
453
- Most of the time, Active Record is set up as part of a web framework (Rails, Sinatra...) however, it can be set up alone:
454
-
455
- ```ruby
456
- require 'tmpdir'
457
- require 'sqlite3'
458
- require 'active_record'
459
- require 'ddtrace'
460
-
461
- Datadog.configure do |c|
462
- c.use :active_record, options
463
- end
464
-
465
- Dir::Tmpname.create(['test', '.sqlite']) do |db|
466
- conn = ActiveRecord::Base.establish_connection(adapter: 'sqlite3',
467
- database: db)
468
- conn.connection.execute('SELECT 42') # traced!
469
- end
470
- ```
471
-
472
- Where `options` is an optional `Hash` that accepts the following parameters:
473
-
474
- | Key | Description | Default |
475
- | ---| --- | --- |
476
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
477
- | `orm_service_name` | Service name used for the Ruby ORM portion of `active_record` instrumentation. Overrides service name for ORM spans if explicitly set, which otherwise inherit their service from their parent. | `'active_record'` |
478
- | `service_name` | Service name used for database portion of `active_record` instrumentation. | Name of database adapter (e.g. `'mysql2'`) |
479
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually, you don't need to set this. | `Datadog.tracer` |
480
-
481
- **Configuring trace settings per database**
482
-
483
- You can configure trace settings per database connection by using the `describes` option:
484
-
485
- ```ruby
486
- # Provide a `:describes` option with a connection key.
487
- # Any of the following keys are acceptable and equivalent to one another.
488
- # If a block is provided, it yields a Settings object that
489
- # accepts any of the configuration options listed above.
490
-
491
- Datadog.configure do |c|
492
- # Symbol matching your database connection in config/database.yml
493
- # Only available if you are using Rails with ActiveRecord.
494
- c.use :active_record, describes: :secondary_database, service_name: 'secondary-db'
495
-
496
- c.use :active_record, describes: :secondary_database do |second_db|
497
- second_db.service_name = 'secondary-db'
498
- end
499
-
500
- # Connection string with the following connection settings:
501
- # Adapter, user, host, port, database
502
- c.use :active_record, describes: 'mysql2://root@127.0.0.1:3306/mysql', service_name: 'secondary-db'
503
-
504
- # Hash with following connection settings
505
- # Adapter, user, host, port, database
506
- c.use :active_record, describes: {
507
- adapter: 'mysql2',
508
- host: '127.0.0.1',
509
- port: '3306',
510
- database: 'mysql',
511
- username: 'root'
512
- },
513
- service_name: 'secondary-db'
514
- end
515
- ```
516
-
517
- If ActiveRecord traces an event that uses a connection that matches a key defined by `describes`, it will use the trace settings assigned to that connection. If the connection does not match any of the described connections, it will use default settings defined by `c.use :active_record` instead.
518
-
519
- ### Active Support
520
-
521
- Most of the time, Active Support is set up as part of Rails, but it can be activated separately:
522
-
523
- ```ruby
524
- require 'activesupport'
525
- require 'ddtrace'
526
-
527
- Datadog.configure do |c|
528
- c.use :active_support, options
529
- end
530
-
531
- cache = ActiveSupport::Cache::MemoryStore.new
532
- cache.read('city')
533
- ```
534
-
535
- Where `options` is an optional `Hash` that accepts the following parameters:
536
-
537
- | Key | Description | Default |
538
- | ---| --- | --- |
539
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
540
- | `cache_service` | Service name used for caching with `active_support` instrumentation. | `active_support-cache` |
541
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
542
-
543
- ### AWS
544
-
545
- The AWS integration will trace every interaction (e.g. API calls) with AWS services (S3, ElastiCache etc.).
546
-
547
- ```ruby
548
- require 'aws-sdk'
549
- require 'ddtrace'
550
-
551
- Datadog.configure do |c|
552
- c.use :aws, options
553
- end
554
-
555
- # Perform traced call
556
- Aws::S3::Client.new.list_buckets
557
- ```
558
-
559
- Where `options` is an optional `Hash` that accepts the following parameters:
560
-
561
- | Key | Description | Default |
562
- | --- | ----------- | ------- |
563
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
564
- | `service_name` | Service name used for `aws` instrumentation | `'aws'` |
565
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
566
-
567
- ### Concurrent Ruby
568
-
569
- The Concurrent Ruby integration adds support for context propagation when using `::Concurrent::Future`.
570
- Making sure that code traced within the `Future#execute` will have correct parent set.
571
-
572
- To activate your integration, use the `Datadog.configure` method:
573
-
574
- ```ruby
575
- # Inside Rails initializer or equivalent
576
- Datadog.configure do |c|
577
- # Patches ::Concurrent::Future to use ExecutorService that propagates context
578
- c.use :concurrent_ruby, options
579
- end
580
-
581
- # Pass context into code executed within Concurrent::Future
582
- Datadog.tracer.trace('outer') do
583
- Concurrent::Future.execute { Datadog.tracer.trace('inner') { } }.wait
584
- end
585
- ```
586
-
587
- Where `options` is an optional `Hash` that accepts the following parameters:
588
-
589
- | Key | Description | Default |
590
- | --- | ----------- | ------- |
591
- | `service_name` | Service name used for `concurrent-ruby` instrumentation | `'concurrent-ruby'` |
592
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
593
-
594
- ### Dalli
595
-
596
- Dalli integration will trace all calls to your `memcached` server:
597
-
598
- ```ruby
599
- require 'dalli'
600
- require 'ddtrace'
601
-
602
- # Configure default Dalli tracing behavior
603
- Datadog.configure do |c|
604
- c.use :dalli, options
605
- end
606
-
607
- # Configure Dalli tracing behavior for single client
608
- client = Dalli::Client.new('localhost:11211', options)
609
- client.set('abc', 123)
610
- ```
611
-
612
- Where `options` is an optional `Hash` that accepts the following parameters:
613
-
614
- | Key | Description | Default |
615
- | --- | ----------- | ------- |
616
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
617
- | `service_name` | Service name used for `dalli` instrumentation | `'memcached'` |
618
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
619
-
620
- ### DelayedJob
621
-
622
- The DelayedJob integration uses lifecycle hooks to trace the job executions.
623
-
624
- You can enable it through `Datadog.configure`:
625
-
626
- ```ruby
627
- require 'ddtrace'
628
-
629
- Datadog.configure do |c|
630
- c.use :delayed_job, options
631
- end
632
- ```
633
-
634
- Where `options` is an optional `Hash` that accepts the following parameters:
635
-
636
- | Key | Description | Default |
637
- | --- | ----------- | ------- |
638
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
639
- | `service_name` | Service name used for `DelayedJob` instrumentation | `'delayed_job'` |
640
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
641
-
642
- ### Elasticsearch
643
-
644
- The Elasticsearch integration will trace any call to `perform_request` in the `Client` object:
645
-
646
- ```ruby
647
- require 'elasticsearch/transport'
648
- require 'ddtrace'
649
-
650
- Datadog.configure do |c|
651
- c.use :elasticsearch, options
652
- end
653
-
654
- # Perform a query to Elasticsearch
655
- client = Elasticsearch::Client.new url: 'http://127.0.0.1:9200'
656
- response = client.perform_request 'GET', '_cluster/health'
657
- ```
658
-
659
- Where `options` is an optional `Hash` that accepts the following parameters:
660
-
661
- | Key | Description | Default |
662
- | --- | ----------- | ------- |
663
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
664
- | `quantize` | Hash containing options for quantization. May include `:show` with an Array of keys to not quantize (or `:all` to skip quantization), or `:exclude` with Array of keys to exclude entirely. | `{}` |
665
- | `service_name` | Service name used for `elasticsearch` instrumentation | `'elasticsearch'` |
666
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
667
-
668
- ### Ethon
669
-
670
- The `ethon` integration will trace any HTTP request through `Easy` or `Multi` objects. Note that this integration also supports `Typhoeus` library which is based on `Ethon`.
671
-
672
- ```ruby
673
- require 'ddtrace'
674
-
675
- Datadog.configure do |c|
676
- c.use :ethon, options
677
-
678
- # optionally, specify a different service name for hostnames matching a regex
679
- c.use :ethon, describes: /user-[^.]+\.example\.com/ do |ethon|
680
- ethon.service_name = 'user.example.com'
681
- ethon.split_by_domain = false # Only necessary if split_by_domain is true by default
682
- end
683
- end
684
- ```
685
-
686
- Where `options` is an optional `Hash` that accepts the following parameters:
687
-
688
- | Key | Description | Default |
689
- | --- | ----------- | ------- |
690
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
691
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
692
- | `service_name` | Service name for `ethon` instrumentation. | `'ethon'` |
693
- | `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
694
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
695
-
696
- ### Excon
697
-
698
- The `excon` integration is available through the `ddtrace` middleware:
699
-
700
- ```ruby
701
- require 'excon'
702
- require 'ddtrace'
703
-
704
- # Configure default Excon tracing behavior
705
- Datadog.configure do |c|
706
- c.use :excon, options
707
-
708
- # optionally, specify a different service name for hostnames matching a regex
709
- c.use :excon, describes: /user-[^.]+\.example\.com/ do |excon|
710
- excon.service_name = 'user.example.com'
711
- excon.split_by_domain = false # Only necessary if split_by_domain is true by default
712
- end
713
- end
714
-
715
- connection = Excon.new('https://example.com')
716
- connection.get
717
- ```
718
-
719
- Where `options` is an optional `Hash` that accepts the following parameters:
720
-
721
- | Key | Description | Default |
722
- | --- | ----------- | ------- |
723
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
724
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
725
- | `error_handler` | A `Proc` that accepts a `response` parameter. If it evaluates to a *truthy* value, the trace span is marked as an error. By default only sets 5XX responses as errors. | `nil` |
726
- | `service_name` | Service name for Excon instrumentation. When provided to middleware for a specific connection, it applies only to that connection object. | `'excon'` |
727
- | `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
728
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
729
-
730
- **Configuring connections to use different settings**
731
-
732
- If you use multiple connections with Excon, you can give each of them different settings by configuring their constructors with middleware:
733
-
734
- ```ruby
735
- # Wrap the Datadog tracing middleware around the default middleware stack
736
- Excon.new(
737
- 'http://example.com',
738
- middlewares: Datadog::Contrib::Excon::Middleware.with(options).around_default_stack
739
- )
740
-
741
- # Insert the middleware into a custom middleware stack.
742
- # NOTE: Trace middleware must be inserted after ResponseParser!
743
- Excon.new(
744
- 'http://example.com',
745
- middlewares: [
746
- Excon::Middleware::ResponseParser,
747
- Datadog::Contrib::Excon::Middleware.with(options),
748
- Excon::Middleware::Idempotent
749
- ]
750
- )
751
- ```
752
-
753
- Where `options` is a Hash that contains any of the parameters listed in the table above.
754
-
755
- ### Faraday
756
-
757
- The `faraday` integration is available through the `ddtrace` middleware:
758
-
759
- ```ruby
760
- require 'faraday'
761
- require 'ddtrace'
762
-
763
- # Configure default Faraday tracing behavior
764
- Datadog.configure do |c|
765
- c.use :faraday, options
766
-
767
- # optionally, specify a different service name for hostnames matching a regex
768
- c.use :faraday, describes: /user-[^.]+\.example\.com/ do |faraday|
769
- faraday.service_name = 'user.example.com'
770
- faraday.split_by_domain = false # Only necessary if split_by_domain is true by default
771
- end
772
- end
773
-
774
- # Configure Faraday tracing behavior for single connection
775
- connection = Faraday.new('https://example.com') do |builder|
776
- builder.use(:ddtrace, options)
777
- builder.adapter Faraday.default_adapter
778
- end
779
-
780
- connection.get('/foo')
781
- ```
782
-
783
- Where `options` is an optional `Hash` that accepts the following parameters:
784
-
785
- | Key | Description | Default |
786
- | --- | ----------- | ------- |
787
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
788
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
789
- | `error_handler` | A `Proc` that accepts a `response` parameter. If it evaluates to a *truthy* value, the trace span is marked as an error. By default only sets 5XX responses as errors. | `nil` |
790
- | `service_name` | Service name for Faraday instrumentation. When provided to middleware for a specific connection, it applies only to that connection object. | `'faraday'` |
791
- | `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
792
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually, you don't need to set this. | `Datadog.tracer` |
793
-
794
- ### Grape
795
-
796
- The Grape integration adds the instrumentation to Grape endpoints and filters. This integration can work side by side with other integrations like Rack and Rails.
797
-
798
- To activate your integration, use the `Datadog.configure` method before defining your Grape application:
799
-
800
- ```ruby
801
- # api.rb
802
- require 'grape'
803
- require 'ddtrace'
804
-
805
- Datadog.configure do |c|
806
- c.use :grape, options
807
- end
808
-
809
- # Then define your application
810
- class RackTestingAPI < Grape::API
811
- desc 'main endpoint'
812
- get :success do
813
- 'Hello world!'
814
- end
815
- end
816
- ```
817
-
818
- Where `options` is an optional `Hash` that accepts the following parameters:
819
-
820
- | Key | Description | Default |
821
- | --- | ----------- | ------- |
822
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
823
- | `enabled` | Defines whether Grape should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
824
- | `service_name` | Service name used for `grape` instrumentation | `'grape'` |
825
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
826
-
827
- ### GraphQL
828
-
829
- The GraphQL integration activates instrumentation for GraphQL queries.
830
-
831
- To activate your integration, use the `Datadog.configure` method:
832
-
833
- ```ruby
834
- # Inside Rails initializer or equivalent
835
- Datadog.configure do |c|
836
- c.use :graphql, schemas: [YourSchema], options
837
- end
838
-
839
- # Then run a GraphQL query
840
- YourSchema.execute(query, variables: {}, context: {}, operation_name: nil)
841
- ```
842
-
843
- The `use :graphql` method accepts the following parameters. Additional options can be substituted in for `options`:
844
-
845
- | Key | Description | Default |
846
- | --- | ----------- | ------- |
847
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
848
- | `service_name` | Service name used for `graphql` instrumentation | `'ruby-graphql'` |
849
- | `schemas` | Required. Array of `GraphQL::Schema` objects which to trace. Tracing will be added to all the schemas listed, using the options provided to this configuration. If you do not provide any, then tracing will not be activated. | `[]` |
850
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
851
-
852
- **Manually configuring GraphQL schemas**
853
-
854
- If you prefer to individually configure the tracer settings for a schema (e.g. you have multiple schemas with different service names), in the schema definition, you can add the following [using the GraphQL API](http://graphql-ruby.org/queries/tracing.html):
855
-
856
- ```ruby
857
- # Class-based schema
858
- class YourSchema < GraphQL::Schema
859
- use(
860
- GraphQL::Tracing::DataDogTracing,
861
- service: 'graphql'
862
- )
863
- end
864
- ```
865
-
866
- ```ruby
867
- # .define-style schema
868
- YourSchema = GraphQL::Schema.define do
869
- use(
870
- GraphQL::Tracing::DataDogTracing,
871
- service: 'graphql'
872
- )
873
- end
874
- ```
875
-
876
- Or you can modify an already defined schema:
877
-
878
- ```ruby
879
- # Class-based schema
880
- YourSchema.use(
881
- GraphQL::Tracing::DataDogTracing,
882
- service: 'graphql'
883
- )
884
- ```
885
-
886
- ```ruby
887
- # .define-style schema
888
- YourSchema.define do
889
- use(
890
- GraphQL::Tracing::DataDogTracing,
891
- service: 'graphql'
892
- )
893
- end
894
- ```
895
-
896
- Do *NOT* `use :graphql` in `Datadog.configure` if you choose to configure manually, as to avoid double tracing. These two means of configuring GraphQL tracing are considered mutually exclusive.
897
-
898
- ### gRPC
899
-
900
- The `grpc` integration adds both client and server interceptors, which run as middleware before executing the service's remote procedure call. As gRPC applications are often distributed, the integration shares trace information between client and server.
901
-
902
- To setup your integration, use the `Datadog.configure` method like so:
903
-
904
- ```ruby
905
- require 'grpc'
906
- require 'ddtrace'
907
-
908
- Datadog.configure do |c|
909
- c.use :grpc, options
910
- end
911
-
912
- # Server side
913
- server = GRPC::RpcServer.new
914
- server.add_http2_port('localhost:50051', :this_port_is_insecure)
915
- server.handle(Demo)
916
- server.run_till_terminated
917
-
918
- # Client side
919
- client = Demo.rpc_stub_class.new('localhost:50051', :this_channel_is_insecure)
920
- client.my_endpoint(DemoMessage.new(contents: 'hello!'))
921
- ```
922
-
923
- Where `options` is an optional `Hash` that accepts the following parameters:
924
-
925
- | Key | Description | Default |
926
- | --- | ----------- | ------- |
927
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
928
- | `service_name` | Service name used for `grpc` instrumentation | `'grpc'` |
929
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
930
-
931
- **Configuring clients to use different settings**
932
-
933
- In situations where you have multiple clients calling multiple distinct services, you may pass the Datadog interceptor directly, like so
934
-
935
- ```ruby
936
- configured_interceptor = Datadog::Contrib::GRPC::DatadogInterceptor::Client.new do |c|
937
- c.service_name = "Alternate"
938
- end
939
-
940
- alternate_client = Demo::Echo::Service.rpc_stub_class.new(
941
- 'localhost:50052',
942
- :this_channel_is_insecure,
943
- :interceptors => [configured_interceptor]
944
- )
945
- ```
946
-
947
- The integration will ensure that the `configured_interceptor` establishes a unique tracing setup for that client instance.
948
-
949
- ### MongoDB
950
-
951
- The integration traces any `Command` that is sent from the [MongoDB Ruby Driver](https://github.com/mongodb/mongo-ruby-driver) to a MongoDB cluster. By extension, Object Document Mappers (ODM) such as Mongoid are automatically instrumented if they use the official Ruby driver. To activate the integration, simply:
952
-
953
- ```ruby
954
- require 'mongo'
955
- require 'ddtrace'
956
-
957
- Datadog.configure do |c|
958
- c.use :mongo, options
959
- end
960
-
961
- # Create a MongoDB client and use it as usual
962
- client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'artists')
963
- collection = client[:people]
964
- collection.insert_one({ name: 'Steve' })
965
-
966
- # In case you want to override the global configuration for a certain client instance
967
- Datadog.configure(client, options)
968
- ```
969
-
970
- Where `options` is an optional `Hash` that accepts the following parameters:
971
-
972
- | Key | Description | Default |
973
- | --- | ----------- | ------- |
974
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
975
- | `quantize` | Hash containing options for quantization. May include `:show` with an Array of keys to not quantize (or `:all` to skip quantization), or `:exclude` with Array of keys to exclude entirely. | `{ show: [:collection, :database, :operation] }` |
976
- | `service_name` | Service name used for `mongo` instrumentation | `'mongodb'` |
977
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
978
-
979
- ### MySQL2
980
-
981
- The MySQL2 integration traces any SQL command sent through `mysql2` gem.
982
-
983
- ```ruby
984
- require 'mysql2'
985
- require 'ddtrace'
986
-
987
- Datadog.configure do |c|
988
- c.use :mysql2, options
989
- end
990
-
991
- client = Mysql2::Client.new(:host => "localhost", :username => "root")
992
- client.query("SELECT * FROM users WHERE group='x'")
993
- ```
994
-
995
- Where `options` is an optional `Hash` that accepts the following parameters:
996
-
997
- | Key | Description | Default |
998
- | --- | ----------- | ------- |
999
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1000
- | `service_name` | Service name used for `mysql2` instrumentation | `'mysql2'` |
1001
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1002
-
1003
- ### Net/HTTP
1004
-
1005
- The Net/HTTP integration will trace any HTTP call using the standard lib Net::HTTP module.
1006
-
1007
- ```ruby
1008
- require 'net/http'
1009
- require 'ddtrace'
1010
-
1011
- Datadog.configure do |c|
1012
- c.use :http, options
1013
-
1014
- # optionally, specify a different service name for hostnames matching a regex
1015
- c.use :http, describes: /user-[^.]+\.example\.com/ do |http|
1016
- http.service_name = 'user.example.com'
1017
- http.split_by_domain = false # Only necessary if split_by_domain is true by default
1018
- end
1019
- end
1020
-
1021
- Net::HTTP.start('127.0.0.1', 8080) do |http|
1022
- request = Net::HTTP::Get.new '/index'
1023
- response = http.request(request)
1024
- end
1025
-
1026
- content = Net::HTTP.get(URI('http://127.0.0.1/index.html'))
1027
- ```
1028
-
1029
- Where `options` is an optional `Hash` that accepts the following parameters:
1030
-
1031
- | Key | Description | Default |
1032
- | --- | ----------- | ------- |
1033
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1034
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
1035
- | `service_name` | Service name used for `http` instrumentation | `'net/http'` |
1036
- | `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
1037
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1038
-
1039
- If you wish to configure each connection object individually, you may use the `Datadog.configure` as it follows:
1040
-
1041
- ```ruby
1042
- client = Net::HTTP.new(host, port)
1043
- Datadog.configure(client, options)
1044
- ```
1045
-
1046
- ### Presto
1047
-
1048
- The Presto integration traces any SQL command sent through `presto-client` gem.
1049
-
1050
- ```ruby
1051
- require 'presto-client'
1052
- require 'ddtrace'
1053
-
1054
- Datadog.configure do |c|
1055
- c.use :presto, options
1056
- end
1057
-
1058
- client = Presto::Client.new(
1059
- server: "localhost:8880",
1060
- ssl: {verify: false},
1061
- catalog: "native",
1062
- schema: "default",
1063
- time_zone: "US/Pacific",
1064
- language: "English",
1065
- http_debug: true,
1066
- )
1067
-
1068
- client.run("select * from system.nodes")
1069
- ```
1070
-
1071
- Where `options` is an optional `Hash` that accepts the following parameters:
1072
-
1073
- | Key | Description | Default |
1074
- | --- | ----------- | ------- |
1075
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1076
- | `service_name` | Service name used for `presto` instrumentation | `'presto'` |
1077
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1078
-
1079
- ### Racecar
1080
-
1081
- The Racecar integration provides tracing for Racecar jobs.
1082
-
1083
- You can enable it through `Datadog.configure`:
1084
-
1085
- ```ruby
1086
- require 'ddtrace'
1087
-
1088
- Datadog.configure do |c|
1089
- c.use :racecar, options
1090
- end
1091
- ```
1092
-
1093
- Where `options` is an optional `Hash` that accepts the following parameters:
1094
-
1095
- | Key | Description | Default |
1096
- | --- | ----------- | ------- |
1097
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1098
- | `service_name` | Service name used for `racecar` instrumentation | `'racecar'` |
1099
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1100
-
1101
- ### Rack
1102
-
1103
- The Rack integration provides a middleware that traces all requests before they reach the underlying framework or application. It responds to the Rack minimal interface, providing reasonable values that can be retrieved at the Rack level.
1104
-
1105
- This integration is automatically activated with web frameworks like Rails. If you're using a plain Rack application, enable the integration it to your `config.ru`:
1106
-
1107
- ```ruby
1108
- # config.ru example
1109
- require 'ddtrace'
1110
-
1111
- Datadog.configure do |c|
1112
- c.use :rack, options
1113
- end
1114
-
1115
- use Datadog::Contrib::Rack::TraceMiddleware
1116
-
1117
- app = proc do |env|
1118
- [ 200, {'Content-Type' => 'text/plain'}, ['OK'] ]
1119
- end
1120
-
1121
- run app
1122
- ```
1123
-
1124
- Where `options` is an optional `Hash` that accepts the following parameters:
1125
-
1126
- | Key | Description | Default |
1127
- | --- | ----------- | ------- |
1128
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
1129
- | `application` | Your Rack application. Required for `middleware_names`. | `nil` |
1130
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) so that this service trace is connected with a trace of another service if tracing headers are received | `true` |
1131
- | `headers` | Hash of HTTP request or response headers to add as tags to the `rack.request`. Accepts `request` and `response` keys with Array values e.g. `['Last-Modified']`. Adds `http.request.headers.*` and `http.response.headers.*` tags respectively. | `{ response: ['Content-Type', 'X-Request-ID'] }` |
1132
- | `middleware_names` | Enable this if you want to use the middleware classes as the resource names for `rack` spans. Requires `application` option to use. | `false` |
1133
- | `quantize` | Hash containing options for quantization. May include `:query` or `:fragment`. | `{}` |
1134
- | `quantize.query` | Hash containing options for query portion of URL quantization. May include `:show` or `:exclude`. See options below. Option must be nested inside the `quantize` option. | `{}` |
1135
- | `quantize.query.show` | Defines which values should always be shown. Shows no values by default. May be an Array of strings, or `:all` to show all values. Option must be nested inside the `query` option. | `nil` |
1136
- | `quantize.query.exclude` | Defines which values should be removed entirely. Excludes nothing by default. May be an Array of strings, or `:all` to remove the query string entirely. Option must be nested inside the `query` option. | `nil` |
1137
- | `quantize.fragment` | Defines behavior for URL fragments. Removes fragments by default. May be `:show` to show URL fragments. Option must be nested inside the `quantize` option. | `nil` |
1138
- | `request_queuing` | Track HTTP request time spent in the queue of the frontend server. See [HTTP request queuing](#http-request-queuing) for setup details. Set to `true` to enable. | `false` |
1139
- | `service_name` | Service name used for `rack` instrumentation | `'rack'` |
1140
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1141
- | `web_service_name` | Service name for frontend server request queuing spans. (e.g. `'nginx'`) | `'web-server'` |
1142
-
1143
-
1144
- **Configuring URL quantization behavior**
1145
-
1146
- ```ruby
1147
- Datadog.configure do |c|
1148
- # Default behavior: all values are quantized, fragment is removed.
1149
- # http://example.com/path?category_id=1&sort_by=asc#featured --> http://example.com/path?category_id&sort_by
1150
- # http://example.com/path?categories[]=1&categories[]=2 --> http://example.com/path?categories[]
1151
-
1152
- # Show values for any query string parameter matching 'category_id' exactly
1153
- # http://example.com/path?category_id=1&sort_by=asc#featured --> http://example.com/path?category_id=1&sort_by
1154
- c.use :rack, quantize: { query: { show: ['category_id'] } }
1155
-
1156
- # Show all values for all query string parameters
1157
- # http://example.com/path?category_id=1&sort_by=asc#featured --> http://example.com/path?category_id=1&sort_by=asc
1158
- c.use :rack, quantize: { query: { show: :all } }
1159
-
1160
- # Totally exclude any query string parameter matching 'sort_by' exactly
1161
- # http://example.com/path?category_id=1&sort_by=asc#featured --> http://example.com/path?category_id
1162
- c.use :rack, quantize: { query: { exclude: ['sort_by'] } }
1163
-
1164
- # Remove the query string entirely
1165
- # http://example.com/path?category_id=1&sort_by=asc#featured --> http://example.com/path
1166
- c.use :rack, quantize: { query: { exclude: :all } }
1167
-
1168
- # Show URL fragments
1169
- # http://example.com/path?category_id=1&sort_by=asc#featured --> http://example.com/path?category_id&sort_by#featured
1170
- c.use :rack, quantize: { fragment: :show }
1171
- end
1172
- ```
1173
-
1174
- ### Rails
1175
-
1176
- The Rails integration will trace requests, database calls, templates rendering, and cache read/write/delete operations. The integration makes use of the Active Support Instrumentation, listening to the Notification API so that any operation instrumented by the API is traced.
1177
-
1178
- To enable the Rails instrumentation, create an initializer file in your `config/initializers` folder:
1179
-
1180
- ```ruby
1181
- # config/initializers/datadog.rb
1182
- require 'ddtrace'
1183
-
1184
- Datadog.configure do |c|
1185
- c.use :rails, options
1186
- end
1187
- ```
1188
-
1189
- Where `options` is an optional `Hash` that accepts the following parameters:
1190
-
1191
- | Key | Description | Default |
1192
- | --- | ----------- | ------- |
1193
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `nil` |
1194
- | `cache_service` | Cache service name used when tracing cache activity | `'<app_name>-cache'` |
1195
- | `controller_service` | Service name used when tracing a Rails action controller | `'<app_name>'` |
1196
- | `database_service` | Database service name used when tracing database activity | `'<app_name>-<adapter_name>'` |
1197
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) so that this service trace is connected with a trace of another service if tracing headers are received | `true` |
1198
- | `exception_controller` | Class or Module which identifies a custom exception controller class. Tracer provides improved error behavior when it can identify custom exception controllers. By default, without this option, it 'guesses' what a custom exception controller looks like. Providing this option aids this identification. | `nil` |
1199
- | `middleware` | Add the trace middleware to the Rails application. Set to `false` if you don't want the middleware to load. | `true` |
1200
- | `middleware_names` | Enables any short-circuited middleware requests to display the middleware name as a resource for the trace. | `false` |
1201
- | `service_name` | Service name used when tracing application requests (on the `rack` level) | `'<app_name>'` (inferred from your Rails application namespace) |
1202
- | `template_base_path` | Used when the template name is parsed. If you don't store your templates in the `views/` folder, you may need to change this value | `'views/'` |
1203
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually, you don't need to set this. | `Datadog.tracer` |
1204
-
1205
- **Supported versions**
1206
-
1207
- | Ruby Versions | Supported Rails Versions |
1208
- | ------------- | ------------------------ |
1209
- | 2.0 | 3.0 - 3.2 |
1210
- | 2.1 | 3.0 - 4.2 |
1211
- | 2.2 - 2.3 | 3.0 - 5.2 |
1212
- | 2.4 | 4.2.8 - 5.2 |
1213
- | 2.5 | 4.2.8 - 6.0 |
1214
- | 2.6 - 2.7 | 5.0 - 6.0 |
1215
-
1216
- ### Rake
1217
-
1218
- You can add instrumentation around your Rake tasks by activating the `rake` integration. Each task and its subsequent subtasks will be traced.
1219
-
1220
- To activate Rake task tracing, add the following to your `Rakefile`:
1221
-
1222
- ```ruby
1223
- # At the top of your Rakefile:
1224
- require 'rake'
1225
- require 'ddtrace'
1226
-
1227
- Datadog.configure do |c|
1228
- c.use :rake, options
1229
- end
1230
-
1231
- task :my_task do
1232
- # Do something task work here...
1233
- end
1234
-
1235
- Rake::Task['my_task'].invoke
1236
- ```
1237
-
1238
- Where `options` is an optional `Hash` that accepts the following parameters:
1239
-
1240
- | Key | Description | Default |
1241
- | --- | ----------- | ------- |
1242
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
1243
- | `enabled` | Defines whether Rake tasks should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
1244
- | `quantize` | Hash containing options for quantization of task arguments. See below for more details and examples. | `{}` |
1245
- | `service_name` | Service name used for `rake` instrumentation | `'rake'` |
1246
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually, you don't need to set this. | `Datadog.tracer` |
1247
-
1248
- **Configuring task quantization behavior**
1249
-
1250
- ```ruby
1251
- Datadog.configure do |c|
1252
- # Given a task that accepts :one, :two, :three...
1253
- # Invoked with 'foo', 'bar', 'baz'.
1254
-
1255
- # Default behavior: all arguments are quantized.
1256
- # `rake.invoke.args` tag --> ['?']
1257
- # `rake.execute.args` tag --> { one: '?', two: '?', three: '?' }
1258
- c.use :rake
1259
-
1260
- # Show values for any argument matching :two exactly
1261
- # `rake.invoke.args` tag --> ['?']
1262
- # `rake.execute.args` tag --> { one: '?', two: 'bar', three: '?' }
1263
- c.use :rake, quantize: { args: { show: [:two] } }
1264
-
1265
- # Show all values for all arguments.
1266
- # `rake.invoke.args` tag --> ['foo', 'bar', 'baz']
1267
- # `rake.execute.args` tag --> { one: 'foo', two: 'bar', three: 'baz' }
1268
- c.use :rake, quantize: { args: { show: :all } }
1269
-
1270
- # Totally exclude any argument matching :three exactly
1271
- # `rake.invoke.args` tag --> ['?']
1272
- # `rake.execute.args` tag --> { one: '?', two: '?' }
1273
- c.use :rake, quantize: { args: { exclude: [:three] } }
1274
-
1275
- # Remove the arguments entirely
1276
- # `rake.invoke.args` tag --> ['?']
1277
- # `rake.execute.args` tag --> {}
1278
- c.use :rake, quantize: { args: { exclude: :all } }
1279
- end
1280
- ```
1281
-
1282
- ### Redis
1283
-
1284
- The Redis integration will trace simple calls as well as pipelines.
1285
-
1286
- ```ruby
1287
- require 'redis'
1288
- require 'ddtrace'
1289
-
1290
- Datadog.configure do |c|
1291
- c.use :redis, options
1292
- end
1293
-
1294
- # Perform Redis commands
1295
- redis = Redis.new
1296
- redis.set 'foo', 'bar'
1297
- ```
1298
-
1299
- Where `options` is an optional `Hash` that accepts the following parameters:
1300
-
1301
- | Key | Description | Default |
1302
- | --- | ----------- | ------- |
1303
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1304
- | `service_name` | Service name used for `redis` instrumentation | `'redis'` |
1305
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1306
-
1307
- You can also set *per-instance* configuration as it follows:
1308
-
1309
- ```ruby
1310
- customer_cache = Redis.new
1311
- invoice_cache = Redis.new
1312
-
1313
- Datadog.configure(customer_cache, service_name: 'customer-cache')
1314
- Datadog.configure(invoice_cache, service_name: 'invoice-cache')
1315
-
1316
- # Traced call will belong to `customer-cache` service
1317
- customer_cache.get(...)
1318
- # Traced call will belong to `invoice-cache` service
1319
- invoice_cache.get(...)
1320
- ```
1321
-
1322
- **Configuring trace settings per connection**
1323
-
1324
- You can configure trace settings per connection by using the `describes` option:
1325
-
1326
- ```ruby
1327
- # Provide a `:describes` option with a connection key.
1328
- # Any of the following keys are acceptable and equivalent to one another.
1329
- # If a block is provided, it yields a Settings object that
1330
- # accepts any of the configuration options listed above.
1331
-
1332
- Datadog.configure do |c|
1333
- # The default configuration for any redis client
1334
- c.use :redis, service_name: 'redis-default'
1335
-
1336
- # The configuration matching a given unix socket
1337
- c.use :redis, describes: { url: 'unix://path/to/file' }, service_name: 'redis-unix'
1338
-
1339
- # Connection string
1340
- c.use :redis, describes: { url: 'redis://127.0.0.1:6379/0' }, service_name: 'redis-connection-string'
1341
- # Client host, port, db, scheme
1342
- c.use :redis, describes: { host: 'my-host.com', port: 6379, db: 1, scheme: 'redis' }, service_name: 'redis-connection-hash'
1343
- # Only a subset of the connection hash
1344
- c.use :redis, describes: { host: ENV['APP_CACHE_HOST'], port: ENV['APP_CACHE_PORT'] }, service_name: 'redis-cache'
1345
- c.use :redis, describes: { host: ENV['SIDEKIQ_CACHE_HOST'] }, service_name: 'redis-sidekiq'
1346
- end
1347
- ```
1348
-
1349
- ### Resque
1350
-
1351
- The Resque integration uses Resque hooks that wraps the `perform` method.
1352
-
1353
- To add tracing to a Resque job:
1354
-
1355
- ```ruby
1356
- require 'ddtrace'
1357
-
1358
- class MyJob
1359
- def self.perform(*args)
1360
- # do_something
1361
- end
1362
- end
1363
-
1364
- Datadog.configure do |c|
1365
- c.use :resque, options
1366
- end
1367
- ```
1368
-
1369
- Where `options` is an optional `Hash` that accepts the following parameters:
1370
-
1371
- | Key | Description | Default |
1372
- | --- | ----------- | ------- |
1373
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to the global setting, `false` for off. | `false` |
1374
- | `service_name` | Service name used for `resque` instrumentation | `'resque'` |
1375
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually, you don't need to set this. | `Datadog.tracer` |
1376
- | `workers` | An array including all worker classes you want to trace (e.g. `[MyJob]`) | `[]` |
1377
-
1378
- ### Rest Client
1379
-
1380
- The `rest-client` integration is available through the `ddtrace` middleware:
1381
-
1382
- ```ruby
1383
- require 'rest_client'
1384
- require 'ddtrace'
1385
-
1386
- Datadog.configure do |c|
1387
- c.use :rest_client, options
1388
- end
1389
- ```
1390
-
1391
- Where `options` is an optional `Hash` that accepts the following parameters:
1392
-
1393
- | Key | Description | Default |
1394
- | --- | ----------- | ------- |
1395
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1396
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
1397
- | `service_name` | Service name for `rest_client` instrumentation. | `'rest_client'` |
1398
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1399
-
1400
- ### Sequel
1401
-
1402
- The Sequel integration traces queries made to your database.
1403
-
1404
- ```ruby
1405
- require 'sequel'
1406
- require 'ddtrace'
1407
-
1408
- # Connect to database
1409
- database = Sequel.sqlite
1410
-
1411
- # Create a table
1412
- database.create_table :articles do
1413
- primary_key :id
1414
- String :name
1415
- end
1416
-
1417
- Datadog.configure do |c|
1418
- c.use :sequel, options
1419
- end
1420
-
1421
- # Perform a query
1422
- articles = database[:articles]
1423
- articles.all
1424
- ```
1425
-
1426
- Where `options` is an optional `Hash` that accepts the following parameters:
1427
-
1428
- | Key | Description | Default |
1429
- | --- | ----------- | ------- |
1430
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1431
- | `service_name` | Service name for `sequel` instrumentation | Name of database adapter (e.g. `'mysql2'`) |
1432
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1433
-
1434
- Only Ruby 2.0+ is supported.
1435
-
1436
- **Configuring databases to use different settings**
1437
-
1438
- If you use multiple databases with Sequel, you can give each of them different settings by configuring their respective `Sequel::Database` objects:
1439
-
1440
- ```ruby
1441
- sqlite_database = Sequel.sqlite
1442
- postgres_database = Sequel.connect('postgres://user:password@host:port/database_name')
1443
-
1444
- # Configure each database with different service names
1445
- Datadog.configure(sqlite_database, service_name: 'my-sqlite-db')
1446
- Datadog.configure(postgres_database, service_name: 'my-postgres-db')
1447
- ```
1448
-
1449
- ### Shoryuken
1450
-
1451
- The Shoryuken integration is a server-side middleware which will trace job executions.
1452
-
1453
- You can enable it through `Datadog.configure`:
1454
-
1455
- ```ruby
1456
- require 'ddtrace'
1457
-
1458
- Datadog.configure do |c|
1459
- c.use :shoryuken, options
1460
- end
1461
- ```
1462
-
1463
- Where `options` is an optional `Hash` that accepts the following parameters:
1464
-
1465
- | Key | Description | Default |
1466
- | --- | ----------- | ------- |
1467
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1468
- | `service_name` | Service name used for `shoryuken` instrumentation | `'shoryuken'` |
1469
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1470
-
1471
- ### Sidekiq
1472
-
1473
- The Sidekiq integration is a client-side & server-side middleware which will trace job queuing and executions respectively.
1474
-
1475
- You can enable it through `Datadog.configure`:
1476
-
1477
- ```ruby
1478
- require 'ddtrace'
1479
-
1480
- Datadog.configure do |c|
1481
- c.use :sidekiq, options
1482
- end
1483
- ```
1484
-
1485
- Where `options` is an optional `Hash` that accepts the following parameters:
1486
-
1487
- | Key | Description | Default |
1488
- | --- | ----------- | ------- |
1489
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1490
- | `client_service_name` | Service name used for client-side `sidekiq` instrumentation | `'sidekiq-client'` |
1491
- | `service_name` | Service name used for server-side `sidekiq` instrumentation | `'sidekiq'` |
1492
- | `tag_args` | Enable tagging of job arguments. `true` for on, `false` for off. | `false` |
1493
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1494
-
1495
- ### Sinatra
1496
-
1497
- The Sinatra integration traces requests and template rendering.
1498
-
1499
- To start using the tracing client, make sure you import `ddtrace` and `use :sinatra` after either `sinatra` or `sinatra/base`, and before you define your application/routes:
1500
-
1501
- ```ruby
1502
- require 'sinatra'
1503
- require 'ddtrace'
1504
-
1505
- Datadog.configure do |c|
1506
- c.use :sinatra, options
1507
- end
1508
-
1509
- get '/' do
1510
- 'Hello world!'
1511
- end
1512
- ```
1513
-
1514
- Where `options` is an optional `Hash` that accepts the following parameters:
1515
-
1516
- | Key | Description | Default |
1517
- | --- | ----------- | ------- |
1518
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `nil` |
1519
- | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) so that this service trace is connected with a trace of another service if tracing headers are received | `true` |
1520
- | `headers` | Hash of HTTP request or response headers to add as tags to the `sinatra.request`. Accepts `request` and `response` keys with Array values e.g. `['Last-Modified']`. Adds `http.request.headers.*` and `http.response.headers.*` tags respectively. | `{ response: ['Content-Type', 'X-Request-ID'] }` |
1521
- | `resource_script_names` | Prepend resource names with script name | `false` |
1522
- | `service_name` | Service name used for `sinatra` instrumentation | `'sinatra'` |
1523
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1524
-
1525
- ### Sucker Punch
1526
-
1527
- The `sucker_punch` integration traces all scheduled jobs:
1528
-
1529
- ```ruby
1530
- require 'ddtrace'
1531
-
1532
- Datadog.configure do |c|
1533
- c.use :sucker_punch, options
1534
- end
1535
-
1536
- # Execution of this job is traced
1537
- LogJob.perform_async('login')
1538
- ```
1539
-
1540
- Where `options` is an optional `Hash` that accepts the following parameters:
1541
-
1542
- | Key | Description | Default |
1543
- | --- | ----------- | ------- |
1544
- | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1545
- | `service_name` | Service name used for `sucker_punch` instrumentation | `'sucker_punch'` |
1546
- | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1547
-
1548
- ## Advanced configuration
1549
-
1550
- ### Tracer settings
1551
-
1552
- To change the default behavior of the Datadog tracer, you can provide custom options inside the `Datadog.configure` block as in:
1553
-
1554
- ```ruby
1555
- # config/initializers/datadog-tracer.rb
1556
-
1557
- Datadog.configure do |c|
1558
- c.tracer option_name: option_value, ...
1559
- end
1560
- ```
1561
-
1562
- Available options are:
1563
-
1564
- - `enabled`: defines if the `tracer` is enabled or not. If set to `false` the code could be still instrumented because of other settings, but no spans are sent to the local trace agent.
1565
- - `debug`: set to true to enable debug logging.
1566
- - `hostname`: set the hostname of the trace agent.
1567
- - `port`: set the port the trace agent is listening on.
1568
- - `env`: set the environment. Rails users may set it to `Rails.env` to use their application settings.
1569
- - `tags`: set global tags that should be applied to all spans. Defaults to an empty hash
1570
- - `log`: defines a custom logger.
1571
- - `partial_flush`: set to `true` to enable partial trace flushing (for long running traces.) Disabled by default. *Experimental.*
1572
-
1573
- #### Custom logging
1574
-
1575
- By default, all logs are processed by the default Ruby logger. When using Rails, you should see the messages in your application log file.
1576
-
1577
- Datadog client log messages are marked with `[ddtrace]` so you should be able to isolate them from other messages.
1578
-
1579
- Additionally, it is possible to override the default logger and replace it by a custom one. This is done using the `log` attribute of the tracer.
1580
-
1581
- ```ruby
1582
- f = File.new("my-custom.log", "w+") # Log messages should go there
1583
- Datadog.configure do |c|
1584
- c.tracer log: Logger.new(f) # Overriding the default tracer
1585
- end
1586
-
1587
- Datadog::Logger.log.info { "this is typically called by tracing code" }
1588
- ```
1589
-
1590
- ### Environment and tags
1591
-
1592
- By default, the trace agent (not this library, but the program running in the background collecting data from various clients) uses the tags set in the agent config file, see our [environments tutorial](https://app.datadoghq.com/apm/docs/tutorials/environments) for details.
1593
-
1594
- You can configure the application to automatically tag your traces and metrics, using the following environment variables:
1595
-
1596
- - `DD_ENV`: Your application environment (e.g. `production`, `staging`, etc.)
1597
- - `DD_VERSION`: Your application version (e.g. `2.5`, `202003181415`, `1.3-alpha`, etc.)
1598
- - `DD_TAGS`: Custom tags in value pairs separated by `,` (e.g. `layer:api,team:intake`)
1599
- - If `DD_ENV` or `DD_VERSION`, it will override any `env` or `version` tag defined in `DD_TAGS`.
1600
-
1601
- These values can also be overridden at the tracer level:
1602
-
1603
- ```ruby
1604
- Datadog.configure do |c|
1605
- c.service = 'billing-api'
1606
- c.env = 'test'
1607
- c.tags = { 'team' => 'qa' }
1608
- c.version = '1.3-alpha'
1609
- end
1610
- ```
1611
-
1612
- This enables you to set this value on a per tracer basis, so you can have for example several applications reporting for different environments on the same host.
1613
-
1614
- Ultimately, tags can be set per span, but `env` should typically be the same for all spans belonging to a given trace.
1615
-
1616
- ### Sampling
1617
-
1618
- `ddtrace` can perform trace sampling. While the trace agent already samples traces to reduce bandwidth usage, client sampling reduces the performance overhead.
1619
-
1620
- `Datadog::RateSampler` samples a ratio of the traces. For example:
1621
-
1622
- ```ruby
1623
- # Sample rate is between 0 (nothing sampled) to 1 (everything sampled).
1624
- sampler = Datadog::RateSampler.new(0.5) # sample 50% of the traces
1625
- Datadog.configure do |c|
1626
- c.tracer sampler: sampler
1627
- end
1628
- ```
1629
-
1630
- #### Priority sampling
1631
-
1632
- Priority sampling decides whether to keep a trace by using a priority attribute propagated for distributed traces. Its value indicates to the Agent and the backend about how important the trace is.
1633
-
1634
- The sampler can set the priority to the following values:
1635
-
1636
- - `Datadog::Ext::Priority::AUTO_REJECT`: the sampler automatically decided to reject the trace.
1637
- - `Datadog::Ext::Priority::AUTO_KEEP`: the sampler automatically decided to keep the trace.
1638
-
1639
- Priority sampling is enabled by default. Enabling it ensures that your sampled distributed traces will be complete. Once enabled, the sampler will automatically assign a priority of 0 or 1 to traces, depending on their service and volume.
1640
-
1641
- You can also set this priority manually to either drop a non-interesting trace or to keep an important one. For that, set the `context#sampling_priority` to:
1642
-
1643
- - `Datadog::Ext::Priority::USER_REJECT`: the user asked to reject the trace.
1644
- - `Datadog::Ext::Priority::USER_KEEP`: the user asked to keep the trace.
1645
-
1646
- When not using [distributed tracing](#distributed-tracing), you may change the priority at any time, as long as the trace incomplete. But it has to be done before any context propagation (fork, RPC calls) to be useful in a distributed context. Changing the priority after the context has been propagated causes different parts of a distributed trace to use different priorities. Some parts might be kept, some parts might be rejected, and this can cause the trace to be partially stored and remain incomplete.
1647
-
1648
- If you change the priority, we recommend you do it as soon as possible - when the root span has just been created.
1649
-
1650
- ```ruby
1651
- # First, grab the active span
1652
- span = Datadog.tracer.active_span
1653
-
1654
- # Indicate to reject the trace
1655
- span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT
1656
-
1657
- # Indicate to keep the trace
1658
- span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP
1659
- ```
1660
-
1661
- ### Distributed Tracing
1662
-
1663
- Distributed tracing allows traces to be propagated across multiple instrumented applications so that a request can be presented as a single trace, rather than a separate trace per service.
1664
-
1665
- To trace requests across application boundaries, the following must be propagated between each application:
1666
-
1667
- | Property | Type | Description |
1668
- | --------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------- |
1669
- | **Trace ID** | Integer | ID of the trace. This value should be the same across all requests that belong to the same trace. |
1670
- | **Parent Span ID** | Integer | ID of the span in the service originating the request. This value will always be different for each request within a trace. |
1671
- | **Sampling Priority** | Integer | Sampling priority level for the trace. This value should be the same across all requests that belong to the same trace. |
1672
-
1673
- Such propagation can be visualized as:
1674
-
1675
- ```
1676
- Service A:
1677
- Trace ID: 100000000000000001
1678
- Parent ID: 0
1679
- Span ID: 100000000000000123
1680
- Priority: 1
1681
-
1682
- |
1683
- | Service B Request:
1684
- | Metadata:
1685
- | Trace ID: 100000000000000001
1686
- | Parent ID: 100000000000000123
1687
- | Priority: 1
1688
- |
1689
- V
1690
-
1691
- Service B:
1692
- Trace ID: 100000000000000001
1693
- Parent ID: 100000000000000123
1694
- Span ID: 100000000000000456
1695
- Priority: 1
1696
-
1697
- |
1698
- | Service C Request:
1699
- | Metadata:
1700
- | Trace ID: 100000000000000001
1701
- | Parent ID: 100000000000000456
1702
- | Priority: 1
1703
- |
1704
- V
1705
-
1706
- Service C:
1707
- Trace ID: 100000000000000001
1708
- Parent ID: 100000000000000456
1709
- Span ID: 100000000000000789
1710
- Priority: 1
1711
- ```
1712
-
1713
- **Via HTTP**
1714
-
1715
- For HTTP requests between instrumented applications, this trace metadata is propagated by use of HTTP Request headers:
1716
-
1717
- | Property | Type | HTTP Header name |
1718
- | --------------------- | ------- | ----------------------------- |
1719
- | **Trace ID** | Integer | `x-datadog-trace-id` |
1720
- | **Parent Span ID** | Integer | `x-datadog-parent-id` |
1721
- | **Sampling Priority** | Integer | `x-datadog-sampling-priority` |
1722
-
1723
- Such that:
1724
-
1725
- ```
1726
- Service A:
1727
- Trace ID: 100000000000000001
1728
- Parent ID: 0
1729
- Span ID: 100000000000000123
1730
- Priority: 1
1731
-
1732
- |
1733
- | Service B HTTP Request:
1734
- | Headers:
1735
- | x-datadog-trace-id: 100000000000000001
1736
- | x-datadog-parent-id: 100000000000000123
1737
- | x-datadog-sampling-priority: 1
1738
- |
1739
- V
1740
-
1741
- Service B:
1742
- Trace ID: 100000000000000001
1743
- Parent ID: 100000000000000123
1744
- Span ID: 100000000000000456
1745
- Priority: 1
1746
-
1747
- |
1748
- | Service C HTTP Request:
1749
- | Headers:
1750
- | x-datadog-trace-id: 100000000000000001
1751
- | x-datadog-parent-id: 100000000000000456
1752
- | x-datadog-sampling-priority: 1
1753
- |
1754
- V
1755
-
1756
- Service C:
1757
- Trace ID: 100000000000000001
1758
- Parent ID: 100000000000000456
1759
- Span ID: 100000000000000789
1760
- Priority: 1
1761
- ```
1762
-
1763
- **Activating distributed tracing for integrations**
1764
-
1765
- Many integrations included in `ddtrace` support distributed tracing. Distributed tracing is enabled by default, but can be activated via configuration settings.
1766
-
1767
- - If your application receives requests from services with distributed tracing activated, you must activate distributed tracing on the integrations that handle these requests (e.g. Rails)
1768
- - If your application send requests to services with distributed tracing activated, you must activate distributed tracing on the integrations that send these requests (e.g. Faraday)
1769
- - If your application both sends and receives requests implementing distributed tracing, it must activate all integrations that handle these requests.
1770
-
1771
- For more details on how to activate distributed tracing for integrations, see their documentation:
1772
-
1773
- - [Excon](#excon)
1774
- - [Faraday](#faraday)
1775
- - [Rest Client](#restclient)
1776
- - [Net/HTTP](#nethttp)
1777
- - [Rack](#rack)
1778
- - [Rails](#rails)
1779
- - [Sinatra](#sinatra)
1780
-
1781
- **Using the HTTP propagator**
1782
-
1783
- To make the process of propagating this metadata easier, you can use the `Datadog::HTTPPropagator` module.
1784
-
1785
- On the client:
1786
-
1787
- ```ruby
1788
- Datadog.tracer.trace('web.call') do |span|
1789
- # Inject span context into headers (`env` must be a Hash)
1790
- Datadog::HTTPPropagator.inject!(span.context, env)
1791
- end
1792
- ```
1793
-
1794
- On the server:
1795
-
1796
- ```ruby
1797
- Datadog.tracer.trace('web.work') do |span|
1798
- # Build a context from headers (`env` must be a Hash)
1799
- context = HTTPPropagator.extract(request.env)
1800
- Datadog.tracer.provider.context = context if context.trace_id
1801
- end
1802
- ```
1803
-
1804
- ### HTTP request queuing
1805
-
1806
- Traces that originate from HTTP requests can be configured to include the time spent in a frontend web server or load balancer queue before the request reaches the Ruby application.
1807
-
1808
- This functionality is **experimental** and deactivated by default.
1809
-
1810
- To activate this feature, you must add an `X-Request-Start` or `X-Queue-Start` header from your web server (i.e., Nginx). The following is an Nginx configuration example:
1811
-
1812
- ```
1813
- # /etc/nginx/conf.d/ruby_service.conf
1814
- server {
1815
- listen 8080;
1816
-
1817
- location / {
1818
- proxy_set_header X-Request-Start "t=${msec}";
1819
- proxy_pass http://web:3000;
1820
- }
1821
- }
1822
- ```
1823
-
1824
- Then you must enable the request queuing feature in the integration handling the request.
1825
-
1826
- For Rack-based applications, see the [documentation](#rack) for details for enabling this feature.
1827
-
1828
- ### Processing Pipeline
1829
-
1830
- Some applications might require that traces be altered or filtered out before they are sent upstream. The processing pipeline allows users to create *processors* to define such behavior.
1831
-
1832
- Processors can be any object that responds to `#call` accepting `trace` as an argument (which is an `Array` of `Datadog::Span`s.)
1833
-
1834
- For example:
1835
-
1836
- ```ruby
1837
- lambda_processor = ->(trace) do
1838
- # Processing logic...
1839
- trace
1840
- end
1841
-
1842
- class MyCustomProcessor
1843
- def call(trace)
1844
- # Processing logic...
1845
- trace
1846
- end
1847
- end
1848
- custom_processor = MyFancyProcessor.new
1849
- ```
1850
-
1851
- `#call` blocks of processors *must* return the `trace` object; this return value will be passed to the next processor in the pipeline.
1852
-
1853
- These processors must then be added to the pipeline via `Datadog::Pipeline.before_flush`:
1854
-
1855
- ```ruby
1856
- Datadog::Pipeline.before_flush(lambda_processor, custom_processor)
1857
- ```
1858
-
1859
- You can also define processors using the short-hand block syntax for `Datadog::Pipeline.before_flush`:
1860
-
1861
- ```ruby
1862
- Datadog::Pipeline.before_flush do |trace|
1863
- trace.delete_if { |span| span.name =~ /forbidden/ }
1864
- end
1865
- ```
1866
-
1867
- #### Filtering
1868
-
1869
- You can use the `Datadog::Pipeline::SpanFilter` processor to remove spans, when the block evaluates as truthy:
1870
-
1871
- ```ruby
1872
- Datadog::Pipeline.before_flush(
1873
- # Remove spans that match a particular resource
1874
- Datadog::Pipeline::SpanFilter.new { |span| span.resource =~ /PingController/ },
1875
- # Remove spans that are trafficked to localhost
1876
- Datadog::Pipeline::SpanFilter.new { |span| span.get_tag('host') == 'localhost' }
1877
- )
1878
- ```
1879
-
1880
- #### Processing
1881
-
1882
- You can use the `Datadog::Pipeline::SpanProcessor` processor to modify spans:
1883
-
1884
- ```ruby
1885
- Datadog::Pipeline.before_flush(
1886
- # Strip matching text from the resource field
1887
- Datadog::Pipeline::SpanProcessor.new { |span| span.resource.gsub!(/password=.*/, '') }
1888
- )
1889
- ```
1890
-
1891
- ### Trace correlation
1892
-
1893
- In many cases, such as logging, it may be useful to correlate trace IDs to other events or data streams, for easier cross-referencing. The tracer can produce a correlation identifier for the currently active trace via `active_correlation`, which can be used to decorate these other data sources.
1894
-
1895
- ```ruby
1896
- # When a trace is active...
1897
- Datadog.tracer.trace('correlation.example') do
1898
- # Returns #<Datadog::Correlation::Identifier>
1899
- correlation = Datadog.tracer.active_correlation
1900
- correlation.trace_id # => 5963550561812073440
1901
- correlation.span_id # => 2232727802607726424
1902
- correlation.env # => 'production' (derived from DD_ENV)
1903
- correlation.version # => '2.5.17' (derived from DD_VERSION)
1904
- end
1905
-
1906
- # When a trace isn't active...
1907
- correlation = Datadog.tracer.active_correlation
1908
- # Returns #<Datadog::Correlation::Identifier>
1909
- correlation = Datadog.tracer.active_correlation
1910
- correlation.trace_id # => 0
1911
- correlation.span_id # => 0
1912
- correlation.trace_id # => nil
1913
- correlation.span_id # => nil
1914
- ```
1915
-
1916
- #### For logging in Rails applications using Lograge (recommended)
1917
-
1918
- After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs:
1919
-
1920
- ```ruby
1921
- config.lograge.custom_options = lambda do |event|
1922
- # Retrieves trace information for current thread
1923
- correlation = Datadog.tracer.active_correlation
1924
-
1925
- {
1926
- # Adds IDs as tags to log output
1927
- :dd => {
1928
- # To preserve precision during JSON serialization, use strings for large numbers
1929
- :trace_id => correlation.trace_id.to_s,
1930
- :span_id => correlation.span_id.to_s,
1931
- :env => correlation.env.to_s,
1932
- :version => correlation.version.to_s
1933
- },
1934
- :ddsource => ["ruby"],
1935
- :params => event.payload[:params].reject { |k| %w(controller action).include? k }
1936
- }
1937
- end
1938
- ```
1939
-
1940
- #### For logging in Rails applications
1941
-
1942
- Rails applications which are configured with an `ActiveSupport::TaggedLogging` logger can append correlation IDs as tags to log output. The default Rails logger implements this tagged logging, making it easier to add correlation tags.
1943
-
1944
- In your Rails environment configuration file, add the following:
1945
-
1946
- ```ruby
1947
- Rails.application.configure do
1948
- config.log_tags = [proc { Datadog.tracer.active_correlation.to_s }]
1949
- end
1950
-
1951
- # Given:
1952
- # DD_ENV = 'production' (The name of the environment your application is running in.)
1953
- # DD_VERSION = '2.5.17' (The version of your application.)
1954
-
1955
- # Web requests will produce:
1956
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Started GET "/articles" for 172.22.0.1 at 2019-01-16 18:50:57 +0000
1957
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Processing by ArticlesController#index as */*
1958
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Article Load (0.5ms) SELECT "articles".* FROM "articles"
1959
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Completed 200 OK in 7ms (Views: 5.5ms | ActiveRecord: 0.5ms)
1960
- ```
1961
-
1962
- #### For logging in Ruby applications
1963
-
1964
- To add correlation IDs to your logger, add a log formatter which retrieves the correlation IDs with `Datadog.tracer.active_correlation`, then add them to the message.
1965
-
1966
- To properly correlate with Datadog logging, be sure the following is present in the log message:
1967
-
1968
- - `dd.trace_id=<TRACE_ID>`: Where `<TRACE_ID>` is equal to `Datadog.tracer.active_correlation.trace_id` or `0` if no trace is active during logging.
1969
- - `dd.span_id=<SPAN_ID>`: Where `<SPAN_ID>` is equal to `Datadog.tracer.active_correlation.span_id` or `0` if no trace is active during logging.
1970
- - `dd.env=<ENV>`: Where `<ENV>` is equal to `Datadog.tracer.active_correlation.env` or empty string (no quotes) if no environment name is configured.
1971
- - `dd.version=<SPAN_ID>`: Where `<SPAN_ID>` is equal to `Datadog.tracer.active_correlation.version` or empty string (no quotes) if no application version is configured.
1972
-
1973
- By default, `Datadog::Correlation::Identifier#to_s` will return `dd.trace_id=<TRACE_ID> dd.span_id=<SPAN_ID> dd.env=<ENV> dd.version=<VERSION>`.
1974
-
1975
- If a trace is not active and the application environment & version is not configured, it will return `dd.trace_id=0 dd.span_id=0 dd.env= dd.version=`.
1976
-
1977
- An example of this in practice:
1978
-
1979
- ```ruby
1980
- require 'ddtrace'
1981
- require 'logger'
1982
-
1983
- ENV['DD_ENV'] = 'production'
1984
- ENV['DD_VERSION'] = '2.5.17'
1985
-
1986
- logger = Logger.new(STDOUT)
1987
- logger.progname = 'my_app'
1988
- logger.formatter = proc do |severity, datetime, progname, msg|
1989
- "[#{datetime}][#{progname}][#{severity}][#{Datadog.tracer.active_correlation}] #{msg}\n"
1990
- end
1991
-
1992
- # When no trace is active
1993
- logger.warn('This is an untraced operation.')
1994
- # [2019-01-16 18:38:41 +0000][my_app][WARN][dd.trace_id=0 dd.span_id=0 dd.env=production dd.version=2.5.17] This is an untraced operation.
1995
-
1996
- # When a trace is active
1997
- Datadog.tracer.trace('my.operation') { logger.warn('This is a traced operation.') }
1998
- # [2019-01-16 18:38:41 +0000][my_app][WARN][dd.trace_id=8545847825299552251 dd.span_id=3711755234730770098 dd.env=production dd.version=2.5.17] This is a traced operation.
1999
- ```
2000
-
2001
- ### Configuring the transport layer
2002
-
2003
- By default, the tracer submits trace data using `Net::HTTP` to `127.0.0.1:8126`, the default location for the Datadog trace agent process. However, the tracer can be configured to send its trace data to alternative destinations, or by alternative protocols.
2004
-
2005
- Some basic settings, such as hostname and port, can be configured using [tracer settings](#tracer-settings).
2006
-
2007
- #### Using the Net::HTTP adapter
2008
-
2009
- The `Net` adapter submits traces using `Net::HTTP` over TCP. It is the default transport adapter.
2010
-
2011
- ```ruby
2012
- Datadog.configure do |c|
2013
- c.tracer transport_options: proc do |t|
2014
- # Hostname, port, and additional options. :timeout is in seconds.
2015
- t.adapter :net_http, '127.0.0.1', 8126, { timeout: 1 }
2016
- }
2017
- end
2018
- ```
2019
-
2020
- #### Using the Unix socket adapter
2021
-
2022
- The `UnixSocket` adapter submits traces using `Net::HTTP` over Unix socket.
2023
-
2024
- To use, first configure your trace agent to listen by Unix socket, then configure the tracer with:
2025
-
2026
- ```ruby
2027
- Datadog.configure do |c|
2028
- c.tracer transport_options: proc { |t|
2029
- # Provide filepath to trace agent Unix socket
2030
- t.adapter :unix, '/tmp/ddagent/trace.sock'
2031
- }
2032
- end
2033
- ```
2034
-
2035
- #### Using the transport test adapter
2036
-
2037
- The `Test` adapter is a no-op transport that can optionally buffer requests. For use in test suites or other non-production environments.
2038
-
2039
- ```ruby
2040
- Datadog.configure do |c|
2041
- c.tracer transport_options: proc { |t|
2042
- # Set transport to no-op mode. Does not retain traces.
2043
- t.adapter :test
2044
-
2045
- # Alternatively, you can provide a buffer to examine trace output.
2046
- # The buffer must respond to '<<'.
2047
- t.adapter :test, []
2048
- }
2049
- end
2050
- ```
2051
-
2052
- #### Using a custom transport adapter
2053
-
2054
- Custom adapters can be configured with:
2055
-
2056
- ```ruby
2057
- Datadog.configure do |c|
2058
- c.tracer transport_options: proc { |t|
2059
- # Initialize and pass an instance of the adapter
2060
- custom_adapter = CustomAdapter.new
2061
- t.adapter custom_adapter
2062
- }
2063
- end
2064
- ```
2065
-
2066
- ### Metrics
2067
-
2068
- The tracer and its integrations can produce some additional metrics that can provide useful insight into the performance of your application. These metrics are collected with `dogstatsd-ruby`, and can be sent to the same Datadog agent to which you send your traces.
2069
-
2070
- To configure your application for metrics collection:
2071
-
2072
- 1. [Configure your Datadog agent for StatsD](https://docs.datadoghq.com/developers/dogstatsd/#setup)
2073
- 2. Add `gem 'dogstatsd-ruby'` to your Gemfile
2074
-
2075
- #### For application runtime
2076
-
2077
- If runtime metrics are configured, the trace library will automatically collect and send metrics about the health of your application.
2078
-
2079
- To configure runtime metrics, add the following configuration:
2080
-
2081
- ```ruby
2082
- # config/initializers/datadog.rb
2083
- require 'datadog/statsd'
2084
- require 'ddtrace'
2085
-
2086
- Datadog.configure do |c|
2087
- # To enable runtime metrics collection, set `true`. Defaults to `false`
2088
- # You can also set DD_RUNTIME_METRICS_ENABLED=true to configure this.
2089
- c.runtime_metrics_enabled = true
2090
-
2091
- # Optionally, you can configure the Statsd instance used for sending runtime metrics.
2092
- # Statsd is automatically configured with default settings if `dogstatsd-ruby` is available.
2093
- # You can configure with host and port of Datadog agent; defaults to 'localhost:8125'.
2094
- c.runtime_metrics statsd: Datadog::Statsd.new
2095
- end
2096
- ```
2097
-
2098
- See the [Dogstatsd documentation](https://www.rubydoc.info/github/DataDog/dogstatsd-ruby/master/frames) for more details about configuring `Datadog::Statsd`.
2099
-
2100
- The stats sent will include:
2101
-
2102
- | Name | Type | Description |
2103
- | -------------------------- | ------- | -------------------------------------------------------- |
2104
- | `runtime.ruby.class_count` | `gauge` | Number of classes in memory space. |
2105
- | `runtime.ruby.thread_count` | `gauge` | Number of threads. |
2106
- | `runtime.ruby.gc.*`. | `gauge` | Garbage collection statistics (one per value in GC.stat) |
2107
-
2108
- In addition, all metrics include the following tags:
2109
-
2110
- | Name | Description |
2111
- | ------------ | ------------------------------------------------------- |
2112
- | `language` | Programming language traced. (e.g. `ruby`) |
2113
- | `service` | List of services this associated with this metric. |
2114
-
2115
- ### OpenTracing
2116
-
2117
- For setting up Datadog with OpenTracing, see out [Quickstart for OpenTracing](#quickstart-for-opentracing) section for details.
2118
-
2119
- **Configuring Datadog tracer settings**
2120
-
2121
- The underlying Datadog tracer can be configured by passing options (which match `Datadog::Tracer`) when configuring the global tracer:
2122
-
2123
- ```ruby
2124
- # Where `options` is a Hash of options provided to Datadog::Tracer
2125
- OpenTracing.global_tracer = Datadog::OpenTracer::Tracer.new(options)
2126
- ```
2127
-
2128
- It can also be configured by using `Datadog.configure` described in the [Tracer settings](#tracer-settings) section.
2129
-
2130
- **Activating and configuring integrations**
2131
-
2132
- By default, configuring OpenTracing with Datadog will not automatically activate any additional instrumentation provided by Datadog. You will only receive spans and traces from OpenTracing instrumentation you have in your application.
2133
-
2134
- However, additional instrumentation provided by Datadog can be activated alongside OpenTracing using `Datadog.configure`, which can be used to enhance your tracing further. To activate this, see [Integration instrumentation](#integration-instrumentation) for more details.
2135
-
2136
- **Supported serialization formats**
2137
-
2138
- | Type | Supported? | Additional information |
2139
- | ------------------------------ | ---------- | ---------------------- |
2140
- | `OpenTracing::FORMAT_TEXT_MAP` | Yes | |
2141
- | `OpenTracing::FORMAT_RACK` | Yes | Because of the loss of resolution in the Rack format, please note that baggage items with names containing either upper case characters or `-` will be converted to lower case and `_` in a round-trip respectively. We recommend avoiding these characters or accommodating accordingly on the receiving end. |
2142
- | `OpenTracing::FORMAT_BINARY` | No | |