ddtrace 1.2.0 → 1.3.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -1
  3. data/LICENSE-3rdparty.csv +2 -0
  4. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +1 -1
  5. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +9 -2
  6. data/ext/ddtrace_profiling_native_extension/clock_id.h +20 -0
  7. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +30 -1
  8. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +10 -1
  9. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +148 -28
  10. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +6 -0
  11. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +11 -7
  12. data/ext/ddtrace_profiling_native_extension/extconf.rb +24 -19
  13. data/ext/ddtrace_profiling_native_extension/helpers.h +12 -0
  14. data/ext/ddtrace_profiling_native_extension/http_transport.c +40 -47
  15. data/ext/ddtrace_profiling_native_extension/{libddprof_helpers.h → libdatadog_helpers.h} +2 -1
  16. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +36 -20
  17. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +30 -29
  18. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +2 -5
  19. data/ext/ddtrace_profiling_native_extension/profiling.c +2 -3
  20. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +25 -0
  21. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +33 -1
  22. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +292 -18
  23. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +1 -1
  24. data/lib/datadog/appsec/autoload.rb +4 -2
  25. data/lib/datadog/appsec/configuration.rb +1 -1
  26. data/lib/datadog/appsec/contrib/auto_instrument.rb +0 -2
  27. data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -1
  28. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -2
  29. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +6 -6
  30. data/lib/datadog/appsec/contrib/rack/integration.rb +5 -5
  31. data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -2
  32. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +1 -1
  33. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +1 -1
  34. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +1 -1
  35. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +2 -2
  36. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +3 -3
  37. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -2
  38. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +4 -4
  39. data/lib/datadog/appsec/contrib/rails/integration.rb +4 -4
  40. data/lib/datadog/appsec/contrib/rails/patcher.rb +16 -12
  41. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +1 -1
  42. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -2
  43. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +5 -5
  44. data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
  45. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +16 -12
  46. data/lib/datadog/appsec/event.rb +3 -3
  47. data/lib/datadog/appsec/extensions.rb +1 -1
  48. data/lib/datadog/appsec/processor.rb +1 -1
  49. data/lib/datadog/appsec/reactive/engine.rb +2 -2
  50. data/lib/datadog/appsec/reactive/operation.rb +3 -3
  51. data/lib/datadog/appsec.rb +5 -5
  52. data/lib/datadog/ci/configuration/components.rb +1 -1
  53. data/lib/datadog/ci/configuration/settings.rb +1 -1
  54. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -2
  55. data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -5
  56. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -1
  57. data/lib/datadog/ci/contrib/cucumber/integration.rb +3 -3
  58. data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -2
  59. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -2
  60. data/lib/datadog/ci/contrib/rspec/example.rb +5 -5
  61. data/lib/datadog/ci/contrib/rspec/integration.rb +3 -3
  62. data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -2
  63. data/lib/datadog/ci/ext/environment.rb +8 -6
  64. data/lib/datadog/ci/extensions.rb +4 -4
  65. data/lib/datadog/ci/flush.rb +2 -2
  66. data/lib/datadog/ci/test.rb +3 -3
  67. data/lib/datadog/ci.rb +6 -6
  68. data/lib/datadog/core/buffer/cruby.rb +1 -1
  69. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  70. data/lib/datadog/core/configuration/agent_settings_resolver.rb +6 -6
  71. data/lib/datadog/core/configuration/base.rb +2 -2
  72. data/lib/datadog/core/configuration/components.rb +26 -43
  73. data/lib/datadog/core/configuration/option_definition.rb +1 -1
  74. data/lib/datadog/core/configuration/option_definition_set.rb +1 -1
  75. data/lib/datadog/core/configuration/options.rb +3 -3
  76. data/lib/datadog/core/configuration/settings.rb +9 -7
  77. data/lib/datadog/core/configuration.rb +4 -4
  78. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  79. data/lib/datadog/core/diagnostics/health.rb +2 -2
  80. data/lib/datadog/core/environment/cgroup.rb +1 -1
  81. data/lib/datadog/core/environment/container.rb +1 -1
  82. data/lib/datadog/core/environment/ext.rb +1 -1
  83. data/lib/datadog/core/environment/identity.rb +2 -2
  84. data/lib/datadog/core/environment/platform.rb +1 -1
  85. data/lib/datadog/core/environment/socket.rb +1 -1
  86. data/lib/datadog/core/error.rb +1 -1
  87. data/lib/datadog/core/extensions.rb +1 -1
  88. data/lib/datadog/core/metrics/client.rb +8 -8
  89. data/lib/datadog/core/metrics/options.rb +3 -3
  90. data/lib/datadog/core/runtime/metrics.rb +6 -6
  91. data/lib/datadog/core/utils/object_set.rb +1 -1
  92. data/lib/datadog/core/utils/string_table.rb +1 -1
  93. data/lib/datadog/core/utils/time.rb +3 -3
  94. data/lib/datadog/core/utils.rb +2 -2
  95. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -2
  96. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -3
  97. data/lib/datadog/core/workers/async.rb +1 -1
  98. data/lib/datadog/core/workers/polling.rb +2 -2
  99. data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
  100. data/lib/datadog/core.rb +50 -50
  101. data/lib/datadog/kit.rb +1 -1
  102. data/lib/datadog/opentracer/distributed_headers.rb +2 -2
  103. data/lib/datadog/opentracer/rack_propagator.rb +11 -7
  104. data/lib/datadog/opentracer/span.rb +1 -1
  105. data/lib/datadog/opentracer/text_map_propagator.rb +9 -6
  106. data/lib/datadog/opentracer/thread_local_scope_manager.rb +1 -1
  107. data/lib/datadog/opentracer/tracer.rb +19 -15
  108. data/lib/datadog/opentracer.rb +16 -16
  109. data/lib/datadog/profiling/buffer.rb +3 -3
  110. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +4 -19
  111. data/lib/datadog/profiling/collectors/old_stack.rb +7 -7
  112. data/lib/datadog/profiling/collectors/stack.rb +3 -8
  113. data/lib/datadog/profiling/encoding/profile.rb +1 -1
  114. data/lib/datadog/profiling/events/stack.rb +1 -1
  115. data/lib/datadog/profiling/exporter.rb +17 -9
  116. data/lib/datadog/profiling/ext/forking.rb +36 -37
  117. data/lib/datadog/profiling/ext.rb +1 -0
  118. data/lib/datadog/profiling/flush.rb +0 -3
  119. data/lib/datadog/profiling/http_transport.rb +4 -3
  120. data/lib/datadog/profiling/old_recorder.rb +2 -7
  121. data/lib/datadog/profiling/pprof/builder.rb +4 -4
  122. data/lib/datadog/profiling/pprof/converter.rb +1 -1
  123. data/lib/datadog/profiling/pprof/message_set.rb +1 -1
  124. data/lib/datadog/profiling/pprof/stack_sample.rb +4 -4
  125. data/lib/datadog/profiling/pprof/string_table.rb +1 -1
  126. data/lib/datadog/profiling/pprof/template.rb +5 -5
  127. data/lib/datadog/profiling/preload.rb +1 -1
  128. data/lib/datadog/profiling/scheduler.rb +5 -4
  129. data/lib/datadog/profiling/stack_recorder.rb +14 -4
  130. data/lib/datadog/profiling/tag_builder.rb +6 -1
  131. data/lib/datadog/profiling/tasks/setup.rb +2 -2
  132. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -2
  133. data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -1
  134. data/lib/datadog/profiling/transport/http/api/endpoint.rb +5 -5
  135. data/lib/datadog/profiling/transport/http/api/instance.rb +2 -2
  136. data/lib/datadog/profiling/transport/http/api/spec.rb +1 -1
  137. data/lib/datadog/profiling/transport/http/api.rb +5 -5
  138. data/lib/datadog/profiling/transport/http/builder.rb +3 -3
  139. data/lib/datadog/profiling/transport/http/client.rb +2 -2
  140. data/lib/datadog/profiling/transport/http/response.rb +1 -1
  141. data/lib/datadog/profiling/transport/http.rb +21 -15
  142. data/lib/datadog/profiling.rb +20 -20
  143. data/lib/datadog/tracing/analytics.rb +1 -1
  144. data/lib/datadog/tracing/buffer.rb +5 -5
  145. data/lib/datadog/tracing/context.rb +1 -1
  146. data/lib/datadog/tracing/context_provider.rb +2 -2
  147. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
  148. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -5
  149. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -4
  150. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -3
  151. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -4
  152. data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
  153. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -4
  154. data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -4
  155. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
  156. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
  157. data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
  158. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -3
  159. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -3
  160. data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
  161. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -4
  162. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
  163. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +6 -6
  164. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
  165. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -2
  166. data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -4
  167. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -2
  168. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
  169. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -2
  170. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  171. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -5
  172. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -5
  173. data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
  174. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -2
  175. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -2
  176. data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -4
  177. data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -7
  178. data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -1
  179. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -3
  180. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
  181. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -4
  182. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -4
  183. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -4
  184. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -4
  185. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -4
  186. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -4
  187. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
  188. data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -4
  189. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -2
  190. data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -4
  191. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
  192. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -5
  193. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -3
  194. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -2
  195. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
  196. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -3
  197. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -4
  198. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
  199. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -3
  200. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  201. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -4
  202. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -6
  203. data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
  204. data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -6
  205. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
  206. data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -2
  207. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -9
  208. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -2
  209. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
  210. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -2
  211. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -5
  212. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  213. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
  214. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
  215. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  216. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
  217. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +2 -2
  218. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +3 -4
  219. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -3
  220. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
  221. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
  222. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  223. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -3
  224. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -2
  225. data/lib/datadog/tracing/contrib/configurable.rb +2 -2
  226. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  227. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
  228. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
  229. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +4 -5
  230. data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -3
  231. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
  232. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
  233. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -3
  234. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -0
  235. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -3
  236. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -2
  237. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +3 -4
  238. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
  239. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
  240. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -3
  241. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -7
  242. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
  243. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
  244. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  245. data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -4
  246. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +3 -4
  247. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
  248. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +2 -2
  249. data/lib/datadog/tracing/contrib/excon/integration.rb +4 -4
  250. data/lib/datadog/tracing/contrib/excon/middleware.rb +6 -7
  251. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
  252. data/lib/datadog/tracing/contrib/extensions.rb +3 -3
  253. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +2 -2
  254. data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -4
  255. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -6
  256. data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -5
  257. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -3
  258. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -5
  259. data/lib/datadog/tracing/contrib/grape/integration.rb +3 -3
  260. data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -4
  261. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +2 -2
  262. data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -3
  263. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -3
  264. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +3 -3
  265. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +4 -4
  266. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +6 -6
  267. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +3 -4
  268. data/lib/datadog/tracing/contrib/grpc/integration.rb +3 -3
  269. data/lib/datadog/tracing/contrib/grpc/patcher.rb +5 -5
  270. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -2
  271. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +2 -2
  272. data/lib/datadog/tracing/contrib/http/instrumentation.rb +3 -4
  273. data/lib/datadog/tracing/contrib/http/integration.rb +6 -6
  274. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
  275. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +2 -2
  276. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +4 -5
  277. data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -4
  278. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
  279. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +2 -2
  280. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -5
  281. data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -4
  282. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
  283. data/lib/datadog/tracing/contrib/integration.rb +3 -3
  284. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
  285. data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
  286. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -2
  287. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
  288. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
  289. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -4
  290. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -4
  291. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -4
  292. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -4
  293. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +2 -2
  294. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +2 -2
  295. data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
  296. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -3
  297. data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -3
  298. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
  299. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -2
  300. data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -3
  301. data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -2
  302. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
  303. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
  304. data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -4
  305. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  306. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
  307. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +4 -4
  308. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +2 -2
  309. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +3 -4
  310. data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -3
  311. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
  312. data/lib/datadog/tracing/contrib/patcher.rb +2 -2
  313. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +2 -2
  314. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +3 -4
  315. data/lib/datadog/tracing/contrib/pg/integration.rb +3 -3
  316. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
  317. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
  318. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -3
  319. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -3
  320. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
  321. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -2
  322. data/lib/datadog/tracing/contrib/qless/integration.rb +3 -3
  323. data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
  324. data/lib/datadog/tracing/contrib/qless/qless_job.rb +2 -3
  325. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -2
  326. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -3
  327. data/lib/datadog/tracing/contrib/que/integration.rb +4 -4
  328. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
  329. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
  330. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -2
  331. data/lib/datadog/tracing/contrib/racecar/event.rb +4 -5
  332. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  333. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -2
  334. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  335. data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
  336. data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -3
  337. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
  338. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
  339. data/lib/datadog/tracing/contrib/rack/integration.rb +4 -4
  340. data/lib/datadog/tracing/contrib/rack/middlewares.rb +24 -20
  341. data/lib/datadog/tracing/contrib/rack/patcher.rb +4 -2
  342. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
  343. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  344. data/lib/datadog/tracing/contrib/rails/framework.rb +16 -21
  345. data/lib/datadog/tracing/contrib/rails/integration.rb +4 -4
  346. data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -2
  347. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -2
  348. data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -8
  349. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
  350. data/lib/datadog/tracing/contrib/rails/utils.rb +1 -1
  351. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +17 -2
  352. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -7
  353. data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
  354. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -4
  355. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
  356. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
  357. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -7
  358. data/lib/datadog/tracing/contrib/redis/integration.rb +3 -3
  359. data/lib/datadog/tracing/contrib/redis/patcher.rb +6 -6
  360. data/lib/datadog/tracing/contrib/redis/tags.rb +3 -4
  361. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -3
  362. data/lib/datadog/tracing/contrib/resque/integration.rb +3 -3
  363. data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -2
  364. data/lib/datadog/tracing/contrib/resque/resque_job.rb +3 -4
  365. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -2
  366. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -3
  367. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
  368. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -5
  369. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
  370. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -2
  371. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -3
  372. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
  373. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
  374. data/lib/datadog/tracing/contrib/sequel/database.rb +4 -5
  375. data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -5
  376. data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -3
  377. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
  378. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
  379. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -3
  380. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -4
  381. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  382. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -1
  383. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +4 -5
  384. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -3
  385. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -0
  386. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -3
  387. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -7
  388. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +19 -1
  389. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +5 -6
  390. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
  391. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -6
  392. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -2
  393. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
  394. data/lib/datadog/tracing/contrib/sinatra/env.rb +2 -2
  395. data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
  396. data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -1
  397. data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -3
  398. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
  399. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +7 -8
  400. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +6 -7
  401. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -2
  402. data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -4
  403. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
  404. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +2 -3
  405. data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -2
  406. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
  407. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -4
  408. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -3
  409. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -5
  410. data/lib/datadog/tracing/contrib.rb +48 -48
  411. data/lib/datadog/tracing/correlation.rb +1 -1
  412. data/lib/datadog/tracing/distributed/headers/b3.rb +4 -4
  413. data/lib/datadog/tracing/distributed/headers/b3_single.rb +4 -4
  414. data/lib/datadog/tracing/distributed/headers/datadog.rb +3 -3
  415. data/lib/datadog/tracing/distributed/headers/parser.rb +1 -1
  416. data/lib/datadog/tracing/distributed/helpers.rb +2 -2
  417. data/lib/datadog/tracing/distributed/metadata/b3.rb +4 -4
  418. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +4 -4
  419. data/lib/datadog/tracing/distributed/metadata/datadog.rb +2 -2
  420. data/lib/datadog/tracing/distributed/metadata/parser.rb +1 -1
  421. data/lib/datadog/tracing/event.rb +1 -1
  422. data/lib/datadog/tracing/metadata/analytics.rb +2 -2
  423. data/lib/datadog/tracing/metadata/errors.rb +2 -2
  424. data/lib/datadog/tracing/metadata/tagging.rb +2 -2
  425. data/lib/datadog/tracing/metadata.rb +3 -3
  426. data/lib/datadog/tracing/pipeline/span_filter.rb +10 -6
  427. data/lib/datadog/tracing/pipeline.rb +3 -3
  428. data/lib/datadog/tracing/propagation/grpc.rb +6 -6
  429. data/lib/datadog/tracing/propagation/http.rb +8 -8
  430. data/lib/datadog/tracing/runtime/metrics.rb +1 -1
  431. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  432. data/lib/datadog/tracing/sampling/priority_sampler.rb +5 -5
  433. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +2 -2
  434. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +3 -3
  435. data/lib/datadog/tracing/sampling/rate_limiter.rb +1 -1
  436. data/lib/datadog/tracing/sampling/rate_sampler.rb +5 -5
  437. data/lib/datadog/tracing/sampling/rule.rb +3 -3
  438. data/lib/datadog/tracing/sampling/rule_sampler.rb +4 -4
  439. data/lib/datadog/tracing/span.rb +4 -4
  440. data/lib/datadog/tracing/span_operation.rb +9 -9
  441. data/lib/datadog/tracing/sync_writer.rb +5 -5
  442. data/lib/datadog/tracing/trace_operation.rb +16 -9
  443. data/lib/datadog/tracing/trace_segment.rb +5 -5
  444. data/lib/datadog/tracing/tracer.rb +15 -15
  445. data/lib/datadog/tracing/workers/trace_writer.rb +9 -9
  446. data/lib/datadog/tracing/workers.rb +3 -3
  447. data/lib/datadog/tracing/writer.rb +5 -5
  448. data/lib/datadog/tracing.rb +8 -8
  449. data/lib/ddtrace/auto_instrument.rb +2 -2
  450. data/lib/ddtrace/transport/ext.rb +7 -0
  451. data/lib/ddtrace/transport/http/adapters/net.rb +2 -2
  452. data/lib/ddtrace/transport/http/adapters/test.rb +1 -1
  453. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -2
  454. data/lib/ddtrace/transport/http/api/map.rb +1 -1
  455. data/lib/ddtrace/transport/http/api.rb +4 -4
  456. data/lib/ddtrace/transport/http/builder.rb +5 -5
  457. data/lib/ddtrace/transport/http/client.rb +2 -2
  458. data/lib/ddtrace/transport/http/response.rb +1 -1
  459. data/lib/ddtrace/transport/http/statistics.rb +1 -1
  460. data/lib/ddtrace/transport/http/traces.rb +5 -5
  461. data/lib/ddtrace/transport/http.rb +12 -9
  462. data/lib/ddtrace/transport/io/client.rb +2 -2
  463. data/lib/ddtrace/transport/io/response.rb +1 -1
  464. data/lib/ddtrace/transport/io/traces.rb +3 -3
  465. data/lib/ddtrace/transport/io.rb +3 -3
  466. data/lib/ddtrace/transport/statistics.rb +2 -2
  467. data/lib/ddtrace/transport/trace_formatter.rb +5 -5
  468. data/lib/ddtrace/transport/traces.rb +5 -5
  469. data/lib/ddtrace/version.rb +1 -1
  470. data/lib/ddtrace.rb +6 -6
  471. metadata +14 -22
  472. data/.editorconfig +0 -22
  473. data/.gitignore +0 -58
  474. data/CONTRIBUTING.md +0 -81
  475. data/ddtrace.gemspec +0 -71
  476. data/docs/0.x-trace.png +0 -0
  477. data/docs/1.0-trace.png +0 -0
  478. data/docs/AutoInstrumentation.md +0 -36
  479. data/docs/Deprecation.md +0 -8
  480. data/docs/DevelopmentGuide.md +0 -259
  481. data/docs/GettingStarted.md +0 -2712
  482. data/docs/ProfilingDevelopment.md +0 -109
  483. data/docs/PublicApi.md +0 -14
  484. data/docs/UpgradeGuide.md +0 -736
