ddtrace 1.1.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +129 -1
  3. data/LICENSE-3rdparty.csv +2 -0
  4. data/README.md +8 -3
  5. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +2 -2
  6. data/ext/ddtrace_profiling_loader/extconf.rb +1 -0
  7. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +15 -7
  8. data/ext/ddtrace_profiling_native_extension/clock_id.h +21 -1
  9. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +31 -2
  10. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +11 -2
  11. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +390 -0
  12. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +6 -0
  13. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +391 -0
  14. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +23 -19
  15. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +9 -0
  16. data/ext/ddtrace_profiling_native_extension/extconf.rb +64 -16
  17. data/ext/ddtrace_profiling_native_extension/helpers.h +12 -0
  18. data/ext/ddtrace_profiling_native_extension/http_transport.c +334 -0
  19. data/ext/ddtrace_profiling_native_extension/{libddprof_helpers.h → libdatadog_helpers.h} +2 -1
  20. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +116 -12
  21. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +89 -4
  22. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +5 -5
  23. data/ext/ddtrace_profiling_native_extension/profiling.c +8 -3
  24. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +25 -0
  25. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +65 -0
  26. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +311 -28
  27. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +18 -8
  28. data/lib/datadog/appsec/autoload.rb +4 -2
  29. data/lib/datadog/appsec/configuration.rb +1 -1
  30. data/lib/datadog/appsec/contrib/auto_instrument.rb +0 -2
  31. data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -1
  32. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -2
  33. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +6 -6
  34. data/lib/datadog/appsec/contrib/rack/integration.rb +5 -5
  35. data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -2
  36. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +1 -1
  37. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +1 -1
  38. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +1 -1
  39. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +2 -2
  40. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +3 -3
  41. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -2
  42. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +4 -4
  43. data/lib/datadog/appsec/contrib/rails/integration.rb +4 -4
  44. data/lib/datadog/appsec/contrib/rails/patcher.rb +16 -12
  45. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +1 -1
  46. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -2
  47. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +5 -5
  48. data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
  49. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +16 -12
  50. data/lib/datadog/appsec/event.rb +3 -3
  51. data/lib/datadog/appsec/extensions.rb +1 -1
  52. data/lib/datadog/appsec/processor.rb +1 -1
  53. data/lib/datadog/appsec/reactive/engine.rb +2 -2
  54. data/lib/datadog/appsec/reactive/operation.rb +3 -3
  55. data/lib/datadog/appsec.rb +5 -5
  56. data/lib/datadog/ci/configuration/components.rb +1 -1
  57. data/lib/datadog/ci/configuration/settings.rb +1 -1
  58. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -2
  59. data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -5
  60. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -1
  61. data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -4
  62. data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -2
  63. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -2
  64. data/lib/datadog/ci/contrib/rspec/example.rb +5 -5
  65. data/lib/datadog/ci/contrib/rspec/integration.rb +4 -4
  66. data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -2
  67. data/lib/datadog/ci/ext/environment.rb +8 -6
  68. data/lib/datadog/ci/extensions.rb +4 -4
  69. data/lib/datadog/ci/flush.rb +2 -2
  70. data/lib/datadog/ci/test.rb +3 -3
  71. data/lib/datadog/ci.rb +6 -6
  72. data/lib/datadog/core/buffer/cruby.rb +1 -1
  73. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  74. data/lib/datadog/core/configuration/agent_settings_resolver.rb +6 -6
  75. data/lib/datadog/core/configuration/base.rb +11 -2
  76. data/lib/datadog/core/configuration/components.rb +70 -52
  77. data/lib/datadog/core/configuration/option_definition.rb +1 -1
  78. data/lib/datadog/core/configuration/option_definition_set.rb +1 -1
  79. data/lib/datadog/core/configuration/options.rb +3 -3
  80. data/lib/datadog/core/configuration/settings.rb +42 -8
  81. data/lib/datadog/core/configuration.rb +8 -5
  82. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  83. data/lib/datadog/core/diagnostics/health.rb +2 -2
  84. data/lib/datadog/core/environment/cgroup.rb +1 -1
  85. data/lib/datadog/core/environment/container.rb +1 -1
  86. data/lib/datadog/core/environment/ext.rb +1 -1
  87. data/lib/datadog/core/environment/identity.rb +2 -2
  88. data/lib/datadog/core/environment/platform.rb +40 -0
  89. data/lib/datadog/core/environment/socket.rb +1 -1
  90. data/lib/datadog/core/error.rb +1 -1
  91. data/lib/datadog/core/extensions.rb +1 -1
  92. data/lib/datadog/core/metrics/client.rb +8 -8
  93. data/lib/datadog/core/metrics/options.rb +3 -3
  94. data/lib/datadog/core/runtime/metrics.rb +6 -6
  95. data/lib/datadog/core/telemetry/client.rb +79 -0
  96. data/lib/datadog/core/telemetry/collector.rb +234 -0
  97. data/lib/datadog/core/telemetry/emitter.rb +48 -0
  98. data/lib/datadog/core/telemetry/event.rb +71 -0
  99. data/lib/datadog/core/telemetry/ext.rb +11 -0
  100. data/lib/datadog/core/telemetry/heartbeat.rb +37 -0
  101. data/lib/datadog/core/telemetry/http/adapters/net.rb +113 -0
  102. data/lib/datadog/core/telemetry/http/env.rb +20 -0
  103. data/lib/datadog/core/telemetry/http/ext.rb +20 -0
  104. data/lib/datadog/core/telemetry/http/response.rb +68 -0
  105. data/lib/datadog/core/telemetry/http/transport.rb +53 -0
  106. data/lib/datadog/core/telemetry/v1/app_event.rb +52 -0
  107. data/lib/datadog/core/telemetry/v1/application.rb +86 -0
  108. data/lib/datadog/core/telemetry/v1/configuration.rb +25 -0
  109. data/lib/datadog/core/telemetry/v1/dependency.rb +36 -0
  110. data/lib/datadog/core/telemetry/v1/host.rb +51 -0
  111. data/lib/datadog/core/telemetry/v1/integration.rb +58 -0
  112. data/lib/datadog/core/telemetry/v1/product.rb +28 -0
  113. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +100 -0
  114. data/lib/datadog/core/utils/object_set.rb +1 -1
  115. data/lib/datadog/core/utils/sequence.rb +5 -0
  116. data/lib/datadog/core/utils/string_table.rb +1 -1
  117. data/lib/datadog/core/utils/time.rb +3 -3
  118. data/lib/datadog/core/utils.rb +3 -3
  119. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -2
  120. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -3
  121. data/lib/datadog/core/workers/async.rb +1 -1
  122. data/lib/datadog/core/workers/polling.rb +2 -2
  123. data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
  124. data/lib/datadog/core.rb +50 -50
  125. data/lib/datadog/kit.rb +1 -1
  126. data/lib/datadog/opentracer/distributed_headers.rb +2 -2
  127. data/lib/datadog/opentracer/rack_propagator.rb +11 -7
  128. data/lib/datadog/opentracer/span.rb +1 -1
  129. data/lib/datadog/opentracer/text_map_propagator.rb +9 -6
  130. data/lib/datadog/opentracer/thread_local_scope_manager.rb +26 -3
  131. data/lib/datadog/opentracer/tracer.rb +19 -15
  132. data/lib/datadog/opentracer.rb +16 -16
  133. data/lib/datadog/profiling/buffer.rb +3 -3
  134. data/lib/datadog/profiling/collectors/code_provenance.rb +1 -0
  135. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +27 -0
  136. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +74 -0
  137. data/lib/datadog/profiling/collectors/old_stack.rb +7 -7
  138. data/lib/datadog/profiling/collectors/stack.rb +3 -6
  139. data/lib/datadog/profiling/encoding/profile.rb +8 -12
  140. data/lib/datadog/profiling/events/stack.rb +1 -1
  141. data/lib/datadog/profiling/exporter.rb +66 -9
  142. data/lib/datadog/profiling/ext/forking.rb +41 -42
  143. data/lib/datadog/profiling/ext.rb +3 -15
  144. data/lib/datadog/profiling/flush.rb +25 -56
  145. data/lib/datadog/profiling/http_transport.rb +132 -0
  146. data/lib/datadog/profiling/old_ext.rb +42 -0
  147. data/lib/datadog/profiling/old_recorder.rb +101 -0
  148. data/lib/datadog/profiling/pprof/builder.rb +4 -4
  149. data/lib/datadog/profiling/pprof/converter.rb +1 -1
  150. data/lib/datadog/profiling/pprof/message_set.rb +1 -1
  151. data/lib/datadog/profiling/pprof/stack_sample.rb +4 -4
  152. data/lib/datadog/profiling/pprof/string_table.rb +1 -1
  153. data/lib/datadog/profiling/pprof/template.rb +5 -5
  154. data/lib/datadog/profiling/preload.rb +1 -1
  155. data/lib/datadog/profiling/scheduler.rb +28 -46
  156. data/lib/datadog/profiling/stack_recorder.rb +14 -4
  157. data/lib/datadog/profiling/tag_builder.rb +6 -1
  158. data/lib/datadog/profiling/tasks/setup.rb +2 -2
  159. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -2
  160. data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -1
  161. data/lib/datadog/profiling/transport/http/api/endpoint.rb +13 -35
  162. data/lib/datadog/profiling/transport/http/api/instance.rb +2 -2
  163. data/lib/datadog/profiling/transport/http/api/spec.rb +1 -1
  164. data/lib/datadog/profiling/transport/http/api.rb +5 -5
  165. data/lib/datadog/profiling/transport/http/builder.rb +3 -3
  166. data/lib/datadog/profiling/transport/http/client.rb +6 -4
  167. data/lib/datadog/profiling/transport/http/response.rb +1 -3
  168. data/lib/datadog/profiling/transport/http.rb +22 -16
  169. data/lib/datadog/profiling.rb +21 -20
  170. data/lib/datadog/tracing/analytics.rb +1 -1
  171. data/lib/datadog/tracing/buffer.rb +5 -5
  172. data/lib/datadog/tracing/context.rb +1 -1
  173. data/lib/datadog/tracing/context_provider.rb +18 -2
  174. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  175. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -5
  176. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -4
  177. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -3
  178. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -4
  179. data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
  180. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -4
  181. data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -4
  182. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  183. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  184. data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
  185. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -3
  186. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -3
  187. data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
  188. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -4
  189. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  190. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +10 -6
  191. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  192. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -2
  193. data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -4
  194. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -2
  195. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  196. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -2
  197. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  198. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -5
  199. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -5
  200. data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
  201. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -2
  202. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -2
  203. data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -4
  204. data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -7
  205. data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -1
  206. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -3
  207. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  208. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -4
  209. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -4
  210. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -4
  211. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -4
  212. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -4
  213. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -4
  214. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  215. data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -4
  216. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -2
  217. data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -4
  218. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  219. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -5
  220. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -3
  221. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -2
  222. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
  223. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -3
  224. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -4
  225. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
  226. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -3
  227. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  228. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -4
  229. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -6
  230. data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
  231. data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -6
  232. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  233. data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -2
  234. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -9
  235. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -2
  236. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
  237. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -2
  238. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -5
  239. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  240. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
  241. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  242. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  243. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  244. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +2 -2
  245. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +3 -4
  246. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -3
  247. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  248. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  249. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  250. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -3
  251. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -2
  252. data/lib/datadog/tracing/contrib/configurable.rb +2 -2
  253. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  254. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  255. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
  256. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +4 -5
  257. data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -3
  258. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  259. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
  260. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -3
  261. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -0
  262. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -3
  263. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -2
  264. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +3 -4
  265. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
  266. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
  267. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -3
  268. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -7
  269. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
  270. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
  271. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  272. data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -4
  273. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +3 -4
  274. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  275. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +2 -2
  276. data/lib/datadog/tracing/contrib/excon/integration.rb +4 -4
  277. data/lib/datadog/tracing/contrib/excon/middleware.rb +6 -7
  278. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  279. data/lib/datadog/tracing/contrib/extensions.rb +5 -3
  280. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +2 -2
  281. data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -4
  282. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -6
  283. data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -5
  284. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -3
  285. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -5
  286. data/lib/datadog/tracing/contrib/grape/integration.rb +3 -3
  287. data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -4
  288. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +2 -2
  289. data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -3
  290. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -3
  291. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +4 -3
  292. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +14 -5
  293. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +6 -6
  294. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +7 -4
  295. data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
  296. data/lib/datadog/tracing/contrib/grpc/integration.rb +3 -3
  297. data/lib/datadog/tracing/contrib/grpc/patcher.rb +5 -5
  298. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -2
  299. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +2 -2
  300. data/lib/datadog/tracing/contrib/http/instrumentation.rb +3 -4
  301. data/lib/datadog/tracing/contrib/http/integration.rb +6 -6
  302. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  303. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +2 -2
  304. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +4 -5
  305. data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -4
  306. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  307. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +2 -2
  308. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -5
  309. data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -4
  310. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  311. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  312. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  313. data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
  314. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -2
  315. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
  316. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
  317. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -4
  318. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -4
  319. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -4
  320. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -4
  321. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +2 -2
  322. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +2 -2
  323. data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
  324. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -3
  325. data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -3
  326. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  327. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -2
  328. data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -3
  329. data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -2
  330. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
  331. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  332. data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -4
  333. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  334. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  335. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +4 -4
  336. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +2 -2
  337. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +3 -4
  338. data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -3
  339. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  340. data/lib/datadog/tracing/contrib/patcher.rb +13 -2
  341. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +35 -0
  342. data/lib/datadog/tracing/contrib/pg/ext.rb +31 -0
  343. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +128 -0
  344. data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
  345. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  346. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
  347. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -3
  348. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -3
  349. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  350. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -2
  351. data/lib/datadog/tracing/contrib/qless/integration.rb +3 -3
  352. data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
  353. data/lib/datadog/tracing/contrib/qless/qless_job.rb +2 -3
  354. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -2
  355. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -3
  356. data/lib/datadog/tracing/contrib/que/integration.rb +4 -4
  357. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  358. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
  359. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -2
  360. data/lib/datadog/tracing/contrib/racecar/event.rb +4 -5
  361. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  362. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -2
  363. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  364. data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
  365. data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -3
  366. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  367. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
  368. data/lib/datadog/tracing/contrib/rack/integration.rb +4 -4
  369. data/lib/datadog/tracing/contrib/rack/middlewares.rb +24 -20
  370. data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -2
  371. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  372. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -1
  373. data/lib/datadog/tracing/contrib/rails/framework.rb +18 -22
  374. data/lib/datadog/tracing/contrib/rails/integration.rb +4 -4
  375. data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -2
  376. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -2
  377. data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -8
  378. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
  379. data/lib/datadog/tracing/contrib/rails/utils.rb +1 -1
  380. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +17 -2
  381. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -7
  382. data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
  383. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -4
  384. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
  385. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
  386. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -7
  387. data/lib/datadog/tracing/contrib/redis/integration.rb +3 -3
  388. data/lib/datadog/tracing/contrib/redis/patcher.rb +6 -6
  389. data/lib/datadog/tracing/contrib/redis/tags.rb +3 -4
  390. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -3
  391. data/lib/datadog/tracing/contrib/resque/integration.rb +3 -3
  392. data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -2
  393. data/lib/datadog/tracing/contrib/resque/resque_job.rb +3 -4
  394. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +3 -2
  395. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -3
  396. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  397. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -6
  398. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  399. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -2
  400. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -3
  401. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  402. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  403. data/lib/datadog/tracing/contrib/sequel/database.rb +4 -5
  404. data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -5
  405. data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -3
  406. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  407. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
  408. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -3
  409. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -4
  410. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  411. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -1
  412. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +4 -5
  413. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -3
  414. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -0
  415. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -3
  416. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -7
  417. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +19 -1
  418. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +5 -6
  419. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
  420. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -6
  421. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -2
  422. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
  423. data/lib/datadog/tracing/contrib/sinatra/env.rb +2 -2
  424. data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
  425. data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -1
  426. data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -3
  427. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
  428. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +7 -8
  429. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +6 -7
  430. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -2
  431. data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -4
  432. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  433. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +2 -3
  434. data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -2
  435. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  436. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -4
  437. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -3
  438. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -5
  439. data/lib/datadog/tracing/contrib.rb +48 -47
  440. data/lib/datadog/tracing/correlation.rb +1 -1
  441. data/lib/datadog/tracing/distributed/headers/b3.rb +4 -4
  442. data/lib/datadog/tracing/distributed/headers/b3_single.rb +7 -7
  443. data/lib/datadog/tracing/distributed/headers/datadog.rb +3 -3
  444. data/lib/datadog/tracing/distributed/headers/parser.rb +37 -0
  445. data/lib/datadog/tracing/distributed/helpers.rb +36 -2
  446. data/lib/datadog/tracing/distributed/metadata/b3.rb +55 -0
  447. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +66 -0
  448. data/lib/datadog/tracing/distributed/metadata/datadog.rb +73 -0
  449. data/lib/datadog/tracing/distributed/metadata/parser.rb +34 -0
  450. data/lib/datadog/tracing/event.rb +1 -1
  451. data/lib/datadog/tracing/metadata/analytics.rb +2 -2
  452. data/lib/datadog/tracing/metadata/errors.rb +2 -2
  453. data/lib/datadog/tracing/metadata/ext.rb +25 -0
  454. data/lib/datadog/tracing/metadata/tagging.rb +8 -2
  455. data/lib/datadog/tracing/metadata.rb +3 -3
  456. data/lib/datadog/tracing/pipeline/span_filter.rb +10 -6
  457. data/lib/datadog/tracing/pipeline.rb +3 -3
  458. data/lib/datadog/tracing/propagation/grpc.rb +68 -58
  459. data/lib/datadog/tracing/propagation/http.rb +8 -8
  460. data/lib/datadog/tracing/runtime/metrics.rb +1 -1
  461. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  462. data/lib/datadog/tracing/sampling/priority_sampler.rb +5 -5
  463. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +2 -2
  464. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +3 -3
  465. data/lib/datadog/tracing/sampling/rate_limiter.rb +1 -1
  466. data/lib/datadog/tracing/sampling/rate_sampler.rb +7 -7
  467. data/lib/datadog/tracing/sampling/rule.rb +3 -3
  468. data/lib/datadog/tracing/sampling/rule_sampler.rb +4 -4
  469. data/lib/datadog/tracing/sampling/span/matcher.rb +80 -0
  470. data/lib/datadog/tracing/span.rb +25 -5
  471. data/lib/datadog/tracing/span_operation.rb +10 -9
  472. data/lib/datadog/tracing/sync_writer.rb +5 -5
  473. data/lib/datadog/tracing/trace_operation.rb +16 -9
  474. data/lib/datadog/tracing/trace_segment.rb +5 -5
  475. data/lib/datadog/tracing/tracer.rb +15 -15
  476. data/lib/datadog/tracing/workers/trace_writer.rb +9 -9
  477. data/lib/datadog/tracing/workers.rb +3 -3
  478. data/lib/datadog/tracing/writer.rb +5 -5
  479. data/lib/datadog/tracing.rb +8 -8
  480. data/lib/ddtrace/auto_instrument.rb +9 -2
  481. data/lib/ddtrace/transport/ext.rb +7 -1
  482. data/lib/ddtrace/transport/http/adapters/net.rb +3 -2
  483. data/lib/ddtrace/transport/http/adapters/test.rb +1 -1
  484. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -2
  485. data/lib/ddtrace/transport/http/api/map.rb +1 -1
  486. data/lib/ddtrace/transport/http/api.rb +4 -4
  487. data/lib/ddtrace/transport/http/builder.rb +5 -5
  488. data/lib/ddtrace/transport/http/client.rb +2 -2
  489. data/lib/ddtrace/transport/http/response.rb +1 -1
  490. data/lib/ddtrace/transport/http/statistics.rb +1 -1
  491. data/lib/ddtrace/transport/http/traces.rb +5 -5
  492. data/lib/ddtrace/transport/http.rb +12 -9
  493. data/lib/ddtrace/transport/io/client.rb +2 -2
  494. data/lib/ddtrace/transport/io/response.rb +1 -1
  495. data/lib/ddtrace/transport/io/traces.rb +3 -3
  496. data/lib/ddtrace/transport/io.rb +3 -3
  497. data/lib/ddtrace/transport/statistics.rb +2 -2
  498. data/lib/ddtrace/transport/trace_formatter.rb +5 -5
  499. data/lib/ddtrace/transport/traces.rb +5 -5
  500. data/lib/ddtrace/version.rb +1 -1
  501. data/lib/ddtrace.rb +6 -6
  502. metadata +57 -33
  503. data/.editorconfig +0 -22
  504. data/.gitignore +0 -58
  505. data/CONTRIBUTING.md +0 -81
  506. data/ddtrace.gemspec +0 -68
  507. data/docs/0.x-trace.png +0 -0
  508. data/docs/1.0-trace.png +0 -0
  509. data/docs/AutoInstrumentation.md +0 -36
  510. data/docs/Deprecation.md +0 -8
  511. data/docs/DevelopmentGuide.md +0 -259
  512. data/docs/GettingStarted.md +0 -2688
  513. data/docs/ProfilingDevelopment.md +0 -110
  514. data/docs/PublicApi.md +0 -14
  515. data/docs/UpgradeGuide.md +0 -736
  516. data/lib/datadog/profiling/recorder.rb +0 -117
  517. data/lib/datadog/profiling/transport/client.rb +0 -16
  518. data/lib/datadog/profiling/transport/io/client.rb +0 -29
  519. data/lib/datadog/profiling/transport/io/response.rb +0 -18
  520. data/lib/datadog/profiling/transport/io.rb +0 -32
  521. data/lib/datadog/profiling/transport/parcel.rb +0 -19
  522. data/lib/datadog/profiling/transport/request.rb +0 -17
  523. data/lib/datadog/profiling/transport/response.rb +0 -10
  524. data/lib/datadog/tracing/distributed/parser.rb +0 -70
