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,15 +1,16 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core/configuration/agent_settings_resolver'
4
- require 'datadog/core/diagnostics/environment_logger'
5
- require 'datadog/core/diagnostics/health'
6
- require 'datadog/core/logger'
7
- require 'datadog/core/runtime/metrics'
8
- require 'datadog/core/workers/runtime_metrics'
9
-
10
- require 'datadog/tracing/tracer'
11
- require 'datadog/tracing/flush'
12
- require 'datadog/tracing/sync_writer'
3
+ require_relative 'agent_settings_resolver'
4
+ require_relative '../diagnostics/environment_logger'
5
+ require_relative '../diagnostics/health'
6
+ require_relative '../logger'
7
+ require_relative '../runtime/metrics'
8
+ require_relative '../telemetry/client'
9
+ require_relative '../workers/runtime_metrics'
10
+
11
+ require_relative '../../tracing/tracer'
12
+ require_relative '../../tracing/flush'
13
+ require_relative '../../tracing/sync_writer'
13
14
 
14
15
  module Datadog
15
16
  module Core
@@ -51,6 +52,10 @@ module Datadog
51
52
  Core::Workers::RuntimeMetrics.new(options)
52
53
  end
53
54
 
55
+ def build_telemetry(settings)
56
+ Telemetry::Client.new(enabled: settings.telemetry.enabled)
57
+ end
58
+
54
59
  def build_tracer(settings, agent_settings)
55
60
  # If a custom tracer has been provided, use it instead.
56
61
  # Ignore all other options (they should already be configured.)
@@ -198,7 +203,7 @@ module Datadog
198
203
  # On the other hand, if datadog/core is loaded by a different product and no general `require 'ddtrace'` is
199
204
  # done, then profiling may not be loaded, and thus to avoid this issue we do a require here (which is a
200
205
  # no-op if profiling is already loaded).
201
- require 'datadog/profiling'
206
+ require_relative '../../profiling'
202
207
  return unless Profiling.supported?
203
208
 
204
209
  unless defined?(Profiling::Tasks::Setup)
@@ -235,24 +240,27 @@ module Datadog
235
240
 
236
241
  # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
237
242
 
238
- trace_identifiers_helper = Profiling::TraceIdentifiers::Helper.new(
239
- tracer: tracer,
240
- endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
241
- )
243
+ if settings.profiling.advanced.force_enable_new_profiler
244
+ recorder = Datadog::Profiling::StackRecorder.new
245
+ collector = Datadog::Profiling::Collectors::CpuAndWallTimeWorker.new(
246
+ recorder: recorder,
247
+ max_frames: settings.profiling.advanced.max_frames
248
+ )
249
+ else
250
+ trace_identifiers_helper = Profiling::TraceIdentifiers::Helper.new(
251
+ tracer: tracer,
252
+ endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
253
+ )
242
254
 
243
- # TODO: It's a bit weird to treat this collector differently from others. See the TODO on the
244
- # Datadog::Profiling::Recorder class for a discussion of this choice.
245
- if settings.profiling.advanced.code_provenance_enabled
246
- code_provenance_collector =
247
- Profiling::Collectors::CodeProvenance.new
255
+ recorder = build_profiler_old_recorder(settings)
256
+ collector = build_profiler_oldstack_collector(settings, recorder, trace_identifiers_helper)
248
257
  end
249
258
 
250
- recorder = build_profiler_recorder(settings, code_provenance_collector)
251
- collectors = build_profiler_collectors(settings, recorder, trace_identifiers_helper)
252
- exporters = build_profiler_exporters(settings, agent_settings)
253
- scheduler = build_profiler_scheduler(settings, recorder, exporters)
259
+ exporter = build_profiler_exporter(settings, recorder)
260
+ transport = build_profiler_transport(settings, agent_settings)
261
+ scheduler = Profiling::Scheduler.new(exporter: exporter, transport: transport)
254
262
 
255
- Profiling::Profiler.new(collectors, scheduler)
263
+ Profiling::Profiler.new([collector], scheduler)
256
264
  end
257
265
 
258
266
  private
@@ -284,42 +292,45 @@ module Datadog
284
292
  Tracing::SyncWriter.new(agent_settings: agent_settings, **writer_options)