data/ddtrace.gemspec DELETED
@@ -1,71 +0,0 @@
1
- # coding: utf-8
2
-
3
- lib = File.expand_path('../lib', __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'ddtrace/version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'ddtrace'
9
- spec.version = DDTrace::VERSION::STRING
10
- spec.required_ruby_version = [">= #{DDTrace::VERSION::MINIMUM_RUBY_VERSION}", "< #{DDTrace::VERSION::MAXIMUM_RUBY_VERSION}"]
11
- spec.required_rubygems_version = '>= 2.0.0'
12
- spec.authors = ['Datadog, Inc.']
13
- spec.email = ['dev@datadoghq.com']
14
-
15
- spec.summary = 'Datadog tracing code for your Ruby applications'
16
- spec.description = <<-EOS.gsub(/^[\s]+/, '')
17
- ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
18
- as they flow across web servers, databases and microservices so that developers
19
- have great visiblity into bottlenecks and troublesome requests.
20
- EOS
21
-
22
- spec.homepage = 'https://github.com/DataDog/dd-trace-rb'
23
- spec.license = 'BSD-3-Clause'
24
-
25
- if spec.respond_to?(:metadata)
26
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
27
- else
28
- raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
29
- end
30
-
31
- spec.files =
32
- `git ls-files -z`
33
- .split("\x0")
34
- .reject { |f| f.match(%r{^(test|spec|features|[.]circleci|[.]github|[.]dd-ci|benchmarks|gemfiles|integration|tasks|sorbet|yard)/}) }
35
- .reject do |f|
36
- ['.dockerignore', '.env', '.gitattributes', '.gitlab-ci.yml', '.rspec', '.rubocop.yml',
37
- '.rubocop_todo.yml', '.simplecov', 'Appraisals', 'Gemfile', 'Rakefile', 'docker-compose.yml', '.pryrc', '.yardopts'].include?(f)
38
- end
39
- spec.executables = ['ddtracerb']
40
- spec.require_paths = ['lib']
41
-
42
- # Important note: This `if` ONLY works for development. When packaging up the gem, Ruby runs this code, and hardcodes
43
- # the output in the `.gem` file that gets uploaded to rubygems. So the decision here gets hardcoded, we don't actually
44
- # pick a version depending on the Ruby customers are running, as it may appear.
45
- # For more context, see the discussion in
46
- # * https://github.com/DataDog/dd-trace-rb/pull/1739
47
- # * https://github.com/DataDog/dd-trace-rb/pull/1336
48
- if RUBY_VERSION >= '2.2.0'
49
- spec.add_dependency 'msgpack'
50
- else
51
- # msgpack 1.4 fails for Ruby 2.1: https://github.com/msgpack/msgpack-ruby/issues/205
52
- spec.add_dependency 'msgpack', '< 1.4'
53
- end
54
-
55
- # Used by the profiler native extension to support older Rubies (see NativeExtensionDesign.md for notes)
56
- #
57
- # Most versions of this gem work for us, but 0.10.16 includes an important fix for Ruby 2.5.4 to 2.5.9
58
- # (https://github.com/ruby-debug/debase-ruby_core_source/pull/6) so we should keep that as a lower bound going
59
- # forward.
60
- #
61
- # we're pinning it at the latest available version and will manually bump the dependency as needed.
62
- spec.add_dependency 'debase-ruby_core_source', '= 0.10.16'
63
-
64
- # Used by appsec
65
- spec.add_dependency 'libddwaf', '~> 1.3.0.2.0'
66
-
67
- # Used by profiling
68
- spec.add_dependency 'libddprof', '~> 0.6.0.1.0'
69
-
70
- spec.extensions = ['ext/ddtrace_profiling_native_extension/extconf.rb', 'ext/ddtrace_profiling_loader/extconf.rb']
71
- end
data/docs/0.x-trace.png DELETED
Binary file
data/docs/1.0-trace.png DELETED
Binary file
@@ -1,36 +0,0 @@
1
- # Auto Instrumentation
2
-
3
- `ddtrace` can automatically instrument all available libraries, without requiring the manual setup of each one.
4
-
5
- ## Rails
6
-
7
- Add the following to your `Gemfile`/`gems.rb` file:
8
-
9
- ```ruby
10
- source 'https://rubygems.org'
11
- gem 'ddtrace', require: 'ddtrace/auto_instrument'
12
- ```
13
-
14
- ## Ruby
15
-
16
- Require `'ddtrace/auto_instrument'` after all gems that you'd like to instrument have been loaded:
17
-
18
- ```ruby
19
- # Example libraries with supported integrations
20
- require 'sinatra'
21
- require 'faraday'
22
- require 'redis'
23
-
24
- require 'ddtrace/auto_instrument'
25
- ```
26
-
27
- ## Additional configuration
28
-
29
- You can reconfigure, override, or disable any specific integration settings by adding
30
- a [`Datadog.configure`](GettingStarted.md#integration-instrumentation) call after `ddtrace/auto_instrument` is activated.
31
-
32
- ## Custom integrations
33
-
34
- Custom integrations that want to support auto instrumentation need to be registered
35
- (e.g. invoke their {Datadog::Tracing::Contrib::Registerable::ClassMethods#register_as} method) before
36
- the tracer requires `'ddtrace/auto_instrument'`.
data/docs/Deprecation.md DELETED
@@ -1,8 +0,0 @@
1
- # Deprecation
2
-
3
- Deprecated API objects are scheduled to be **removed in the next major version release**.
4
-
5
- Deprecated objects can still be safely used until the next major version.
6
-
7
- Objects will receive the deprecation tag in a minor version release,
8
- allowing for deprecation warnings to be surfaced to users before the next major release.
@@ -1,259 +0,0 @@
1
- # Developing
2
-
3
- This guide covers some of the common how-tos and technical reference material for developing changes within the trace library.
4
-
5
- ## Table of Contents
6
-
7
- - [Setting up](#setting-up)
8
- - [Testing](#testing)
9
- - [Writing tests](#writing-tests)
10
- - [Running tests](#running-tests)
11
- - [Checking code quality](#checking-code-quality)
12
- - [Running benchmarks](#running-benchmarks)
13
- - [Type checking](#type-checking)
14
- - [Appendix](#appendix)
15
- - [Writing new integrations](#writing-new-integrations)
16
- - [Custom transport adapters](#custom-transport-adapters)
17
-
18
- ## Setting up
19
-
20
- *NOTE: To test locally, you must have `Docker` and `Docker Compose` installed. See the [Docker documentation](https://docs.docker.com/compose/install/) for details.*
21
-
22
- The trace library uses Docker Compose to create a Ruby environment to develop and test within, as well as containers for any dependencies that might be necessary for certain kinds of tests.
23
-
24
- To start a development environment, choose a target Ruby version then run the following:
25
-
26
- ```
27
- # In the root directory of the project...
28
- cd ~/dd-trace-rb
29
-
30
- # Create and start a Ruby 2.3 test environment with its dependencies
31
- docker-compose run --rm tracer-2.3 /bin/bash
32
-
33
- # Then inside the container (e.g. `root@2a73c6d8673e:/app`)...
34
- # Install the library dependencies
35
- bundle install
36
-
37
- # Install build targets
38
- appraisal install
39
- ```
40
-
41
- Then within this container you can [run tests](#running-tests), or [run code quality checks](#checking-code-quality).
42
-
43
- ## Testing
44
-
45
- The test suite uses [RSpec](https://rspec.info/) tests to verify the correctness of both the core trace library and its integrations.
46
-
47
- ### Writing tests
48
-
49
- New tests should be written as RSpec tests in the `spec/ddtrace` folder. Test files should generally mirror the structure of `lib`.
50
-
51
- All changes should be covered by a corresponding RSpec tests. Unit tests are preferred, and integration tests are accepted where appropriate (e.g. acceptance tests, verifying compatibility with datastores, etc) but should be kept to a minimum.
52
-
53
- **Considerations for CI**
54
-
55
- All tests should run in CI. When adding new `spec.rb` files, you may need to add a test task to ensure your test file is run in CI.
56
-
57
- - Ensure that there is a corresponding Rake task defined in `Rakefile` under the the `spec` namespace, whose pattern matches your test file.
58
- - Verify the Rake task is configured to run for the appropriate Ruby runtimes in the `ci` Rake task.
59
-
60
- ### Running tests
61
-
62
- Simplest way to run tests is to run `bundle exec rake ci`, which will run the entire test suite, just as CI does.
63
-
64
- **For the core library**
65
-
66
- Run the tests for the core library with:
67
-
68
- ```
69
- $ bundle exec rake spec:main
70
- ```
71
-
72
- **For integrations**
73
-
74
- Integrations which interact with dependencies not listed in the `ddtrace` gemspec will need to load these dependencies to run their tests.
75
-
76
- To do so, load the dependencies using [Appraisal](https://github.com/thoughtbot/appraisal). You can see a list of available appraisals with `bundle exec appraisal list`, or examine the `Appraisals` file.
77
-
78
- Then to run tests, prefix the test commain with the appraisal. For example:
79
-
80
- ```
81
- # Runs tests for Rails 3.2 + Postgres
82
- $ bundle exec appraisal rails32-postgres spec:rails
83
- # Runs tests for Redis
84
- $ bundle exec appraisal contrib rake spec:redis
85
- ```
86
-
87
- **Passing arguments to tests**
88
-
89
- When running RSpec tests, you may pass additional args as parameters to the Rake task. For example:
90
-
91
- ```
92
- # Runs Redis tests with seed 1234
93
- $ bundle exec appraisal contrib rake spec:redis'[--seed,1234]'
94
- ```
95
-
96
- This can be useful for replicating conditions from CI or isolating certain tests.
97
-
98
- **Checking test coverage**
99
-
100
- You can check test code coverage by creating a report _after_ running a test suite:
101
- ```
102
- # Run the desired test suite
103
- $ bundle exec appraisal contrib rake spec:redis
104
- # Generate report for the suite executed
105
- $ bundle exec rake coverage:report
106
- ```
107
-
108
- A webpage will be generated at `coverage/report/index.html` with the resulting report.
109
-
110
- Because you are likely not running all tests locally, your report will contain partial coverage results.
111
- You *must* check the CI step `coverage` for the complete test coverage report, ensuring coverage is not
112
- decreased.
113
-
114
- **Ensuring tests don't leak resources**
115
-
116
- Tests execution can create resources that are hard to track: threads, sockets, files, etc. Because these resources can come
117
- from the both the test setup as well as the code under test, making sure all resources are properly disposed is important
118
- to prevent the application from inadvertently creating cumulative resources during its execution.
119
-
120
- When running tests that utilize threads, you might see an error message similar to this one:
121
-
122
- ```
123
- Test leaked 1 thread: "Datadog::Workers::AsyncTransport integration tests"
124
- Ensure all threads are terminated when test finishes:
125
- 1: #<Thread:0x00007fcbc99863d0 /Users/marco.costa/work/dd-trace-rb/spec/spec_helper.rb:145 sleep> (Thread)
126
- Thread Creation Site:
127
- ./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:245:in 'new'
128
- ./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:245:in 'block (4 levels) in <top (required)>'
129
- Thread Backtrace:
130
- ./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:262:in 'sleep'
131
- .dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:262:in 'block (5 levels) in <top (required)>'
132
- ./dd-trace-rb/spec/spec_helper.rb:147:in 'block in initialize'
133
- ```
134
-
135
- This means that this test did not finish all threads by the time the test had finished. In this case, the thread
136
- creation can be traced to `workers_integration_spec.rb:245:in 'new'`. The thread itself is sleeping at `workers_integration_spec.rb:262:in 'sleep'`.
137
-
138
- The actionable in this case would be to ensure that the thread created in `workers_integration_spec.rb:245` is properly terminated by invoking `Thread#join` during the test tear down, which will wait for the thread to finish before returning.
139
-
140
- Depending on the situation, the thread in question might need to be forced to terminate. It's recommended to have a mechanism in place to terminate it (a shared variable that changes value when the thread should exit), but as a last resort, `Thread#terminate` forces the thread to finish. Keep in mind that regardless of the termination method, `Thread#join` must be called to ensure that the thread has completely finished its shutdown process.
141
-
142
- ### Checking code quality
143
-
144
- **Linting**
145
-
146
- The trace library uses Rubocop to enforce [code style](https://github.com/bbatsov/ruby-style-guide) and quality. To check, run:
147
-
148
- ```
149
- $ bundle exec rake rubocop
150
- ```
151
-
152
- ### Running benchmarks
153
-
154
- If your changes can have a measurable performance impact, we recommend running our benchmark suite:
155
-
156
- ```
157
- $ bundle exec rake spec:benchmark
158
- ```
159
-
160
- Results are printed to STDOUT as well as written to the `./tmp/benchmark/` directory.
161
-
162
- ## Type checking
163
-
164
- This library uses the [Sorbet](https://sorbet.org/) type checker. Sorbet can be run with `bundle exec srb tc` (or `bundle exec rake
165
- typecheck`). There's also Language Server Protocol support, if your editor supports it.
166
-
167
- Type checking can be controlled on a file-by-file manner, using a `# typed: ...` comment. The default (when none is provided) is assuming `# typed: false`.
168
-
169
- Things to note:
170
-
171
- * For compatibility with older Rubies, we use Sorbet but do not yet allow type annotations in the codebase. If Sorbet is blocking you, feel free to use `# typed: false` or `# typed: ignore` with a quick note on why this was needed. In many cases, Sorbet can typecheck a file correctly with no extra type annotations.
172
-
173
- * Most integration-specific code will reference optional external dependencies which Sorbet cannot see into. You'll probably need to use `# typed: false` or `# typed: ignore` for those files as well.
174
-
175
- ## Appendix
176
-
177
- ### Writing new integrations
178
-
179
- Integrations are extensions to the trace library that add support for external dependencies (gems); they typically add auto-instrumentation to popular gems and frameworks. You will find many of our integrations in the `contrib` folder.
180
-
181
- Some general guidelines for adding new integrations:
182
-
183
- - An integration can either be added directly to `dd-trace-rb`, or developed as its own gem that depends on `ddtrace`.
184
- - Integrations should implement the configuration API for easy, consistent implementation. (See existing integrations as examples of this.)
185
- - All new integrations require documentation, unit/integration tests written in RSpec, and passing CI builds.
186
- - It's highly encouraged to share screenshots or other demos of how the new integration looks and works.
187
-
188
- To get started quickly, it's perfectly fine to copy-paste an existing integration to use as a template, then modify it to match your needs. This is usually the fastest, easiest way to bootstrap a new integration and makes the time-to-first-trace often very quick, usually less than an hour if it's a simple implementation.
189
-
190
- Once you have it working in your application, you can [add unit tests](#writing-tests), [run them locally](#running-tests), and [check for code quality](#checking-code-quality) using Docker Compose.
191
-
192
- Then [open a pull request](../CONTRIBUTING.md#have-a-patch) and be sure to add the following to the description:
193
-
194
- - [Documentation](./GettingStarted.md) for the integration, including versions supported.
195
- - Links to the repository/website of the library being integrated
196
- - Screenshots showing a sample trace
197
- - Any additional code snippets, sample apps, benchmarks, or other resources that demonstrate its implementation are a huge plus!
198
-
199
- ### Custom transport adapters
200
-
201
- The tracer can be configured with transports that customize how data is sent and where it is sent to. This is done through the use of adapters: classes that receive generic requests, process them, and return appropriate responses.
202
-
203
- #### Developing HTTP transport adapters
204
-
205
- To create a custom HTTP adapter, define a class that responds to `call(env)` which returns a kind of `Datadog::Transport::Response`:
206
-
207
- ```ruby
208
- require 'ddtrace/transport/response'
209
-
210
- class CustomAdapter
211
- # Sends HTTP request
212
- # env: Datadog::Transport::HTTP::Env
213
- def call(env)
214
- # Add custom code here to send data.
215
- # Then return a Response object.
216
- Response.new
217
- end
218
-
219
- class Response
220
- include Datadog::Transport::Response
221
-
222
- # Implement the following methods as appropriate
223
- # for your adapter.
224
-
225
- # Return a String
226
- def payload; end
227
-
228
- # Return true/false
229
- # Return nil if it does not apply
230
- def ok?; end
231
- def unsupported?; end
232
- def not_found?; end
233
- def client_error?; end
234
- def server_error?; end
235
- def internal_error?; end
236
- end
237
- end
238
- ```
239
-
240
- Optionally, you can register the adapter as a well-known type:
241
-
242
- ```ruby
243
- Datadog::Transport::HTTP::Builder::REGISTRY.set(CustomAdapter, :custom)
244
- ```
245
-
246
- Then pass an adapter instance to the tracer configuration:
247
-
248
- ```ruby
249
- Datadog.configure do |c|
250
- c.tracing.transport_options = proc { |t|
251
- # By name
252
- t.adapter :custom
253
-
254
- # By instance
255
- custom_adapter = CustomAdapter.new
256
- t.adapter custom_adapter
257
- }
258
- end
259
- ```