@@ -1,8 +1,7 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing'
4
- require 'datadog/tracing/contrib/patcher'
5
- require 'datadog/tracing/contrib/sucker_punch/ext'
3
+ require_relative '../patcher'
4
+ require_relative 'ext'
6
5
 
7
6
  module Datadog
8
7
  module Tracing
@@ -20,8 +19,8 @@ module Datadog
20
19
  end
21
20
 
22
21
  def patch
23
- require 'datadog/tracing/contrib/sucker_punch/exception_handler'
24
- require 'datadog/tracing/contrib/sucker_punch/instrumentation'
22
+ require_relative 'exception_handler'
23
+ require_relative 'instrumentation'
25
24
 
26
25
  ExceptionHandler.patch!
27
26
  Instrumentation.patch!
@@ -1,8 +1,8 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing'
4
- require 'datadog/tracing/contrib/registry'
5
- require 'datadog/tracing/contrib/extensions'
3
+ require_relative '../tracing'
4
+ require_relative 'contrib/registry'
5
+ require_relative 'contrib/extensions'
6
6
 
7
7
  module Datadog
8
8
  module Tracing
@@ -30,47 +30,48 @@ module Datadog
30
30
  end
31
31
  end
32
32
 
33
- require 'datadog/tracing/contrib/action_cable/integration'
34
- require 'datadog/tracing/contrib/action_mailer/integration'
35
- require 'datadog/tracing/contrib/action_pack/integration'
36
- require 'datadog/tracing/contrib/action_view/integration'
37
- require 'datadog/tracing/contrib/active_model_serializers/integration'
38
- require 'datadog/tracing/contrib/active_job/integration'
39
- require 'datadog/tracing/contrib/active_record/integration'
40
- require 'datadog/tracing/contrib/active_support/integration'
41
- require 'datadog/tracing/contrib/aws/integration'
42
- require 'datadog/tracing/contrib/concurrent_ruby/integration'
43
- require 'datadog/tracing/contrib/dalli/integration'
44
- require 'datadog/tracing/contrib/delayed_job/integration'
45
- require 'datadog/tracing/contrib/elasticsearch/integration'
46
- require 'datadog/tracing/contrib/ethon/integration'
47
- require 'datadog/tracing/contrib/excon/integration'
48
- require 'datadog/tracing/contrib/faraday/integration'
49
- require 'datadog/tracing/contrib/grape/integration'
50
- require 'datadog/tracing/contrib/graphql/integration'
51
- require 'datadog/tracing/contrib/grpc/integration'
52
- require 'datadog/tracing/contrib/http/integration'
53
- require 'datadog/tracing/contrib/httpclient/integration'
54
- require 'datadog/tracing/contrib/httprb/integration'
55
- require 'datadog/tracing/contrib/integration'
56
- require 'datadog/tracing/contrib/kafka/integration'
57
- require 'datadog/tracing/contrib/lograge/integration'
58
- require 'datadog/tracing/contrib/mongodb/integration'
59
- require 'datadog/tracing/contrib/mysql2/integration'
60
- require 'datadog/tracing/contrib/presto/integration'
61
- require 'datadog/tracing/contrib/qless/integration'
62
- require 'datadog/tracing/contrib/que/integration'
63
- require 'datadog/tracing/contrib/racecar/integration'
64
- require 'datadog/tracing/contrib/rack/integration'
65
- require 'datadog/tracing/contrib/rails/integration'
66
- require 'datadog/tracing/contrib/rake/integration'
67
- require 'datadog/tracing/contrib/redis/integration'
68
- require 'datadog/tracing/contrib/resque/integration'
69
- require 'datadog/tracing/contrib/rest_client/integration'
70
- require 'datadog/tracing/contrib/semantic_logger/integration'
71
- require 'datadog/tracing/contrib/sequel/integration'
72
- require 'datadog/tracing/contrib/shoryuken/integration'
73
- require 'datadog/tracing/contrib/sidekiq/integration'
74
- require 'datadog/tracing/contrib/sinatra/integration'
75
- require 'datadog/tracing/contrib/sneakers/integration'
76
- require 'datadog/tracing/contrib/sucker_punch/integration'
33
+ require_relative 'contrib/action_cable/integration'
34
+ require_relative 'contrib/action_mailer/integration'
35
+ require_relative 'contrib/action_pack/integration'
36
+ require_relative 'contrib/action_view/integration'
37
+ require_relative 'contrib/active_model_serializers/integration'
38
+ require_relative 'contrib/active_job/integration'
39
+ require_relative 'contrib/active_record/integration'
40
+ require_relative 'contrib/active_support/integration'
41
+ require_relative 'contrib/aws/integration'
42
+ require_relative 'contrib/concurrent_ruby/integration'
43
+ require_relative 'contrib/dalli/integration'
44
+ require_relative 'contrib/delayed_job/integration'
45
+ require_relative 'contrib/elasticsearch/integration'
46
+ require_relative 'contrib/ethon/integration'
47
+ require_relative 'contrib/excon/integration'
48
+ require_relative 'contrib/faraday/integration'
49
+ require_relative 'contrib/grape/integration'
50
+ require_relative 'contrib/graphql/integration'
51
+ require_relative 'contrib/grpc/integration'
52
+ require_relative 'contrib/http/integration'
53
+ require_relative 'contrib/httpclient/integration'
54
+ require_relative 'contrib/httprb/integration'
55
+ require_relative 'contrib/integration'
56
+ require_relative 'contrib/kafka/integration'
57
+ require_relative 'contrib/lograge/integration'
58
+ require_relative 'contrib/mongodb/integration'
59
+ require_relative 'contrib/mysql2/integration'
60
+ require_relative 'contrib/pg/integration'
61
+ require_relative 'contrib/presto/integration'
62
+ require_relative 'contrib/qless/integration'
63
+ require_relative 'contrib/que/integration'
64
+ require_relative 'contrib/racecar/integration'
65
+ require_relative 'contrib/rack/integration'
66
+ require_relative 'contrib/rails/integration'
67
+ require_relative 'contrib/rake/integration'
68
+ require_relative 'contrib/redis/integration'
69
+ require_relative 'contrib/resque/integration'
70
+ require_relative 'contrib/rest_client/integration'
71
+ require_relative 'contrib/semantic_logger/integration'
72
+ require_relative 'contrib/sequel/integration'
73
+ require_relative 'contrib/shoryuken/integration'
74
+ require_relative 'contrib/sidekiq/integration'
75
+ require_relative 'contrib/sinatra/integration'
76
+ require_relative 'contrib/sneakers/integration'
77
+ require_relative 'contrib/sucker_punch/integration'
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core'
3
+ require_relative '../core'
4
4
 
