ddtrace 1.10.1 → 1.11.0.beta1

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 (352) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +70 -1
  3. data/README.md +8 -9
  4. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +76 -11
  5. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +26 -3
  6. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +3 -0
  7. data/lib/datadog/appsec/component.rb +40 -6
  8. data/lib/datadog/appsec/configuration/settings.rb +20 -4
  9. data/lib/datadog/appsec/configuration.rb +8 -0
  10. data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -0
  11. data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -0
  12. data/lib/datadog/appsec/contrib/integration.rb +2 -0
  13. data/lib/datadog/appsec/contrib/patcher.rb +2 -0
  14. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -0
  15. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +4 -15
  16. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +1 -1
  17. data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -0
  18. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +6 -0
  19. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +17 -3
  20. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -0
  21. data/lib/datadog/appsec/contrib/rails/framework.rb +2 -0
  22. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +1 -1
  23. data/lib/datadog/appsec/contrib/rails/request.rb +2 -0
  24. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -0
  25. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -0
  26. data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -0
  27. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +1 -1
  28. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -0
  29. data/lib/datadog/appsec/extensions.rb +2 -0
  30. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +2 -4
  31. data/lib/datadog/appsec/processor/rule_loader.rb +63 -0
  32. data/lib/datadog/appsec/processor/rule_merger.rb +146 -0
  33. data/lib/datadog/appsec/processor.rb +15 -70
  34. data/lib/datadog/appsec/remote.rb +121 -0
  35. data/lib/datadog/appsec/utils/http.rb +2 -0
  36. data/lib/datadog/appsec/utils.rb +2 -0
  37. data/lib/datadog/appsec.rb +18 -4
  38. data/lib/datadog/ci/configuration/components.rb +2 -0
  39. data/lib/datadog/ci/configuration/settings.rb +2 -0
  40. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -0
  41. data/lib/datadog/ci/contrib/cucumber/formatter.rb +2 -0
  42. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +2 -0
  43. data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -0
  44. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -0
  45. data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -0
  46. data/lib/datadog/ci/extensions.rb +2 -0
  47. data/lib/datadog/ci/flush.rb +2 -0
  48. data/lib/datadog/ci.rb +2 -0
  49. data/lib/datadog/core/buffer/cruby.rb +2 -0
  50. data/lib/datadog/core/buffer/random.rb +2 -0
  51. data/lib/datadog/core/buffer/thread_safe.rb +2 -0
  52. data/lib/datadog/core/chunker.rb +2 -0
  53. data/lib/datadog/core/configuration/agent_settings_resolver.rb +6 -6
  54. data/lib/datadog/core/configuration/components.rb +11 -14
  55. data/lib/datadog/core/configuration/dependency_resolver.rb +2 -0
  56. data/lib/datadog/core/configuration/option.rb +2 -0
  57. data/lib/datadog/core/configuration/option_definition.rb +2 -0
  58. data/lib/datadog/core/configuration/option_definition_set.rb +2 -0
  59. data/lib/datadog/core/configuration/option_set.rb +2 -0
  60. data/lib/datadog/core/configuration/settings.rb +68 -13
  61. data/lib/datadog/core/diagnostics/health.rb +2 -0
  62. data/lib/datadog/core/environment/class_count.rb +2 -0
  63. data/lib/datadog/core/environment/gc.rb +2 -0
  64. data/lib/datadog/core/environment/identity.rb +2 -0
  65. data/lib/datadog/core/environment/socket.rb +2 -0
  66. data/lib/datadog/core/environment/thread_count.rb +2 -0
  67. data/lib/datadog/core/environment/variable_helpers.rb +10 -2
  68. data/lib/datadog/core/environment/vm_cache.rb +2 -0
  69. data/lib/datadog/core/extensions.rb +2 -0
  70. data/lib/datadog/core/header_collection.rb +2 -0
  71. data/lib/datadog/core/metrics/helpers.rb +2 -0
  72. data/lib/datadog/core/metrics/metric.rb +2 -0
  73. data/lib/datadog/core/remote/client/capabilities.rb +57 -0
  74. data/lib/datadog/core/remote/client.rb +146 -0
  75. data/lib/datadog/core/remote/component.rb +150 -0
  76. data/lib/datadog/core/remote/configuration/content.rb +82 -0
  77. data/lib/datadog/core/remote/configuration/digest.rb +62 -0
  78. data/lib/datadog/core/remote/configuration/path.rb +90 -0
  79. data/lib/datadog/core/remote/configuration/repository.rb +278 -0
  80. data/lib/datadog/core/remote/configuration/target.rb +72 -0
  81. data/lib/datadog/core/remote/configuration.rb +18 -0
  82. data/lib/datadog/core/remote/dispatcher.rb +59 -0
  83. data/lib/datadog/core/remote/ext.rb +12 -0
  84. data/lib/datadog/core/remote/worker.rb +96 -0
  85. data/lib/datadog/core/remote.rb +24 -0
  86. data/lib/datadog/core/telemetry/collector.rb +8 -9
  87. data/lib/datadog/core/telemetry/heartbeat.rb +2 -0
  88. data/lib/datadog/core/telemetry/http/env.rb +2 -0
  89. data/lib/datadog/core/telemetry/http/transport.rb +2 -0
  90. data/lib/datadog/core/telemetry/v1/app_event.rb +2 -0
  91. data/lib/datadog/core/telemetry/v1/application.rb +7 -1
  92. data/lib/datadog/core/telemetry/v1/dependency.rb +7 -1
  93. data/lib/datadog/core/telemetry/v1/host.rb +9 -1
  94. data/lib/datadog/core/telemetry/v1/integration.rb +7 -1
  95. data/lib/datadog/core/telemetry/v1/product.rb +9 -1
  96. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +7 -1
  97. data/lib/datadog/core/transport/config.rb +58 -0
  98. data/lib/datadog/core/transport/http/api/instance.rb +37 -0
  99. data/lib/datadog/core/transport/http/api/spec.rb +19 -0
  100. data/lib/datadog/core/transport/http/api.rb +57 -0
  101. data/lib/datadog/core/transport/http/builder.rb +217 -0
  102. data/lib/datadog/core/transport/http/client.rb +45 -0
  103. data/lib/datadog/core/transport/http/config.rb +268 -0
  104. data/lib/datadog/core/transport/http/negotiation.rb +144 -0
  105. data/lib/datadog/core/transport/http.rb +169 -0
  106. data/lib/datadog/core/transport/negotiation.rb +60 -0
  107. data/lib/datadog/core/utils/compression.rb +2 -0
  108. data/lib/datadog/core/utils/hash.rb +32 -0
  109. data/lib/datadog/core/utils/object_set.rb +2 -0
  110. data/lib/datadog/core/utils/safe_dup.rb +20 -2
  111. data/lib/datadog/core/utils/sequence.rb +2 -0
  112. data/lib/datadog/core/utils/time.rb +2 -0
  113. data/lib/datadog/core/worker.rb +2 -0
  114. data/lib/datadog/core/workers/interval_loop.rb +2 -0
  115. data/lib/datadog/core/workers/queue.rb +2 -0
  116. data/lib/datadog/core/workers/runtime_metrics.rb +2 -0
  117. data/lib/datadog/kit.rb +2 -0
  118. data/lib/datadog/opentracer/binary_propagator.rb +2 -0
  119. data/lib/datadog/opentracer/carrier.rb +2 -0
  120. data/lib/datadog/opentracer/global_tracer.rb +2 -0
  121. data/lib/datadog/opentracer/propagator.rb +2 -0
  122. data/lib/datadog/opentracer/scope.rb +2 -0
  123. data/lib/datadog/opentracer/scope_manager.rb +2 -0
  124. data/lib/datadog/opentracer/span_context.rb +2 -0
  125. data/lib/datadog/opentracer/span_context_factory.rb +2 -0
  126. data/lib/datadog/opentracer/thread_local_scope.rb +2 -0
  127. data/lib/datadog/opentracer.rb +2 -0
  128. data/lib/datadog/profiling/backtrace_location.rb +2 -0
  129. data/lib/datadog/profiling/buffer.rb +2 -0
  130. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +19 -3
  131. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +2 -0
  132. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  133. data/lib/datadog/profiling/collectors/stack.rb +2 -0
  134. data/lib/datadog/profiling/collectors/thread_context.rb +2 -2
  135. data/lib/datadog/profiling/component.rb +103 -29
  136. data/lib/datadog/profiling/event.rb +2 -0
  137. data/lib/datadog/profiling/events/stack.rb +2 -0
  138. data/lib/datadog/profiling/ext.rb +28 -26
  139. data/lib/datadog/profiling/flush.rb +2 -0
  140. data/lib/datadog/profiling/native_extension.rb +2 -0
  141. data/lib/datadog/profiling/pprof/message_set.rb +2 -0
  142. data/lib/datadog/profiling/pprof/payload.rb +2 -0
  143. data/lib/datadog/profiling/pprof/string_table.rb +2 -0
  144. data/lib/datadog/profiling/preload.rb +2 -0
  145. data/lib/datadog/profiling/scheduler.rb +3 -1
  146. data/lib/datadog/profiling/stack_recorder.rb +0 -18
  147. data/lib/datadog/profiling/tag_builder.rb +2 -0
  148. data/lib/datadog/profiling/tasks/setup.rb +0 -26
  149. data/lib/datadog/profiling.rb +2 -1
  150. data/lib/datadog/tracing/analytics.rb +2 -0
  151. data/lib/datadog/tracing/configuration/ext.rb +7 -0
  152. data/lib/datadog/tracing/configuration/settings.rb +14 -0
  153. data/lib/datadog/tracing/context.rb +2 -0
  154. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -0
  155. data/lib/datadog/tracing/contrib/action_cable/event.rb +2 -0
  156. data/lib/datadog/tracing/contrib/action_cable/events.rb +2 -0
  157. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +2 -0
  158. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -0
  159. data/lib/datadog/tracing/contrib/action_mailer/event.rb +2 -0
  160. data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -0
  161. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +2 -0
  162. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -24
  163. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -0
  164. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +14 -1
  165. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -0
  166. data/lib/datadog/tracing/contrib/action_view/event.rb +2 -0
  167. data/lib/datadog/tracing/contrib/action_view/events.rb +2 -0
  168. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +2 -0
  169. data/lib/datadog/tracing/contrib/active_job/event.rb +2 -0
  170. data/lib/datadog/tracing/contrib/active_job/events.rb +2 -0
  171. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +2 -0
  172. data/lib/datadog/tracing/contrib/active_job/patcher.rb +2 -0
  173. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -0
  174. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +2 -0
  175. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -0
  176. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +2 -0
  177. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +2 -0
  178. data/lib/datadog/tracing/contrib/active_record/event.rb +2 -0
  179. data/lib/datadog/tracing/contrib/active_record/events.rb +2 -0
  180. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -0
  181. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +2 -0
  182. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -0
  183. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -0
  184. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -0
  185. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -0
  186. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -0
  187. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -0
  188. data/lib/datadog/tracing/contrib/analytics.rb +2 -0
  189. data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -0
  190. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +9 -1
  191. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +8 -2
  192. data/lib/datadog/tracing/contrib/aws/patcher.rb +2 -0
  193. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -0
  194. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +2 -0
  195. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +2 -0
  196. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -0
  197. data/lib/datadog/tracing/contrib/configurable.rb +2 -0
  198. data/lib/datadog/tracing/contrib/configuration/resolver.rb +2 -0
  199. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +2 -0
  200. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -0
  201. data/lib/datadog/tracing/contrib/dalli/patcher.rb +2 -0
  202. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +2 -0
  203. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +2 -0
  204. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -0
  205. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +2 -0
  206. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -0
  207. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -0
  208. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +2 -0
  209. data/lib/datadog/tracing/contrib/ethon/patcher.rb +2 -0
  210. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +2 -0
  211. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -0
  212. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +2 -0
  213. data/lib/datadog/tracing/contrib/faraday/connection.rb +2 -0
  214. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +2 -0
  215. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +2 -0
  216. data/lib/datadog/tracing/contrib/grape/patcher.rb +2 -0
  217. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +2 -0
  218. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +2 -0
  219. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +2 -0
  220. data/lib/datadog/tracing/contrib/grpc/patcher.rb +2 -0
  221. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +2 -0
  222. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +2 -0
  223. data/lib/datadog/tracing/contrib/hanami/patcher.rb +2 -0
  224. data/lib/datadog/tracing/contrib/hanami/plugin.rb +2 -0
  225. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +2 -0
  226. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +2 -0
  227. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +2 -0
  228. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +2 -0
  229. data/lib/datadog/tracing/contrib/http/integration.rb +2 -0
  230. data/lib/datadog/tracing/contrib/http/patcher.rb +2 -0
  231. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +2 -0
  232. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +2 -0
  233. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +2 -0
  234. data/lib/datadog/tracing/contrib/integration.rb +2 -0
  235. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -0
  236. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +2 -0
  237. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +2 -0
  238. data/lib/datadog/tracing/contrib/kafka/event.rb +2 -0
  239. data/lib/datadog/tracing/contrib/kafka/events.rb +2 -0
  240. data/lib/datadog/tracing/contrib/kafka/patcher.rb +2 -0
  241. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -0
  242. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -0
  243. data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -0
  244. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -0
  245. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +2 -0
  246. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +2 -0
  247. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +2 -0
  248. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -0
  249. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -0
  250. data/lib/datadog/tracing/contrib/patchable.rb +2 -0
  251. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +2 -0
  252. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +2 -0
  253. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -0
  254. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -0
  255. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +2 -0
  256. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -0
  257. data/lib/datadog/tracing/contrib/qless/patcher.rb +2 -0
  258. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +2 -0
  259. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -0
  260. data/lib/datadog/tracing/contrib/racecar/event.rb +2 -0
  261. data/lib/datadog/tracing/contrib/racecar/events.rb +2 -0
  262. data/lib/datadog/tracing/contrib/racecar/patcher.rb +2 -0
  263. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +9 -2
  264. data/lib/datadog/tracing/contrib/rails/framework.rb +2 -0
  265. data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -0
  266. data/lib/datadog/tracing/contrib/rails/utils.rb +3 -1
  267. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +2 -0
  268. data/lib/datadog/tracing/contrib/rake/patcher.rb +2 -0
  269. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -0
  270. data/lib/datadog/tracing/contrib/redis/tags.rb +2 -0
  271. data/lib/datadog/tracing/contrib/registerable.rb +2 -0
  272. data/lib/datadog/tracing/contrib/registry.rb +2 -0
  273. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +2 -0
  274. data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -0
  275. data/lib/datadog/tracing/contrib/resque/resque_job.rb +2 -0
  276. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -0
  277. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -0
  278. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +2 -0
  279. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +34 -0
  280. data/lib/datadog/tracing/contrib/roda/ext.rb +18 -0
  281. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
  282. data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
  283. data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
  284. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -0
  285. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +3 -0
  286. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -0
  287. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -0
  288. data/lib/datadog/tracing/contrib/sequel/dataset.rb +2 -0
  289. data/lib/datadog/tracing/contrib/sequel/patcher.rb +2 -0
  290. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +2 -0
  291. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +2 -0
  292. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +2 -0
  293. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +12 -3
  294. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -0
  295. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
  296. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +2 -0
  297. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +2 -0
  298. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +2 -0
  299. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +2 -0
  300. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +2 -0
  301. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +18 -2
  302. data/lib/datadog/tracing/contrib/sidekiq/{tracing.rb → utils.rb} +3 -1
  303. data/lib/datadog/tracing/contrib/sinatra/headers.rb +2 -0
  304. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +2 -0
  305. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +2 -0
  306. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +28 -0
  307. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -0
  308. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +2 -0
  309. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +2 -0
  310. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +2 -2
  311. data/lib/datadog/tracing/contrib.rb +3 -0
  312. data/lib/datadog/tracing/correlation.rb +10 -10
  313. data/lib/datadog/tracing/diagnostics/health.rb +2 -0
  314. data/lib/datadog/tracing/distributed/trace_context.rb +22 -15
  315. data/lib/datadog/tracing/flush.rb +2 -0
  316. data/lib/datadog/tracing/metadata/analytics.rb +2 -0
  317. data/lib/datadog/tracing/metadata/errors.rb +2 -0
  318. data/lib/datadog/tracing/metadata/ext.rb +6 -0
  319. data/lib/datadog/tracing/metadata.rb +2 -0
  320. data/lib/datadog/tracing/pipeline/span_filter.rb +2 -0
  321. data/lib/datadog/tracing/pipeline/span_processor.rb +2 -0
  322. data/lib/datadog/tracing/propagation/http.rb +2 -0
  323. data/lib/datadog/tracing/runtime/metrics.rb +2 -0
  324. data/lib/datadog/tracing/sampling/all_sampler.rb +2 -0
  325. data/lib/datadog/tracing/sampling/matcher.rb +2 -0
  326. data/lib/datadog/tracing/sampling/priority_sampler.rb +2 -0
  327. data/lib/datadog/tracing/sampling/span/sampler.rb +2 -0
  328. data/lib/datadog/tracing/sync_writer.rb +2 -0
  329. data/lib/datadog/tracing/trace_digest.rb +2 -0
  330. data/lib/datadog/tracing/utils.rb +2 -0
  331. data/lib/datadog/tracing.rb +2 -0
  332. data/lib/ddtrace/auto_instrument.rb +2 -0
  333. data/lib/ddtrace/auto_instrument_base.rb +2 -0
  334. data/lib/ddtrace/transport/http/adapters/net.rb +12 -0
  335. data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
  336. data/lib/ddtrace/transport/http/api/endpoint.rb +2 -0
  337. data/lib/ddtrace/transport/http/api/fallbacks.rb +2 -0
  338. data/lib/ddtrace/transport/http/api/instance.rb +2 -0
  339. data/lib/ddtrace/transport/http/api/map.rb +2 -0
  340. data/lib/ddtrace/transport/http/api/spec.rb +2 -0
  341. data/lib/ddtrace/transport/http/env.rb +2 -0
  342. data/lib/ddtrace/transport/http/response.rb +2 -0
  343. data/lib/ddtrace/transport/io/response.rb +2 -0
  344. data/lib/ddtrace/transport/io/traces.rb +2 -0
  345. data/lib/ddtrace/transport/io.rb +2 -0
  346. data/lib/ddtrace/transport/parcel.rb +2 -0
  347. data/lib/ddtrace/transport/request.rb +3 -1
  348. data/lib/ddtrace/transport/statistics.rb +2 -0
  349. data/lib/ddtrace/transport/trace_formatter.rb +2 -0
  350. data/lib/ddtrace/version.rb +7 -5
  351. data/lib/ddtrace.rb +2 -0
  352. metadata +38 -4