285
293
  end
286
294
 
287
- def build_profiler_recorder(settings, code_provenance_collector)
288
- event_classes = [Profiling::Events::StackSample]
295
+ def build_profiler_old_recorder(settings)
296
+ Profiling::OldRecorder.new([Profiling::Events::StackSample], settings.profiling.advanced.max_events)
297
+ end
289
298
 
290
- Profiling::Recorder.new(
291
- event_classes,
292
- settings.profiling.advanced.max_events,
293
- code_provenance_collector: code_provenance_collector
294
- )
299
+ def build_profiler_exporter(settings, recorder)
300
+ code_provenance_collector =
301
+ (Profiling::Collectors::CodeProvenance.new if settings.profiling.advanced.code_provenance_enabled)
302
+
303
+ Profiling::Exporter.new(pprof_recorder: recorder, code_provenance_collector: code_provenance_collector)
295
304
  end
296
305
 
297
- def build_profiler_collectors(settings, recorder, trace_identifiers_helper)
298
- [
299
- Profiling::Collectors::OldStack.new(
300
- recorder,
301
- trace_identifiers_helper: trace_identifiers_helper,
302
- max_frames: settings.profiling.advanced.max_frames
303
- # TODO: Provide proc that identifies Datadog worker threads?
304
- # ignore_thread: settings.profiling.ignore_profiler
305
- )
306
- ]
306
+ def build_profiler_oldstack_collector(settings, old_recorder, trace_identifiers_helper)
307
+ Profiling::Collectors::OldStack.new(
308
+ old_recorder,
309
+ trace_identifiers_helper: trace_identifiers_helper,
310
+ max_frames: settings.profiling.advanced.max_frames
311
+ )
307
312
  end
308
313
 