5
5
  module Datadog
6
6
  module Tracing
@@ -1,9 +1,9 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing/distributed/parser'
4
- require 'datadog/tracing/distributed/helpers'
5
- require 'datadog/tracing/distributed/headers/ext'
6
- require 'datadog/tracing/trace_digest'
3
+ require_relative 'parser'
4
+ require_relative '../helpers'
5
+ require_relative 'ext'
6
+ require_relative '../../trace_digest'
7
7
 
8
8
  module Datadog
9
9
  module Tracing
@@ -1,9 +1,9 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing/distributed/parser'
4
- require 'datadog/tracing/distributed/helpers'
5
- require 'datadog/tracing/distributed/headers/ext'
6
- require 'datadog/tracing/trace_digest'
3
+ require_relative 'parser'
4
+ require_relative '../helpers'
5
+ require_relative 'ext'
6
+ require_relative '../../trace_digest'
7
7
 
8
8
  module Datadog
9
9
  module Tracing
@@ -47,9 +47,9 @@ module Datadog
47
47
  return if value.nil?
48
48
 
49
49
  parts = value.split('-')
50
- trace_id = headers.value_to_id(parts[0], 16) unless parts.empty?
51
- span_id = headers.value_to_id(parts[1], 16) if parts.length > 1
52
- sampling_priority = headers.value_to_number(parts[2]) if parts.length > 2
50
+ trace_id = Helpers.value_to_id(parts[0], 16) unless parts.empty?
51
+ span_id = Helpers.value_to_id(parts[1], 16) if parts.length > 1
52
+ sampling_priority = Helpers.value_to_number(parts[2]) if parts.length > 2
53
53
 