@@ -16,8 +16,26 @@ module Datadog
16
16
  using RefineNil
17
17
  end
18
18
 
19
- def self.frozen_or_dup(v)
20
- v.frozen? ? v : v.dup
19
+ # String#+@ was introduced in Ruby 2.3
20
+ if String.method_defined?(:+@) && String.method_defined?(:-@)
21
+ def self.frozen_or_dup(v)
22
+ # If the string is not frozen, the +(-v) will:
23
+ # - first create a frozen deduplicated copy with -v
24
+ # - then it will dup it more efficiently with +v
25
+ v.frozen? ? v : +(-v)
26
+ end
27
+
28
+ def self.frozen_dup(v)
29
+ -v if v
30
+ end
31
+ else
32
+ def self.frozen_or_dup(v)
33
+ v.frozen? ? v : v.dup
34
+ end
35
+
36
+ def self.frozen_dup(v)
37
+ v.frozen? ? v : v.dup.freeze
38
+ end
21
39
  end
22
40
  end
23
41
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Core
3
5
  module Utils
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Core
3
5
  module Utils
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Core
3
5
  # Base class for work tasks
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Core
3
5
  module Workers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Core
3
5
  module Workers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../runtime/metrics'
2
4
 
3
5
  require_relative '../worker'
data/lib/datadog/kit.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  # Datadog::Kit holds public-facing APIs for higher level user-facing
3
5
  # features, these features not belonging to a specific product. Contrary to
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # OpenTracing propagator for Datadog::OpenTracer::Tracer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # @public_api
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # Patch for OpenTracing module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # OpenTracing propagator for Datadog::OpenTracer::Tracer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # OpenTracing adapter for scope
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # @public_api
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # OpenTracing adapter for SpanContext
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # Creates new Datadog::OpenTracer::SpanContext
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module OpenTracer
3
5
  # OpenTracing adapter for thread local scopes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'opentracing'