309
- def build_profiler_exporters(settings, agent_settings)
310
- transport =
311
- settings.profiling.exporter.transport || Profiling::Transport::HTTP.default(
314
+ def build_profiler_transport(settings, agent_settings)
315
+ settings.profiling.exporter.transport ||
316
+ if settings.profiling.advanced.legacy_transport_enabled
317
+ require_relative '../../profiling/transport/http'
318
+
319
+ Datadog.logger.warn('Using legacy profiling transport. Do not use unless instructed to by support.')
320
+
321
+ Profiling::Transport::HTTP.default(
322
+ agent_settings: agent_settings,
323
+ site: settings.site,
324
+ api_key: settings.api_key,
325
+ profiling_upload_timeout_seconds: settings.profiling.upload.timeout_seconds
326
+ )
327
+ end ||
328
+ Profiling::HttpTransport.new(
312
329
  agent_settings: agent_settings,
313
330
  site: settings.site,
314
331
  api_key: settings.api_key,
315
- profiling_upload_timeout_seconds: settings.profiling.upload.timeout_seconds
332
+ upload_timeout_seconds: settings.profiling.upload.timeout_seconds,
316
333
  )
317
-
318
- [Profiling::Exporter.new(transport)]
319
- end
320
-
321
- def build_profiler_scheduler(settings, recorder, exporters)
322
- Profiling::Scheduler.new(recorder, exporters)
323
334
  end
324
335
  end
325
336
 
@@ -328,6 +339,7 @@ module Datadog
328
339
  :logger,
329
340
  :profiler,
330
341
  :runtime_metrics,
342
+ :telemetry,
331
343
  :tracer
332
344
 
333
345
  def initialize(settings)
@@ -347,6 +359,9 @@ module Datadog
347
359
 
348
360
  # Health metrics
349
361
  @health_metrics = self.class.build_health_metrics(settings)
362
+
363
+ # Telemetry
364
+ @telemetry = self.class.build_telemetry(settings)
350
365
  end
351
366
 
352
367
  # Starts up components
@@ -403,6 +418,9 @@ module Datadog
403
418
 
404
419
  unused_statsd = (old_statsd - (old_statsd & new_statsd))
405
420
  unused_statsd.each(&:close)
421
+
422
+ telemetry.stop!
423
+ telemetry.emit_closing! unless replacement
406
424
  end
407
425
  end
408
426
  # rubocop:enable Metrics/ClassLength
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/configuration/option'
3
+ require_relative 'option'
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/configuration/dependency_resolver'
3
+ require_relative 'dependency_resolver'
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -1,8 +1,8 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core/configuration/option_set'
4
- require 'datadog/core/configuration/option_definition'
5
- require 'datadog/core/configuration/option_definition_set'
3
+ require_relative 'option_set'
4
+ require_relative 'option_definition'
5
+ require_relative 'option_definition_set'
6
6
 
7
7
  module Datadog
8
8
  module Core
@@ -2,11 +2,12 @@
2
2
 
3
3
  require 'logger'
4
4
 
5
- require 'datadog/core/configuration/base'
6
- require 'datadog/core/environment/ext'
7
- require 'datadog/core/runtime/ext'
8
- require 'datadog/profiling/ext'
9
- require 'datadog/tracing/configuration/ext'
5
+ require_relative 'base'
6
+ require_relative '../environment/ext'
7
+ require_relative '../runtime/ext'
8
+ require_relative '../telemetry/ext'
9
+ require_relative '../../profiling/ext'
10
+ require_relative '../../tracing/configuration/ext'
10
11
 
11
12
  module Datadog
12
13
  module Core
@@ -233,6 +234,23 @@ module Datadog
233
234
  # Disable gathering of names and versions of gems in use by the service, used to power grouping and
234
235
  # categorization of stack traces.
235
236
  option :code_provenance_enabled, default: true
237
+
238
+ # Use legacy transport code instead of HttpTransport. Temporarily added for migration to HttpTransport,
239
+ # and will be removed soon. Do not use unless instructed to by support.
240
+ option :legacy_transport_enabled do |o|
241
+ o.default { env_to_bool('DD_PROFILING_LEGACY_TRANSPORT_ENABLED', false) }
242
+ o.lazy
243
+ end
244
+
245
+ # Forces enabling the new profiler. We do not yet recommend turning on this option.
246
+ #
247
+ # Note that setting this to "false" (or not setting it) will not prevent the new profiler from
248
+ # being automatically used in the future.
249
+ # This option will be deprecated for removal once the new profiler gets enabled by default for all customers.
250
+ option :force_enable_new_profiler do |o|
251
+ o.default { env_to_bool('DD_PROFILING_FORCE_ENABLE_NEW', false) }
252
+ o.lazy
253
+ end
236
254
  end
237
255
 
238
256
  # @public_api
@@ -412,7 +430,8 @@ module Datadog
412
430
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG,
413
431
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3,
414
432
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_SINGLE_HEADER
415
- ], comma_separated_only: true
433
+ ],
434
+ comma_separated_only: true
416
435
  )
417
436
  end
418
437
 
@@ -430,7 +449,8 @@ module Datadog
430
449
  o.default do
431
450
  env_to_list(
432
451
  Tracing::Configuration::Ext::Distributed::ENV_PROPAGATION_STYLE_INJECT,
433
- [Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG], comma_separated_only: true # Only inject Datadog headers by default
452
+ [Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG],
453
+ comma_separated_only: true # Only inject Datadog headers by default
434
454
  )
435
455
  end
436
456
 
@@ -498,7 +518,7 @@ module Datadog
498
518
  # are always flushed immediately.
499
519
  #
500
520
  # @default 500
501
- # @return [Boolean]
521
+ # @return [Integer]
502
522
  option :min_spans_threshold, default: 500
503
523
  end
504
524
 
@@ -609,6 +629,20 @@ module Datadog
609
629
  o.default { ENV.fetch(Core::Environment::Ext::ENV_VERSION, nil) }
610
630
  o.lazy
611
631
  end
632
+
633
+ # Client-side telemetry configuration
634
+ # @public_api
635
+ settings :telemetry do
636
+ # Enable telemetry collection. This allows telemetry events to be emitted to the telemetry API.
637
+ #
638
+ # @default `DD_INSTRUMENTATION_TELEMETRY_ENABLED` environment variable, otherwise `false`. In a future release,
639
+ # this value will be changed to `true` by default as documented [here](https://docs.datadoghq.com/tracing/configure_data_security/#telemetry-collection).
640
+ # @return [Boolean]
641
+ option :enabled do |o|
642
+ o.default { env_to_bool(Core::Telemetry::Ext::ENV_ENABLED, false) }
643
+ o.lazy
644
+ end
645
+ end
612
646
  end