54
54
  # Return early if this propagation is not valid
55
55
  return unless trace_id && span_id
@@ -1,8 +1,8 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing/distributed/parser'
4
- require 'datadog/tracing/distributed/headers/ext'
5
- require 'datadog/tracing/trace_digest'
3
+ require_relative 'parser'
4
+ require_relative 'ext'
5
+ require_relative '../../trace_digest'
6
6
 
7
7
  module Datadog
8
8
  module Tracing
@@ -0,0 +1,37 @@
1
+ # typed: false
2
+
3
+ require_relative '../helpers'
4
+
5
+ module Datadog
6
+ module Tracing
7
+ module Distributed
8
+ module Headers
9
+ # Parser provides easy access and validation methods for Rack headers
10
+ class Parser
11
+ def initialize(env)
12
+ @env = env
13
+ end
14
+
15
+ # TODO: Don't assume Rack format.
16
+ # Make distributed tracing headers apathetic.
17
+ def header(name)
18
+ rack_header = "http-#{name}".upcase!.tr('-', '_')
19
+
20
+ hdr = @env[rack_header]
21
+
22
+ # Only return the value if it is not an empty string
23
+ hdr if hdr != ''
24
+ end
25
+
26
+ def id(hdr, base = 10)
27
+ Helpers.value_to_id(header(hdr), base)
28
+ end
29
+
30
+ def number(hdr, base = 10)
31
+ Helpers.value_to_number(header(hdr), base)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/configuration'
4
- require 'datadog/tracing/sampling/ext'
3
+ require_relative '../../core/configuration'
4
+ require_relative '../sampling/ext'
5
5
 