2
4
  require 'opentracing/carrier'
3
5
  require_relative 'tracing'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  # Entity class used to represent an entry in a stack trace.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../core/buffer/thread_safe'
2
4
  require_relative '../core/utils/object_set'
3
5
  require_relative '../core/utils/string_table'
@@ -17,17 +17,33 @@ module Datadog
17
17
  recorder:,
18
18
  max_frames:,
19
19
  tracer:,
20
+ endpoint_collection_enabled:,
20
21
  gc_profiling_enabled:,
21
22
  allocation_counting_enabled:,
22
- thread_context_collector: ThreadContext.new(recorder: recorder, max_frames: max_frames, tracer: tracer),
23
- idle_sampling_helper: IdleSamplingHelper.new
23
+ thread_context_collector: ThreadContext.new(
24
+ recorder: recorder,
25
+ max_frames: max_frames,
26
+ tracer: tracer,
27
+ endpoint_collection_enabled: endpoint_collection_enabled,
28
+ ),
29
+ idle_sampling_helper: IdleSamplingHelper.new,
30
+ # **NOTE**: This should only be used for testing; disabling the dynamic sampling rate will increase the
31
+ # profiler overhead!
32
+ dynamic_sampling_rate_enabled: true
24
33
  )
34
+ unless dynamic_sampling_rate_enabled
35
+ Datadog.logger.warn(
36
+ 'Profiling dynamic sampling rate disabled. This should only be used for testing, and will increase overhead!'
37
+ )
38
+ end
39
+
25
40
  self.class._native_initialize(
26
41
  self,
27
42
  thread_context_collector,
28
43
  gc_profiling_enabled,
29
44
  idle_sampling_helper,
30
- allocation_counting_enabled
45
+ allocation_counting_enabled,
46
+ dynamic_sampling_rate_enabled,
31
47
  )