613
647
  # rubocop:enable Metrics/BlockLength
614
648
  # rubocop:enable Metrics/ClassLength
@@ -1,9 +1,10 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/configuration/components'
4
- require 'datadog/core/configuration/settings'
5
- require 'datadog/core/logger'
6
- require 'datadog/core/pin'
3
+ require_relative 'configuration/components'
4
+ require_relative 'configuration/settings'
5
+ require_relative 'telemetry/emitter'
6
+ require_relative 'logger'
7
+ require_relative 'pin'
7
8
 
8
9
  module Datadog
9
10
  module Core
@@ -89,7 +90,9 @@ module Datadog
89
90
  if components?
90
91
  replace_components!(configuration, @components)
91
92
  else
92
- build_components(configuration)
93
+ components = build_components(configuration)
94
+ components.telemetry.started!
95
+ components
93
96
  end
94
97
  )
95
98
  end
@@ -151,7 +151,7 @@ module Datadog
151
151
  def sampling_rules
152
152
  sampler = Datadog.configuration.tracing.sampler
153
153
  return nil unless sampler.is_a?(Tracing::Sampling::PrioritySampler) &&
154
- sampler.priority_sampler.is_a?(Tracing::Sampling::RuleSampler)
154
+ sampler.priority_sampler.is_a?(Tracing::Sampling::RuleSampler)
155
155
 
156
156
  sampler.priority_sampler.rules.map do |rule|
157
157
  next unless rule.is_a?(Tracing::Sampling::SimpleRule)
@@ -1,7 +1,7 @@
1
1
  # typed: strict
2
2
 
3
- require 'datadog/core/diagnostics/ext'
4
- require 'datadog/core/metrics/client'
3
+ require_relative 'ext'
4
+ require_relative '../metrics/client'
5
5
 
6
6
  module Datadog
7
7
  module Core
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/environment/ext'
3
+ require_relative 'ext'
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/environment/cgroup'
3
+ require_relative 'cgroup'
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'ddtrace/version'
3
+ require_relative '../../../ddtrace/version'
4
4
 
5
5
  module Datadog
6
6
  module Core
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'securerandom'
4
4
 
5
- require 'datadog/core/environment/ext'
6
- require 'datadog/core/utils/forking'
5
+ require_relative 'ext'
6
+ require_relative '../utils/forking'
7
7
 
8
8
  module Datadog
9
9
  module Core
@@ -0,0 +1,40 @@
1
+ # typed: false
2
+
3
+ require 'etc'
4
+
5
+ require_relative 'identity'
6
+
7
+ module Datadog
8
+ module Core
9
+ module Environment
10
+ # For gathering information about the platform
11
+ module Platform
12
+ module_function
13
+
14
+ # @return [String] name of host; `uname -n`
15
+ def hostname
16
+ Identity.lang_version >= '2.2' ? Etc.uname[:nodename] : nil
17
+ end
18
+
19
+ # @return [String] name of kernel; `uname -s`
20
+ def kernel_name
21
+ Identity.lang_version >= '2.2' ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
22
+ end
23
+
24
+ # @return [String] kernel release; `uname -r`
25
+ def kernel_release
26
+ if Identity.lang_engine == 'jruby'
27
+ Etc.uname[:version] # Java's `os.version` maps to `uname -r`
28
+ elsif Identity.lang_version >= '2.2'
29
+ Etc.uname[:release]
30
+ end
31
+ end
32
+
33
+ # @return [String] kernel version; `uname -v`
34
+ def kernel_version
35
+ Etc.uname[:version] if Identity.lang_engine != 'jruby' && Identity.lang_version >= '2.2'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,7 +1,7 @@
1
1
  # typed: false
2
2
 
3
3
  require 'socket'
4
- require 'datadog/core/utils/forking'
4
+ require_relative '../utils/forking'
5
5
 
6
6
  module Datadog
7
7
  module Core
@@ -2,7 +2,7 @@
2
2
 
3
3
  # typed: false
4
4
 
5
- require 'datadog/core/utils'
5
+ require_relative 'utils'
6
6
 
7
7
  module Datadog
8
8
  module Core