6
6
  module Datadog
7
7
  module Tracing
@@ -38,6 +38,40 @@ module Datadog
38
38
  # or we find the first non-zero, this allows `'0000' -> '0'` and `'00001' -> '1'`
39
39
  value.sub(/^0*(?=(0$)|[^0])/, '')
40
40
  end
41
+
42
+ def self.value_to_id(value, base = 10)
43
+ id = value_to_number(value, base)
44
+
45
+ # Return early if we could not parse a number
46
+ return if id.nil?
47
+
48
+ # Zero or greater than max allowed value of 2**64
49
+ return if id.zero? || id > Span::EXTERNAL_MAX_ID
50
+
51
+ id < 0 ? id + (2**64) : id
52
+ end
53
+
54
+ def self.value_to_number(value, base = 10)
55
+ # It's important to make a difference between no header,
56
+ # and a header defined to zero.
57
+ return if value.nil?
58
+
59
+ # Be sure we have a string
60
+ value = value.to_s
61
+
62
+ # If we are parsing base16 number then truncate to 64-bit
63
+ value = Helpers.truncate_base16_number(value) if base == 16
64
+
65
+ # Convert header to an integer
66
+ # DEV: Ruby `.to_i` will return `0` if a number could not be parsed
67
+ num = value.to_i(base)
68
+
69
+ # Ensure the parsed number is the same as the original string value
70
+ # e.g. We want to make sure to throw away `'nan'.to_i == 0`
71
+ return unless num.to_s(base) == value
72
+
73
+ num
74
+ end
41
75
  end