32
48
  @worker_thread = nil
33
49
  @failure_exception = nil
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  module Collectors
@@ -47,7 +47,7 @@ module Datadog
47
47
  true
48
48
  end
49
49
 
50
- def stop(*_)
50
+ def stop(*_unused)
51
51
  @start_stop_mutex.synchronize do
52
52
  Datadog.logger.debug('Requesting IdleSamplingHelper thread shut down')
53
53
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  module Collectors
@@ -14,9 +14,9 @@ module Datadog
14
14
  #
15
15
  # Methods prefixed with _native_ are implemented in `collectors_thread_context.c`
16
16
  class ThreadContext
17
- def initialize(recorder:, max_frames:, tracer:)
17
+ def initialize(recorder:, max_frames:, tracer:, endpoint_collection_enabled:)
18
18
  tracer_context_key = safely_extract_context_key_from(tracer)
19
- self.class._native_initialize(self, recorder, max_frames, tracer_context_key)
19
+ self.class._native_initialize(self, recorder, max_frames, tracer_context_key, endpoint_collection_enabled)
20
20
  end
21
21
 
22
22
  def inspect
@@ -2,9 +2,12 @@
2
2
 
3
3
  module Datadog
4
4
  module Profiling
5
- # Profiling component
5
+ # Responsible for wiring up the Profiler for execution
6
6
  module Component