@@ -1,6 +1,6 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/configuration'
3
+ require_relative 'configuration'
4
4
 
5
5
  # Global namespace that includes all Datadog functionality.
6
6
  # @public_api
@@ -1,13 +1,13 @@
1
1
  # typed: false
2
2
 
3
- require 'datadog/core/utils/time'
4
- require 'datadog/core/utils/only_once'
5
-
6
- require 'datadog/core/metrics/ext'
7
- require 'datadog/core/metrics/options'
8
- require 'datadog/core/metrics/helpers'
9
- require 'datadog/core/metrics/logging'
10
- require 'datadog/core/metrics/metric'
3
+ require_relative '../utils/time'
4
+ require_relative '../utils/only_once'
5
+
6
+ require_relative 'ext'
7
+ require_relative 'options'
8
+ require_relative 'helpers'
9
+ require_relative 'logging'
10
+ require_relative 'metric'
11
11
 
12
12
  module Datadog
13
13
  module Core
@@ -1,8 +1,8 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/metrics/ext'
4
- require 'datadog/core/environment/ext'
5
- require 'datadog/core/environment/identity'
3
+ require_relative 'ext'
4
+ require_relative '../environment/ext'
5
+ require_relative '../environment/identity'
6
6
 
7
7
  module Datadog
8
8
  module Core
@@ -1,12 +1,12 @@
1
1
  # typed: true
2
2
 
3
- require 'datadog/core/runtime/ext'
3
+ require_relative 'ext'
4
4
 
5
- require 'datadog/core/metrics/client'
6
- require 'datadog/core/environment/class_count'
7
- require 'datadog/core/environment/gc'
8
- require 'datadog/core/environment/thread_count'
9
- require 'datadog/core/environment/vm_cache'
5
+ require_relative '../metrics/client'
6
+ require_relative '../environment/class_count'
7
+ require_relative '../environment/gc'
8
+ require_relative '../environment/thread_count'
9
+ require_relative '../environment/vm_cache'
10
10
 
11
11
  module Datadog
12
12
  module Core
@@ -0,0 +1,79 @@
1
+ # typed: true
2
+
3
+ require_relative 'emitter'
4
+ require_relative 'heartbeat'
5
+ require_relative '../utils/forking'
6
+
7
+ module Datadog
8
+ module Core
9
+ module Telemetry
10
+ # Telemetry entrypoint, coordinates sending telemetry events at various points in app lifecyle
11
+ class Client
12
+ attr_reader \
13
+ :emitter,
14
+ :enabled,
15
+ :unsupported,
16
+ :worker
17
+
18
+ include Core::Utils::Forking
19
+
20
+ # @param enabled [Boolean] Determines whether telemetry events should be sent to the API
21
+ def initialize(enabled: true)
22
+ @enabled = enabled
23
+ @emitter = Emitter.new
24
+ @stopped = false
25
+ @unsupported = false
26
+ @worker = Telemetry::Heartbeat.new(enabled: @enabled) do
27
+ heartbeat!
28
+ end
29
+ end
30
+
31
+ def disable!
32
+ @enabled = false
33
+ @worker.enabled = false
34
+ end
35
+
36
+ def started!
37
+ return if !@enabled || forked?
38
+
39
+ res = @emitter.request(:'app-started')
40
+
41
+ if res.not_found? # Telemetry is only supported by agent versions 7.34 and up
42
+ Datadog.logger.debug('Agent does not support telemetry; disabling future telemetry events.')
43
+ disable!
44
+ @unsupported = true # Prevent telemetry from getting re-enabled
45
+ end
46
+
47
+ res
48
+ end
49
+
50
+ def emit_closing!
51
+ return if !@enabled || forked?
52
+
53
+ @emitter.request(:'app-closing')
54
+ end
55
+
56
+ def stop!
57
+ return if @stopped
58
+
59
+ @worker.stop(true, 0)
60
+ @stopped = true
61
+ end
62
+
63
+ def integrations_change!
64
+ return if !@enabled || forked?
65
+
66
+ @emitter.request(:'app-integrations-change')
67
+ end
68
+
69
+ private
70
+
71
+ def heartbeat!
72
+ return if !@enabled || forked?
73
+
74
+ @emitter.request(:'app-heartbeat')
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end