42
76
  end
43
77
  end
@@ -0,0 +1,55 @@
1
+ # typed: true
2
+
3
+ require_relative '../helpers'
4
+ require_relative 'parser'
5
+ require_relative '../headers/ext'
6
+ require_relative '../../trace_digest'
7
+
8
+ module Datadog
9
+ module Tracing
10
+ module Distributed
11
+ module Metadata
12
+ # B3 provides helpers to inject or extract metadata for B3 style headers
13
+ module B3
14
+ include Distributed::Headers::Ext
15
+
16
+ def self.inject!(digest, metadata)
17
+ return if digest.nil?
18
+
19
+ # DEV: We need these to be hex encoded
20
+ metadata[B3_HEADER_TRACE_ID] = digest.trace_id.to_s(16)
21
+ metadata[B3_HEADER_SPAN_ID] = digest.span_id.to_s(16)
22
+
23
+ if digest.trace_sampling_priority
24
+ sampling_priority = Helpers.clamp_sampling_priority(
25
+ digest.trace_sampling_priority
26
+ )
27
+ metadata[B3_HEADER_SAMPLED] = sampling_priority.to_s
28
+ end
29
+
30
+ metadata
31
+ end
32
+
33
+ def self.extract(metadata)
34
+ # Extract values from gRPC metadata
35
+ # DEV: B3 doesn't have "origin"
36
+ metadata = Parser.new(metadata)
37
+ trace_id = metadata.id(B3_HEADER_TRACE_ID, 16)
38
+ span_id = metadata.id(B3_HEADER_SPAN_ID, 16)
39
+ # We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
40
+ sampling_priority = metadata.number(B3_HEADER_SAMPLED)
41
+
42
+ # Return early if this propagation is not valid
43
+ return unless trace_id && span_id
44
+
45
+ TraceDigest.new(
46
+ trace_id: trace_id,
47
+ span_id: span_id,
48
+ trace_sampling_priority: sampling_priority
49
+ )
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,66 @@
1
+ # typed: true
2
+
3
+ require_relative 'parser'
4
+ require_relative '../helpers'
5
+ require_relative '../headers/ext'
6
+ require_relative '../../trace_digest'
7
+
8
+ module Datadog
9
+ module Tracing
10
+ module Distributed
11
+ module Metadata
12
+ # B3Single provides helpers to inject or extract metadata for B3 single header style headers
13
+ module B3Single
14
+ include Distributed::Headers::Ext
15
+
16
+ def self.inject!(digest, metadata)
17
+ return if digest.nil?
18
+
19
+ # Header format:
20
+ # b3: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
21
+ # https://github.com/apache/incubator-zipkin-b3-propagation/tree/7c6e9f14d6627832bd80baa87ac7dabee7be23cf#single-header
22
+ # DEV: `{SamplingState}` and `{ParentSpanId`}` are optional
23
+
24
+ # DEV: We need these to be hex encoded
25
+ b3_header = "#{digest.trace_id.to_s(16)}-#{digest.span_id.to_s(16)}"
26
+
27
+ if digest.trace_sampling_priority
28
+ sampling_priority = Helpers.clamp_sampling_priority(
29
+ digest.trace_sampling_priority
30
+ )
31
+ b3_header += "-#{sampling_priority}"
32
+ end
33
+
34
+ metadata[B3_HEADER_SINGLE] = b3_header
35
+
36
+ metadata
37
+ end
38
+
39
+ def self.extract(metadata)
40
+ # Metadata format:
41
+ # b3: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
42
+ # https://github.com/apache/incubator-zipkin-b3-propagation/tree/7c6e9f14d6627832bd80baa87ac7dabee7be23cf#single-header
43
+ # DEV: `{SamplingState}` and `{ParentSpanId`}` are optional
44
+
45
+ b3_single = Parser.new(metadata).metadata_for_key(B3_HEADER_SINGLE)
46
+ return if b3_single.nil?
47
+
48
+ parts = b3_single.split('-')
49
+ trace_id = Helpers.value_to_id(parts[0], 16) unless parts.empty?
50
+ span_id = Helpers.value_to_id(parts[1], 16) if parts.length > 1
51
+ sampling_priority = Helpers.value_to_number(parts[2]) if parts.length > 2
52
+
53
+ # Return early if this propagation is not valid
54
+ return unless trace_id && span_id
55
+
56
+ TraceDigest.new(
57
+ span_id: span_id,
58
+ trace_id: trace_id,
59
+ trace_sampling_priority: sampling_priority
60
+ )
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,73 @@
1
+ require_relative '../headers/ext'
2
+ require_relative 'parser'
3
+
4
+ module Datadog
5
+ module Tracing
6
+ module Distributed
7
+ module Metadata
8
+ # Datadog provides helpers to inject or extract metadata for Datadog style headers
9
+ class Datadog
10
+ include Distributed::Headers::Ext
11
+
12
+ def self.inject!(digest, metadata)
13
+ return if digest.nil?
14
+
15
+ metadata[GRPC_METADATA_TRACE_ID] = digest.trace_id.to_s
16
+ metadata[GRPC_METADATA_PARENT_ID] = digest.span_id.to_s
17
+ if digest.trace_sampling_priority
18
+ metadata[GRPC_METADATA_SAMPLING_PRIORITY] =
19
+ digest.trace_sampling_priority.to_s
20
+ end
21
+ metadata[GRPC_METADATA_ORIGIN] = digest.trace_origin.to_s if digest.trace_origin
22
+
23
+ metadata
24
+ end
25
+
26
+ def self.extract(metadata)
27
+ carrier = Carrier.new(metadata)
28
+
29
+ return nil unless carrier.valid?
30
+
31
+ TraceDigest.new(
32
+ span_id: carrier.parent_id,
33
+ trace_id: carrier.trace_id,
34
+ trace_origin: carrier.origin,
35
+ trace_sampling_priority: carrier.sampling_priority
36
+ )
37
+ end
38
+
39
+ # opentracing.io compliant carrier object
40
+ class Carrier
41
+ include Distributed::Headers::Ext
42
+
43
+ def initialize(metadata = {})
44
+ @metadata = Parser.new(metadata || {})
45
+ end
46
+
47
+ def valid?
48
+ (trace_id && parent_id) || (origin && trace_id)
49
+ end
50
+
51
+ def trace_id
52
+ @metadata.id(GRPC_METADATA_TRACE_ID)
53
+ end
54
+
55
+ def parent_id
56
+ @metadata.id(GRPC_METADATA_PARENT_ID)
57
+ end
58
+
59
+ def sampling_priority
60
+ value = @metadata.metadata_for_key(GRPC_METADATA_SAMPLING_PRIORITY)
61
+ value && value.to_i
62
+ end
63
+
64
+ def origin
65
+ value = @metadata.metadata_for_key(GRPC_METADATA_ORIGIN)
66
+ value if value != ''
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../helpers'
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Distributed
6
+ module Metadata
7
+ # Parser provides easy access and validation methods for metadata headers
8
+ class Parser
9
+ def initialize(metadata)
10
+ @metadata = metadata
11
+ end
12
+
13
+ def id(key, base = 10)
14
+ Helpers.value_to_id(metadata_for_key(key), base)
15
+ end
16
+
17
+ def number(key, base = 10)
18
+ Helpers.value_to_number(metadata_for_key(key), base)
19
+ end
20
+
21
+ def metadata_for_key(key)
22
+ # metadata values can be arrays (multiple headers with the same key)
23
+ value = @metadata[key]
24
+ if value.is_a?(Array)
25
+ value.first
26
+ else
27
+ value
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,6 +1,6 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core'
3
+ require_relative '../core'
4
4
 