7
- def build_profiler(settings, agent_settings, tracer)
7
+ # Passing in a `nil` tracer is supported and will disable the following profiling features:
8
+ # * Code Hotspots panel in the trace viewer, as well as scoping a profile down to a span
9
+ # * Endpoint aggregation in the profiler UX, including normalization (resource per endpoint call)
10
+ def self.build_profiler_component(settings:, agent_settings:, optional_tracer:)
8
11
  return unless settings.profiling.enabled
9
12
 
10
13
  # Workaround for weird dependency direction: the Core::Configuration::Components class currently has a
@@ -61,7 +64,7 @@ module Datadog
61
64
 
62
65
  # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
63
66
 
64
- if settings.profiling.advanced.force_enable_new_profiler
67
+ if enable_new_profiler?(settings)
65
68
  print_new_profiler_warnings
66
69
 
67
70
  recorder = Datadog::Profiling::StackRecorder.new(
@@ -71,18 +74,14 @@ module Datadog
71
74
  collector = Datadog::Profiling::Collectors::CpuAndWallTimeWorker.new(
72
75
  recorder: recorder,
73
76
  max_frames: settings.profiling.advanced.max_frames,
74
- tracer: tracer,
75
- gc_profiling_enabled: should_enable_gc_profiling?(settings),
77
+ tracer: optional_tracer,
78
+ endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled,
79
+ gc_profiling_enabled: enable_gc_profiling?(settings),
76
80
  allocation_counting_enabled: settings.profiling.advanced.allocation_counting_enabled,
77
81
  )
78
82
  else
79
- trace_identifiers_helper = Profiling::TraceIdentifiers::Helper.new(
80
- tracer: tracer,
81
- endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
82
- )
83
-
84
83
  recorder = build_profiler_old_recorder(settings)
85
- collector = build_profiler_oldstack_collector(settings, recorder, trace_identifiers_helper)
84
+ collector = build_profiler_oldstack_collector(settings, recorder, optional_tracer)
86
85
  end
87
86
 
88
87
  exporter = build_profiler_exporter(settings, recorder)
@@ -92,20 +91,23 @@ module Datadog
92
91
  Profiling::Profiler.new([collector], scheduler)
93
92
  end
94
93
 
95
- private
96
-
97
- def build_profiler_old_recorder(settings)
94
+ private_class_method def self.build_profiler_old_recorder(settings)
98
95
  Profiling::OldRecorder.new([Profiling::Events::StackSample], settings.profiling.advanced.max_events)
99
96
  end
100
97
 
101
- def build_profiler_exporter(settings, recorder)
98
+ private_class_method def self.build_profiler_exporter(settings, recorder)
102
99
  code_provenance_collector =
103
100
  (Profiling::Collectors::CodeProvenance.new if settings.profiling.advanced.code_provenance_enabled)
104
101
 
105
102
  Profiling::Exporter.new(pprof_recorder: recorder, code_provenance_collector: code_provenance_collector)
106
103
  end
107
104
 
108
- def build_profiler_oldstack_collector(settings, old_recorder, trace_identifiers_helper)
105
+ private_class_method def self.build_profiler_oldstack_collector(settings, old_recorder, tracer)
106
+ trace_identifiers_helper = Profiling::TraceIdentifiers::Helper.new(
107
+ tracer: tracer,
108
+ endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
109
+ )
110
+
109
111
  Profiling::Collectors::OldStack.new(
110
112
  old_recorder,
111
113
  trace_identifiers_helper: trace_identifiers_helper,
@@ -113,7 +115,7 @@ module Datadog
113
115
  )
114
116
  end
115
117
 
116
- def build_profiler_transport(settings, agent_settings)
118
+ private_class_method def self.build_profiler_transport(settings, agent_settings)
117
119
  settings.profiling.exporter.transport ||
118
120
  Profiling::HttpTransport.new(
119
121
  agent_settings: agent_settings,
@@ -123,7 +125,7 @@ module Datadog
123
125
  )
124
126
  end
125
127
 
126
- def should_enable_gc_profiling?(settings)
128
+ private_class_method def self.enable_gc_profiling?(settings)
127
129
  # See comments on the setting definition for more context on why it exists.
128
130
  if settings.profiling.advanced.force_enable_gc_profiling
129
131
  if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3')
@@ -139,21 +141,93 @@ module Datadog
139
141
  end
140
142
  end
141
143
 
142
- def print_new_profiler_warnings
143
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6')
144
+ private_class_method def self.print_new_profiler_warnings
145
+ return if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6')
146
+
147
+ # For more details on the issue, see the "BIG Issue" comment on `gvl_owner` function in
148
+ # `private_vm_api_access.c`.
149
+ Datadog.logger.warn(
150
+ 'The new CPU Profiling 2.0 profiler has been force-enabled on a legacy Ruby version (< 2.6). This is not ' \
151
+ 'recommended in production environments, as due to limitations in Ruby APIs, we suspect it may lead to crashes ' \
152
+ 'in very rare situations. Please report any issues you run into to Datadog support or ' \
153
+ 'via <https://github.com/datadog/dd-trace-rb/issues/new>!'
154
+ )
155
+ end
156
+
157
+ private_class_method def self.enable_new_profiler?(settings)
158
+ if settings.profiling.advanced.force_enable_legacy_profiler
144
159
  Datadog.logger.warn(
145
- 'New Ruby profiler has been force-enabled. This is a beta feature. Please report any issues ' \
146
- 'you run into to Datadog support or via <https://github.com/datadog/dd-trace-rb/issues/new>!'
160
+ 'Legacy profiler has been force-enabled via configuration. Do not use unless instructed to by support.'
147
161
  )
148
- else
149
- # For more details on the issue, see the "BIG Issue" comment on `gvl_owner` function in
150
- # `private_vm_api_access.c`.
162
+ return false
163
+ end
164
+
165
+ return true if settings.profiling.advanced.force_enable_new_profiler
166
+
167
+ return false if RUBY_VERSION.start_with?('2.3.', '2.4.', '2.5.')
168
+
169
+ if Gem.loaded_specs['mysql2'] && incompatible_libmysqlclient_version?(settings)
170
+ Datadog.logger.warn(
171
+ 'Falling back to legacy profiler because an incompatible version of the mysql2 gem is installed. ' \
172
+ 'Older versions of libmysqlclient (the C ' \
173
+ 'library used by the mysql2 gem) have a bug in their signal handling code that the new profiler can trigger. ' \
174
+ 'This bug (https://bugs.mysql.com/bug.php?id=83109) is fixed in libmysqlclient versions 8.0.0 and above. '
175
+ )
176
+ return false
177
+ end
178
+
179
+ if Gem.loaded_specs['rugged']
151
180
  Datadog.logger.warn(
152
- 'New Ruby profiler has been force-enabled on a legacy Ruby version (< 2.6). This is not recommended in ' \
153
- 'production environments, as due to limitations in Ruby APIs, we suspect it may lead to crashes in very ' \
154
- 'rare situations. Please report any issues you run into to Datadog support or ' \
155
- 'via <https://github.com/datadog/dd-trace-rb/issues/new>!'
181
+ 'Falling back to legacy profiler because rugged gem is installed. Some operations on this gem are ' \
182
+ 'currently incompatible with the new CPU Profiling 2.0 profiler, as detailed in ' \
183
+ '<https://github.com/datadog/dd-trace-rb/issues/2721>. If you still want to try out the new profiler, you ' \
184
+ 'can force-enable it by using the `DD_PROFILING_FORCE_ENABLE_NEW` environment variable or the ' \
185
+ '`c.profiling.advanced.force_enable_new_profiler` setting.'
156
186
  )
187
+ return false
188
+ end
189
+
190
+ true
191
+ end
192
+
193
+ # Versions of libmysqlclient prior to 8.0.0 are known to have buggy handling of system call interruptions.
194
+ # The profiler can sometimes cause system call interruptions, and so this combination can cause queries to fail.
195
+ #
196
+ # See https://bugs.mysql.com/bug.php?id=83109 and
197
+ # https://docs.datadoghq.com/profiler/profiler_troubleshooting/ruby/#unexpected-run-time-failures-and-errors-from-ruby-gems-that-use-native-extensions-in-dd-trace-rb-1110
198
+ # for details.
199
+ #
200
+ # The `mysql2` gem's `info` method can be used to determine which `libmysqlclient` version is in use, and thus to
201
+ # detect if it's safe for the profiler to use signals or if we need to employ a fallback.
202
+ private_class_method def self.incompatible_libmysqlclient_version?(settings)
203
+ return true if settings.profiling.advanced.skip_mysql2_check
204
+
205
+ Datadog.logger.debug(
206
+ 'Requiring `mysql2` to check if the `libmysqlclient` version it uses is compatible with profiling'
207
+ )
208
+
209
+ begin
210
+ require 'mysql2'
211
+
212
+ return true unless defined?(Mysql2::Client) && Mysql2::Client.respond_to?(:info)
213
+
214
+ libmysqlclient_version = Gem::Version.new(Mysql2::Client.info[:version])
215
+
216
+ compatible = libmysqlclient_version >= Gem::Version.new('8.0.0')
217
+
218
+ Datadog.logger.debug(
219
+ "The `mysql2` gem is using #{compatible ? 'a compatible' : 'an incompatible'} version of " \
220
+ "the `libmysqlclient` library (#{libmysqlclient_version})"
221
+ )
222
+
223
+ !compatible
224
+ rescue StandardError, LoadError => e
225
+ Datadog.logger.warn(
226
+ 'Failed to probe `mysql2` gem information. ' \
227
+ "Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
228
+ )
229
+
230
+ true
157
231
  end
158
232
  end
159
233
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  # Describes a sample of some data obtained from the runtime.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../event'
2
4
 
3
5
  module Datadog
@@ -1,41 +1,43 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  module Ext
4
- ENV_ENABLED = 'DD_PROFILING_ENABLED'.freeze
5
- ENV_UPLOAD_TIMEOUT = 'DD_PROFILING_UPLOAD_TIMEOUT'.freeze
6
- ENV_MAX_FRAMES = 'DD_PROFILING_MAX_FRAMES'.freeze
7
- ENV_AGENTLESS = 'DD_PROFILING_AGENTLESS'.freeze
8
- ENV_ENDPOINT_COLLECTION_ENABLED = 'DD_PROFILING_ENDPOINT_COLLECTION_ENABLED'.freeze
6
+ ENV_ENABLED = 'DD_PROFILING_ENABLED'
7
+ ENV_UPLOAD_TIMEOUT = 'DD_PROFILING_UPLOAD_TIMEOUT'
8
+ ENV_MAX_FRAMES = 'DD_PROFILING_MAX_FRAMES'
9
+ ENV_AGENTLESS = 'DD_PROFILING_AGENTLESS'
10
+ ENV_ENDPOINT_COLLECTION_ENABLED = 'DD_PROFILING_ENDPOINT_COLLECTION_ENABLED'
9
11
 
10
12
  # TODO: Consider removing this once the Ruby-based pprof encoding is removed and replaced by libdatadog
11
13
  module Pprof
12
- LABEL_KEY_LOCAL_ROOT_SPAN_ID = 'local root span id'.freeze
13
- LABEL_KEY_SPAN_ID = 'span id'.freeze
14
- LABEL_KEY_THREAD_ID = 'thread id'.freeze
15
- LABEL_KEY_TRACE_ENDPOINT = 'trace endpoint'.freeze
14
+ LABEL_KEY_LOCAL_ROOT_SPAN_ID = 'local root span id'
15
+ LABEL_KEY_SPAN_ID = 'span id'
16
+ LABEL_KEY_THREAD_ID = 'thread id'
17
+ LABEL_KEY_TRACE_ENDPOINT = 'trace endpoint'
16
18
  SAMPLE_VALUE_NO_VALUE = 0
17
- VALUE_TYPE_CPU = 'cpu-time'.freeze
18
- VALUE_TYPE_WALL = 'wall-time'.freeze
19
- VALUE_UNIT_NANOSECONDS = 'nanoseconds'.freeze
19
+ VALUE_TYPE_CPU = 'cpu-time'
20
+ VALUE_TYPE_WALL = 'wall-time'
21
+ VALUE_UNIT_NANOSECONDS = 'nanoseconds'
20
22
  end
21
23
 
22
24
  module Transport
23
25
  module HTTP
24
- FORM_FIELD_TAG_ENV = 'env'.freeze
25
- FORM_FIELD_TAG_HOST = 'host'.freeze
26
- FORM_FIELD_TAG_LANGUAGE = 'language'.freeze
27
- FORM_FIELD_TAG_PID = 'process_id'.freeze
28
- FORM_FIELD_TAG_PROFILER_VERSION = 'profiler_version'.freeze
29
- FORM_FIELD_TAG_RUNTIME = 'runtime'.freeze
30
- FORM_FIELD_TAG_RUNTIME_ENGINE = 'runtime_engine'.freeze
31
- FORM_FIELD_TAG_RUNTIME_ID = 'runtime-id'.freeze
32
- FORM_FIELD_TAG_RUNTIME_PLATFORM = 'runtime_platform'.freeze
33
- FORM_FIELD_TAG_RUNTIME_VERSION = 'runtime_version'.freeze
34
- FORM_FIELD_TAG_SERVICE = 'service'.freeze
35
- FORM_FIELD_TAG_VERSION = 'version'.freeze
26
+ FORM_FIELD_TAG_ENV = 'env'
27
+ FORM_FIELD_TAG_HOST = 'host'
28
+ FORM_FIELD_TAG_LANGUAGE = 'language'
29
+ FORM_FIELD_TAG_PID = 'process_id'
30
+ FORM_FIELD_TAG_PROFILER_VERSION = 'profiler_version'
31
+ FORM_FIELD_TAG_RUNTIME = 'runtime'
32
+ FORM_FIELD_TAG_RUNTIME_ENGINE = 'runtime_engine'
33
+ FORM_FIELD_TAG_RUNTIME_ID = 'runtime-id'
34
+ FORM_FIELD_TAG_RUNTIME_PLATFORM = 'runtime_platform'
35
+ FORM_FIELD_TAG_RUNTIME_VERSION = 'runtime_version'
36
+ FORM_FIELD_TAG_SERVICE = 'service'
37
+ FORM_FIELD_TAG_VERSION = 'version'
36
38
 
37
- PPROF_DEFAULT_FILENAME = 'rubyprofile.pprof'.freeze
38
- CODE_PROVENANCE_FILENAME = 'code-provenance.json'.freeze
39
+ PPROF_DEFAULT_FILENAME = 'rubyprofile.pprof'
40
+ CODE_PROVENANCE_FILENAME = 'code-provenance.json'
39
41
  end
40
42
  end
41
43
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  # Represents a collection of events of a specific type being flushed.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  # This module contains classes and methods which are implemented using native code in the
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../core/utils/object_set'
2
4
 
3
5
  module Datadog
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Datadog
2
4
  module Profiling
3
5
  module Pprof
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../core/utils/string_table'
2
4
 
3
5
  module Datadog
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../ddtrace'
2
4
 
3
5
  Datadog::Profiling.start_if_enabled
@@ -118,7 +118,9 @@ module Datadog
118
118
  begin
119
119
  transport.export(flush)
120
120
  rescue StandardError => e
121
- Datadog.logger.error("Unable to report profile. Cause: #{e} Location: #{Array(e.backtrace).first}")
121
+ Datadog.logger.error(
122
+ "Unable to report profile. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
123
+ )
122
124
  end
123
125
 
124
126
  true
@@ -48,24 +48,6 @@ module Datadog
48
48
  end
49
49
  end
50
50
 
51
- def clear
52
- status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_clear(self) }
53
-
54
- if status == :ok
55
- finish_timestamp = result
56
-
57
- Datadog.logger.debug { "Cleared profile at #{finish_timestamp}" }
58
-
59
- finish_timestamp
60
- else
61
- error_message = result
62
-
63
- Datadog.logger.error("Failed to clear profiling data: #{error_message}")
64
-
65
- nil
66
- end
67
- end
68
-
69
51
  def reset_after_fork
70
52
  self.class._native_reset_after_fork(self)
71
53
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../core/utils'
2
4
 
3
5
  module Datadog