5
5
  module Datadog
6
6
  module Tracing
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing/analytics'
4
- require 'datadog/tracing/metadata/ext'
3
+ require_relative '../analytics'
4
+ require_relative 'ext'
5
5
 
6
6
  module Datadog
7
7
  module Tracing
@@ -1,8 +1,8 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core/error'
3
+ require_relative '../../core/error'
4
4
 
5
- require 'datadog/tracing/metadata/ext'
5
+ require_relative 'ext'
6
6
 
7
7
  module Datadog
8
8
  module Tracing
@@ -20,6 +20,11 @@ module Datadog
20
20
  # Name of external service that performed the work
21
21
  TAG_PEER_SERVICE = 'peer.service'
22
22
 
23
+ TAG_KIND = 'span.kind'
24
+
25
+ # Set this tag to `1.0` if the span is a Service Entry span.
26
+ TAG_TOP_LEVEL = '_dd.top_level'
27
+
23
28
  # Defines constants for trace analytics
24
29
  # @public_api
25
30
  module Analytics
@@ -123,6 +128,8 @@ module Datadog
123
128
  TAG_HOSTNAME = '_dd.hostname'
124
129
  TAG_TARGET_HOST = 'out.host'
125
130
  TAG_TARGET_PORT = 'out.port'
131
+ TAG_DESTINATION_NAME = 'network.destination.name'
132
+ TAG_DESTINATION_PORT = 'network.destination.port'
126
133
  end
127
134
 
128
135
  # @public_api
@@ -145,6 +152,24 @@ module Datadog
145
152
  TYPE = 'sql'
146
153
  TAG_QUERY = 'sql.query'
147
154
  end
155
+
156
+ # @public_api
157
+ module DB
158
+ TAG_INSTANCE = 'db.instance'
159
+ TAG_USER = 'db.user'
160
+ TAG_SYSTEM = 'db.system'
161
+ TAG_STATEMENT = 'db.statement'
162
+ TAG_ROW_COUNT = 'db.row_count'
163
+ end
164
+
165
+ # @public_api
166
+ module SpanKind
167
+ TAG_SERVER = 'server'
168
+ TAG_CLIENT = 'client'
169
+ TAG_PRODUCER = 'producer'
170
+ TAG_CONSUMER = 'consumer'
171
+ TAG_INTERNAL = 'internal'
172
+ end
148
173
  end
149
174
  end
150
175
  end
@@ -1,8 +1,8 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core/environment/ext'
3
+ require_relative '../../core/environment/ext'
4
4
 
5
- require 'datadog/tracing/metadata/ext'
5
+ require_relative 'ext'
6
6
 
7
7
  module Datadog
8
8
  module Tracing
@@ -70,6 +70,12 @@ module Datadog
70
70
  meta.delete(key)
71
71
  end
72
72
 
73
+ # Convenient interface for setting a single tag.
74
+ alias []= set_tag
75
+
76
+ # Convenient interface for getting a single tag.
77
+ alias [] get_tag
78
+
73
79
  # Return the metric with the given key, nil if it doesn't exist.
74
80
  def get_metric(key)
75
81
  metrics[key] || meta[key]
@@ -1,8 +1,8 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/tracing/metadata/analytics'
4
- require 'datadog/tracing/metadata/tagging'
5
- require 'datadog/tracing/metadata/errors'
3
+ require_relative 'metadata/analytics'
4
+ require_relative 'metadata/tagging'
5
+ require_relative 'metadata/errors'
6
6
 
7
7
  module Datadog
8
8
  module Tracing
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
 
3
3
  require 'set'
4
- require 'datadog/tracing/pipeline/span_processor'
4
+ require_relative 'span_processor'
5
5
 
6
6
  module Datadog
7
7
  module Tracing
@@ -15,17 +15,21 @@ module Datadog
15
15
  #
16
16
  # @public_api
17
17
  class SpanFilter < SpanProcessor
18
- # NOTE: this SpanFilter implementation only handles traces in which child spans appear
19
- # after parent spans in the trace array. If in the future child spans can be before
18
+ # NOTE: This SpanFilter implementation only handles traces in which child spans appear
19
+ # before parent spans in the trace array. If in the future child spans can be after
20
20
  # parent spans, then the code below will need to be updated.
21
21
  # @!visibility private
22
22
  def call(trace)
23
23
  deleted = Set.new
24
24
 
25
- trace.spans.delete_if do |span|
25
+ span_count = trace.spans.length
26
+ trace.spans.reverse_each.with_index do |span, i|
26
27
  should_delete = deleted.include?(span.parent_id) || drop_it?(span)
27
- deleted << span.id if should_delete
28
- should_delete
28
+
29
+ if should_delete
30
+ deleted << span.id
31
+ trace.spans.delete_at(span_count - 1 - i)
32
+ end
29
33
  end
30
34
 
31
35
  trace