datadog 2.18.0 → 2.20.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 (297) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +73 -1
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +51 -10
  4. data/ext/datadog_profiling_native_extension/collectors_stack.c +58 -49
  5. data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -1
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +5 -6
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -1
  8. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +37 -26
  9. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +0 -1
  10. data/ext/datadog_profiling_native_extension/ruby_helpers.h +1 -1
  11. data/ext/libdatadog_api/extconf.rb +3 -1
  12. data/ext/libdatadog_extconf_helpers.rb +13 -3
  13. data/lib/datadog/appsec/api_security/route_extractor.rb +7 -1
  14. data/lib/datadog/appsec/component.rb +3 -13
  15. data/lib/datadog/appsec/context.rb +23 -0
  16. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
  17. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
  18. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
  19. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
  20. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
  21. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
  22. data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
  23. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
  24. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
  25. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
  26. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
  27. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
  28. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
  29. data/lib/datadog/appsec/event.rb +3 -18
  30. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +17 -1
  31. data/lib/datadog/appsec/metrics/collector.rb +7 -3
  32. data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
  33. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
  34. data/lib/datadog/appsec/metrics.rb +1 -0
  35. data/lib/datadog/appsec/security_engine/engine.rb +14 -32
  36. data/lib/datadog/appsec/security_engine/result.rb +16 -0
  37. data/lib/datadog/appsec/security_engine/runner.rb +18 -4
  38. data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
  39. data/lib/datadog/appsec/trace_keeper.rb +24 -0
  40. data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
  41. data/lib/datadog/appsec.rb +0 -7
  42. data/lib/datadog/auto_instrument_base.rb +2 -1
  43. data/lib/datadog/core/configuration/option.rb +29 -20
  44. data/lib/datadog/core/configuration/option_definition.rb +2 -2
  45. data/lib/datadog/core/configuration/options.rb +13 -7
  46. data/lib/datadog/core/configuration/settings.rb +20 -0
  47. data/lib/datadog/core/telemetry/component.rb +8 -4
  48. data/lib/datadog/core/telemetry/event/app_started.rb +21 -3
  49. data/lib/datadog/di/boot.rb +7 -0
  50. data/lib/datadog/di/component.rb +7 -0
  51. data/lib/datadog/di/instrumenter.rb +11 -18
  52. data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
  53. data/lib/datadog/di/probe_file_loader.rb +82 -0
  54. data/lib/datadog/di/probe_notification_builder.rb +21 -16
  55. data/lib/datadog/di/remote.rb +3 -5
  56. data/lib/datadog/di/serializer.rb +6 -2
  57. data/lib/datadog/di.rb +0 -7
  58. data/lib/datadog/kit/appsec/events/v2.rb +196 -0
  59. data/lib/datadog/kit/appsec/events.rb +11 -10
  60. data/lib/datadog/kit/identity.rb +17 -11
  61. data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
  62. data/lib/datadog/opentelemetry/api/context.rb +10 -9
  63. data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
  64. data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
  65. data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
  66. data/lib/datadog/opentelemetry/trace.rb +4 -4
  67. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +2 -0
  68. data/lib/datadog/profiling/collectors/info.rb +41 -0
  69. data/lib/datadog/profiling/component.rb +1 -0
  70. data/lib/datadog/profiling/exporter.rb +9 -3
  71. data/lib/datadog/profiling/sequence_tracker.rb +44 -0
  72. data/lib/datadog/profiling/tag_builder.rb +2 -0
  73. data/lib/datadog/profiling.rb +7 -8
  74. data/lib/datadog/single_step_instrument.rb +9 -0
  75. data/lib/datadog/tracing/analytics.rb +1 -1
  76. data/lib/datadog/tracing/buffer.rb +7 -7
  77. data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
  78. data/lib/datadog/tracing/configuration/ext.rb +3 -2
  79. data/lib/datadog/tracing/configuration/settings.rb +17 -0
  80. data/lib/datadog/tracing/context.rb +2 -2
  81. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  82. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
  83. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
  84. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  85. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
  86. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  87. data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
  88. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  89. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  90. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  91. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  92. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  93. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  94. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
  95. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  96. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
  97. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
  98. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  99. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  100. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
  101. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
  102. data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
  103. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +13 -7
  104. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
  105. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
  106. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
  107. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
  108. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  109. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
  110. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
  111. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
  112. data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
  113. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
  114. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
  115. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
  116. data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
  117. data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
  118. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
  119. data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
  120. data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
  121. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  122. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  123. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  124. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
  125. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  126. data/lib/datadog/tracing/contrib/configurable.rb +6 -6
  127. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
  128. data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
  129. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
  130. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
  131. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  132. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
  133. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
  134. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
  135. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
  136. data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
  137. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
  138. data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
  139. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
  140. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
  141. data/lib/datadog/tracing/contrib/ext.rb +3 -3
  142. data/lib/datadog/tracing/contrib/extensions.rb +9 -9
  143. data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
  144. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
  145. data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
  146. data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
  147. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
  148. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
  149. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
  150. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
  151. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
  152. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
  153. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  154. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
  155. data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
  156. data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
  157. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  158. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
  159. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
  160. data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
  161. data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
  162. data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
  163. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
  164. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
  165. data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
  166. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
  167. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
  168. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
  169. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
  170. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
  171. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
  172. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
  173. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
  174. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
  175. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
  176. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
  177. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
  178. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
  179. data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
  180. data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
  181. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
  182. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
  183. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
  184. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
  185. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
  186. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  187. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
  188. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
  189. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
  190. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
  191. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
  192. data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
  193. data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
  194. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
  195. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  196. data/lib/datadog/tracing/contrib/patcher.rb +7 -9
  197. data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
  198. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
  199. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  200. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
  201. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
  202. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  203. data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
  204. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
  205. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  206. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
  207. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  208. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
  209. data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
  210. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
  211. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
  212. data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
  213. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  214. data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
  215. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  216. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  217. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  218. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  219. data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
  220. data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
  221. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  222. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
  223. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  224. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  225. data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
  226. data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
  227. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  228. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  229. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
  230. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  231. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
  232. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
  233. data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
  234. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
  235. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
  236. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
  237. data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
  238. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
  239. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
  240. data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
  241. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  242. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
  243. data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
  244. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
  245. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
  246. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  247. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
  248. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
  249. data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
  250. data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
  251. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  252. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
  253. data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
  254. data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
  255. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
  256. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
  257. data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
  258. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  259. data/lib/datadog/tracing/distributed/baggage.rb +73 -8
  260. data/lib/datadog/tracing/distributed/datadog.rb +4 -5
  261. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
  262. data/lib/datadog/tracing/distributed/helpers.rb +1 -1
  263. data/lib/datadog/tracing/distributed/none.rb +4 -2
  264. data/lib/datadog/tracing/distributed/propagation.rb +4 -1
  265. data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
  266. data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
  267. data/lib/datadog/tracing/event.rb +5 -7
  268. data/lib/datadog/tracing/flush.rb +1 -1
  269. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  270. data/lib/datadog/tracing/metadata/tagging.rb +4 -4
  271. data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
  272. data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
  273. data/lib/datadog/tracing/pipeline.rb +1 -1
  274. data/lib/datadog/tracing/sampling/ext.rb +0 -2
  275. data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
  276. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  277. data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
  278. data/lib/datadog/tracing/span.rb +1 -1
  279. data/lib/datadog/tracing/span_event.rb +10 -10
  280. data/lib/datadog/tracing/span_link.rb +12 -12
  281. data/lib/datadog/tracing/span_operation.rb +31 -11
  282. data/lib/datadog/tracing/trace_digest.rb +21 -23
  283. data/lib/datadog/tracing/trace_operation.rb +84 -88
  284. data/lib/datadog/tracing/trace_segment.rb +2 -2
  285. data/lib/datadog/tracing/tracer.rb +36 -38
  286. data/lib/datadog/tracing/transport/http/client.rb +1 -1
  287. data/lib/datadog/tracing/transport/http/traces.rb +2 -2
  288. data/lib/datadog/tracing/transport/io/client.rb +5 -5
  289. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  290. data/lib/datadog/tracing/transport/statistics.rb +1 -1
  291. data/lib/datadog/tracing/transport/traces.rb +5 -5
  292. data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
  293. data/lib/datadog/tracing/workers.rb +2 -2
  294. data/lib/datadog/tracing.rb +2 -2
  295. data/lib/datadog/version.rb +1 -1
  296. data/lib/datadog.rb +7 -0
  297. metadata +17 -6
@@ -47,15 +47,15 @@ module Datadog
47
47
  @span_id = digest.span_id
48
48
  @trace_id = digest.trace_id
49
49
  @trace_flags = if digest.trace_sampling_priority.nil?
50
- nil
51
- elsif digest.trace_sampling_priority > 0
52
- 1
53
- else
54
- 0
55
- end
56
- @trace_state = digest.trace_state && digest.trace_state.dup
50
+ nil
51
+ elsif digest.trace_sampling_priority > 0
52
+ 1
53
+ else
54
+ 0
55
+ end
56
+ @trace_state = digest.trace_state&.dup
57
57
  @dropped_attributes = 0
58
- @attributes = (attributes && attributes.dup) || {}
58
+ @attributes = attributes&.dup || {}
59
59
  end
60
60
 
61
61
  def to_hash
@@ -81,10 +81,10 @@ module Datadog
81
81
  # If traceflags set, the high bit (bit 31) should be set to 1 (uint32).
82
82
  # This helps us distinguish between when the sample decision is zero or not set
83
83
  h[:flags] = if @trace_flags.nil?
84
- 0
85
- else
86
- @trace_flags | (1 << 31)
87
- end
84
+ 0
85
+ else
86
+ @trace_flags | (1 << 31)
87
+ end
88
88
  h
89
89
  end
90
90
  end
@@ -157,7 +157,7 @@ module Datadog
157
157
  # running, to minimize impact on normal application function.
158
158
  begin
159
159
  start
160
- rescue StandardError => e
160
+ rescue => e
161
161
  logger.debug { "Failed to start span: #{e}" }
162
162
  ensure
163
163
  # We should yield to the provided block when possible, as this
@@ -297,6 +297,28 @@ module Datadog
297
297
  set_error_tags(e)
298
298
  end
299
299
 
300
+ # Record an exception during the execution of this span. Multiple exceptions
301
+ # can be recorded on a span.
302
+ #
303
+ # @param [Exception] exception The exception to record
304
+ # @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
305
+ # attributes One or more key:value pairs, where the keys must be
306
+ # strings and the values may be (array of) string, boolean or numeric
307
+ # type.
308
+ #
309
+ # @return [void]
310
+ def record_exception(exception, attributes: {})
311
+ exc = Core::Error.build_from(exception)
312
+
313
+ event_attributes = {
314
+ 'exception.type' => exc.type,
315
+ 'exception.message' => exc.message,
316
+ 'exception.stacktrace' => exc.backtrace,
317
+ }
318
+
319
+ @span_events << SpanEvent.new('exception', attributes: event_attributes.merge!(attributes)) # steep:ignore
320
+ end
321
+
300
322
  # Return a string representation of the span.
301
323
  def to_s
302
324
  "SpanOperation(name:#{@name},sid:#{@id},tid:#{@trace_id},pid:#{@parent_id})"
@@ -365,7 +387,7 @@ module Datadog
365
387
  class Events
366
388
  include Tracing::Events
367
389
 
368
- DEFAULT_ON_ERROR = proc { |span_op, error| span_op.set_error(error) unless span_op.nil? }
390
+ DEFAULT_ON_ERROR = proc { |span_op, error| span_op&.set_error(error) }
369
391
 
370
392
  attr_reader \
371
393
  :logger,
@@ -426,23 +448,21 @@ module Datadog
426
448
  original = @handler
427
449
 
428
450
  @handler = proc do |op, error|
429
- begin
430
- yield(op, error)
431
- rescue StandardError => e
432
- logger.debug do
433
- "Custom on_error handler #{@handler} failed, using fallback behavior. \
451
+ yield(op, error)
452
+ rescue => e
453
+ logger.debug do
454
+ "Custom on_error handler #{@handler} failed, using fallback behavior. \
434
455
  Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
435
- end
436
-
437
- original.call(op, error) if original
438
456
  end
457
+
458
+ original&.call(op, error)
439
459
  end
440
460
  end
441
461
 
442
462
  def publish(*args)
443
463
  begin
444
464
  @handler.call(*args)
445
- rescue StandardError => e
465
+ rescue => e
446
466
  logger.debug do
447
467
  "Error in on_error handler '#{@default}': #{e.class}: #{e} at #{Array(e.backtrace).first}"
448
468
  end
@@ -162,29 +162,27 @@ module Datadog
162
162
  # DEV: Because we want to sometimes freeze the values provided to `TraceDigest`, it's best
163
163
  # DEV: to let `#initialize` decide how to handle each field, instead of duplicating that logic here.
164
164
  TraceDigest.new(
165
- **{
166
- span_id: span_id,
167
- span_name: span_name,
168
- span_resource: span_resource,
169
- span_service: span_service,
170
- span_type: span_type,
171
- trace_distributed_tags: trace_distributed_tags,
172
- trace_hostname: trace_hostname,
173
- trace_id: trace_id,
174
- trace_name: trace_name,
175
- trace_origin: trace_origin,
176
- trace_process_id: trace_process_id,
177
- trace_resource: trace_resource,
178
- trace_runtime_id: trace_runtime_id,
179
- trace_sampling_priority: trace_sampling_priority,
180
- trace_service: trace_service,
181
- trace_distributed_id: trace_distributed_id,
182
- trace_flags: trace_flags,
183
- trace_state: trace_state,
184
- trace_state_unknown_fields: trace_state_unknown_fields,
185
- span_remote: span_remote,
186
- baggage: baggage
187
- }.merge!(field_value_pairs)
165
+ span_id: span_id,
166
+ span_name: span_name,
167
+ span_resource: span_resource,
168
+ span_service: span_service,
169
+ span_type: span_type,
170
+ trace_distributed_tags: trace_distributed_tags,
171
+ trace_hostname: trace_hostname,
172
+ trace_id: trace_id,
173
+ trace_name: trace_name,
174
+ trace_origin: trace_origin,
175
+ trace_process_id: trace_process_id,
176
+ trace_resource: trace_resource,
177
+ trace_runtime_id: trace_runtime_id,
178
+ trace_sampling_priority: trace_sampling_priority,
179
+ trace_service: trace_service,
180
+ trace_distributed_id: trace_distributed_id,
181
+ trace_flags: trace_flags,
182
+ trace_state: trace_state,
183
+ trace_state_unknown_fields: trace_state_unknown_fields,
184
+ span_remote: span_remote,
185
+ baggage: baggage, **field_value_pairs
188
186
  )
189
187
  end
190
188
  end
@@ -163,20 +163,20 @@ module Datadog
163
163
  end
164
164
 
165
165
  def name
166
- @name || (root_span && root_span.name)
166
+ @name || root_span&.name
167
167
  end
168
168
 
169
169
  def resource
170
- @resource || (root_span && root_span.resource)
170
+ @resource || root_span&.resource
171
171
  end
172
172
 
173
173
  # When retrieving tags or metrics we need to include root span tags for sampling purposes
174
174
  def get_tag(key)
175
- super || (root_span && root_span.get_tag(key))
175
+ super || root_span&.get_tag(key)
176
176
  end
177
177
 
178
178
  def get_metric(key)
179
- super || (root_span && root_span.get_metric(key))
179
+ super || root_span&.get_metric(key)
180
180
  end
181
181
 
182
182
  def set_distributed_source(product_bit)
@@ -201,7 +201,7 @@ module Datadog
201
201
  end
202
202
 
203
203
  def service
204
- @service || (root_span && root_span.service)
204
+ @service || root_span&.service
205
205
  end
206
206
 
207
207
  def measure(
@@ -220,9 +220,11 @@ module Datadog
220
220
  # Don't allow more span measurements if the
221
221
  # trace is already completed. Prevents multiple
222
222
  # root spans with parent_span_id = 0.
223
- return yield( # rubocop:disable Style/MultilineIfModifier
224
- SpanOperation.new(op_name, logger: logger),
225
- TraceOperation.new(logger: logger)) if finished? || full?
223
+ if finished? || full?
224
+ return yield(
225
+ SpanOperation.new(op_name, logger: logger),
226
+ TraceOperation.new(logger: logger))
227
+ end
226
228
 
227
229
  # Create new span
228
230
  span_op = build_span(
@@ -253,51 +255,49 @@ module Datadog
253
255
  type: nil,
254
256
  id: nil
255
257
  )
256
- begin
257
- # Resolve span options:
258
- # Parent, service name, etc.
259
- # Add default options
260
- trace_id = @id
261
- parent = @active_span
262
-
263
- # Use active span's span ID if available. Otherwise, the parent span ID.
264
- # Necessary when this trace continues from another, e.g. distributed trace.
265
- parent_id = parent ? parent.id : @parent_span_id || 0
266
-
267
- # Build events
268
- events ||= SpanOperation::Events.new(logger: logger)
269
-
270
- # Before start: activate the span, publish events.
271
- events.before_start.subscribe do |span_op|
272
- start_span(span_op)
273
- end
258
+ # Resolve span options:
259
+ # Parent, service name, etc.
260
+ # Add default options
261
+ trace_id = @id
262
+ parent = @active_span
274
263
 
275
- # After finish: deactivate the span, record, publish events.
276
- events.after_finish.subscribe do |span, span_op|
277
- finish_span(span, span_op, parent)
278
- end
264
+ # Use active span's span ID if available. Otherwise, the parent span ID.
265
+ # Necessary when this trace continues from another, e.g. distributed trace.
266
+ parent_id = parent ? parent.id : @parent_span_id || 0
267
+
268
+ # Build events
269
+ events ||= SpanOperation::Events.new(logger: logger)
279
270
 
280
- # Build a new span operation
281
- SpanOperation.new(
282
- op_name,
283
- logger: logger,
284
- events: events,
285
- on_error: on_error,
286
- parent_id: parent_id,
287
- resource: resource || op_name,
288
- service: service,
289
- start_time: start_time,
290
- tags: tags,
291
- trace_id: trace_id,
292
- type: type,
293
- id: id
294
- )
295
- rescue StandardError => e
296
- logger.debug { "Failed to build new span: #{e}" }
297
-
298
- # Return dummy span
299
- SpanOperation.new(op_name, logger: logger)
271
+ # Before start: activate the span, publish events.
272
+ events.before_start.subscribe do |span_op|
273
+ start_span(span_op)
300
274
  end
275
+
276
+ # After finish: deactivate the span, record, publish events.
277
+ events.after_finish.subscribe do |span, span_op|
278
+ finish_span(span, span_op, parent)
279
+ end
280
+
281
+ # Build a new span operation
282
+ SpanOperation.new(
283
+ op_name,
284
+ logger: logger,
285
+ events: events,
286
+ on_error: on_error,
287
+ parent_id: parent_id,
288
+ resource: resource || op_name,
289
+ service: service,
290
+ start_time: start_time,
291
+ tags: tags,
292
+ trace_id: trace_id,
293
+ type: type,
294
+ id: id
295
+ )
296
+ rescue => e
297
+ logger.debug { "Failed to build new span: #{e}" }
298
+
299
+ # Return dummy span
300
+ SpanOperation.new(op_name, logger: logger)
301
301
  end
302
302
 
303
303
  # Returns a {TraceSegment} with all finished spans that can be flushed
@@ -325,7 +325,7 @@ module Datadog
325
325
  # We should move the sample call to inject and right before moving to new contexts(threads, forking etc.)
326
326
  def to_digest
327
327
  # Resolve current span ID
328
- span_id = @active_span && @active_span.id
328
+ span_id = @active_span&.id
329
329
  span_id ||= @parent_span_id unless finished?
330
330
  # sample the trace_operation with the tracer
331
331
  events.trace_propagated.publish(self)
@@ -349,13 +349,13 @@ module Datadog
349
349
  trace_state: @trace_state,
350
350
  trace_state_unknown_fields: @trace_state_unknown_fields,
351
351
  span_remote: @remote_parent && @active_span.nil?,
352
- baggage: @baggage.nil? || @baggage.empty? ? nil : @baggage
352
+ baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage
353
353
  ).freeze
354
354
  end
355
355
 
356
356
  def to_correlation
357
357
  # Resolve current span ID
358
- span_id = @active_span && @active_span.id
358
+ span_id = @active_span&.id
359
359
  span_id ||= @parent_span_id unless finished?
360
360
 
361
361
  Correlation::Identifier.new(
@@ -369,22 +369,22 @@ module Datadog
369
369
  def fork_clone
370
370
  self.class.new(
371
371
  agent_sample_rate: @agent_sample_rate,
372
- events: @events && @events.dup,
373
- hostname: @hostname && @hostname.dup,
372
+ events: @events&.dup,
373
+ hostname: @hostname&.dup,
374
374
  id: @id,
375
375
  max_length: @max_length,
376
- name: name && name.dup,
377
- origin: @origin && @origin.dup,
378
- parent_span_id: (@active_span && @active_span.id) || @parent_span_id,
376
+ name: name&.dup,
377
+ origin: @origin&.dup,
378
+ parent_span_id: @active_span&.id || @parent_span_id,
379
379
  rate_limiter_rate: @rate_limiter_rate,
380
- resource: resource && resource.dup,
380
+ resource: resource&.dup,
381
381
  rule_sample_rate: @rule_sample_rate,
382
382
  sample_rate: @sample_rate,
383
383
  sampled: @sampled,
384
384
  sampling_priority: @sampling_priority,
385
- service: service && service.dup,
386
- trace_state: @trace_state && @trace_state.dup,
387
- trace_state_unknown_fields: @trace_state_unknown_fields && @trace_state_unknown_fields.dup,
385
+ service: service&.dup,
386
+ trace_state: @trace_state&.dup,
387
+ trace_state_unknown_fields: @trace_state_unknown_fields&.dup,
388
388
  tags: meta.dup,
389
389
  metrics: metrics.dup,
390
390
  remote_parent: @remote_parent
@@ -472,41 +472,37 @@ module Datadog
472
472
  end
473
473
 
474
474
  def start_span(span_op)
475
- begin
476
- activate_span!(span_op)
475
+ activate_span!(span_op)
477
476
 
478
- # Update active span count
479
- @active_span_count += 1
477
+ # Update active span count
478
+ @active_span_count += 1
480
479
 
481
- # Publish :span_before_start event
482
- events.span_before_start.publish(span_op, self)
483
- rescue StandardError => e
484
- logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
485
- end
480
+ # Publish :span_before_start event
481
+ events.span_before_start.publish(span_op, self)
482
+ rescue => e
483
+ logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
486
484
  end
487
485
 
488
486
  def finish_span(span, span_op, parent)
489
- begin
490
- # Save finished span & root span
491
- @spans << span unless span.nil?
487
+ # Save finished span & root span
488
+ @spans << span unless span.nil?
492
489
 
493
- # Deactivate the span, re-activate parent.
494
- deactivate_span!(span_op)
490
+ # Deactivate the span, re-activate parent.
491
+ deactivate_span!(span_op)
495
492
 
496
- # Set finished, to signal root span has completed.
497
- @finished = true if span_op == root_span
493
+ # Set finished, to signal root span has completed.
494
+ @finished = true if span_op == root_span
498
495
 
499
- # Update active span count
500
- @active_span_count -= 1
496
+ # Update active span count
497
+ @active_span_count -= 1
501
498
 
502
- # Publish :span_finished event
503
- events.span_finished.publish(span, self)
499
+ # Publish :span_finished event
500
+ events.span_finished.publish(span, self)
504
501
 
505
- # Publish :trace_finished event
506
- events.trace_finished.publish(self) if finished?
507
- rescue StandardError => e
508
- logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
509
- end
502
+ # Publish :trace_finished event
503
+ events.trace_finished.publish(self) if finished?
504
+ rescue => e
505
+ logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
510
506
  end
511
507
 
512
508
  # Track the root span
@@ -535,7 +531,7 @@ module Datadog
535
531
  service: service,
536
532
  tags: meta,
537
533
  metrics: metrics,
538
- root_span_id: !partial ? root_span && root_span.id : nil,
534
+ root_span_id: (!partial) ? root_span&.id : nil,
539
535
  profiling_enabled: @profiling_enabled,
540
536
  apm_tracing_enabled: @apm_tracing_enabled
541
537
  )
@@ -68,8 +68,8 @@ module Datadog
68
68
 
69
69
  # Does not make an effort to move metrics out of tags
70
70
  # The caller is expected to have done that
71
- @meta = (tags && tags.dup) || {}
72
- @metrics = (metrics && metrics.dup) || {}
71
+ @meta = tags&.dup || {}
72
+ @metrics = metrics&.dup || {}
73
73
 
74
74
  # Set well-known tags, defaulting to getting the values from tags
75
75
  @agent_sample_rate = agent_sample_rate || agent_sample_rate_tag
@@ -149,11 +149,11 @@ module Datadog
149
149
  context = call_context
150
150
  active_trace = context.active_trace
151
151
  trace = if continue_from || active_trace.nil?
152
- start_trace(continue_from: continue_from)
153
- else
154
- active_trace
155
- end
156
- rescue StandardError => e
152
+ start_trace(continue_from: continue_from)
153
+ else
154
+ active_trace
155
+ end
156
+ rescue => e
157
157
  logger.debug { "Failed to trace: #{e}" }
158
158
 
159
159
  # Tracing failed: fallback and run code without tracing.
@@ -194,7 +194,6 @@ module Datadog
194
194
  )
195
195
  end
196
196
  end
197
- # rubocop:enable Metrics/MethodLength
198
197
 
199
198
  # Set the given key / value tag pair at the tracer level. These tags will be
200
199
  # appended to each span created by the tracer. Keys and values must be strings.
@@ -225,7 +224,7 @@ module Datadog
225
224
  # @return [nil] if no trace is active, and thus no span is active
226
225
  def active_span(key = nil)
227
226
  trace = active_trace(key)
228
- trace.active_span if trace
227
+ trace&.active_span
229
228
  end
230
229
 
231
230
  # Information about the currently active trace.
@@ -272,12 +271,10 @@ module Datadog
272
271
 
273
272
  # Sample a span, tagging the trace as appropriate.
274
273
  def sample_trace(trace_op)
275
- begin
276
- @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
277
- rescue StandardError => e
278
- SAMPLE_TRACE_LOG_ONLY_ONCE.run do
279
- logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
280
- end
274
+ @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
275
+ rescue => e
276
+ SAMPLE_TRACE_LOG_ONLY_ONCE.run do
277
+ logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
281
278
  end
282
279
  end
283
280
 
@@ -297,7 +294,7 @@ module Datadog
297
294
  # description of and constraints on arguments.
298
295
  # rubocop:disable Lint/UselessMethodDefinition
299
296
  def publish(trace)
300
- super(trace)
297
+ super
301
298
  end
302
299
  # rubocop:enable Lint/UselessMethodDefinition
303
300
  end
@@ -315,7 +312,7 @@ module Datadog
315
312
  def shutdown!
316
313
  return unless @enabled
317
314
 
318
- @writer.stop if @writer
315
+ @writer&.stop
319
316
  end
320
317
 
321
318
  private
@@ -335,12 +332,12 @@ module Datadog
335
332
  def build_trace(digest = nil)
336
333
  # Resolve hostname if configured
337
334
  hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
338
- hostname = hostname && !hostname.empty? ? hostname : nil
335
+ hostname = (hostname && !hostname.empty?) ? hostname : nil
339
336
 
340
337
  if digest
341
338
  sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
342
- digest.trace_sampling_priority
343
- end
339
+ digest.trace_sampling_priority
340
+ end
344
341
  TraceOperation.new(
345
342
  logger: logger,
346
343
  hostname: hostname,
@@ -369,7 +366,9 @@ module Datadog
369
366
  )
370
367
  end
371
368
  end
369
+ # rubocop:enable Metrics/MethodLength
372
370
 
371
+ # rubocop:disable Metrics/MethodLength
373
372
  def bind_trace_events!(trace_op)
374
373
  events = trace_op.send(:events)
375
374
 
@@ -388,6 +387,7 @@ module Datadog
388
387
  flush_trace(event_trace_op)
389
388
  end
390
389
  end
390
+ # rubocop:enable Metrics/MethodLength
391
391
 
392
392
  # Creates a new TraceOperation, with events bounds to this Tracer instance.
393
393
  # @return [TraceOperation]
@@ -402,6 +402,7 @@ module Datadog
402
402
  end
403
403
 
404
404
  # rubocop:disable Lint/UnderscorePrefixedVariableName
405
+ # rubocop:disable Metrics/MethodLength
405
406
  def start_span(
406
407
  name,
407
408
  continue_from: nil,
@@ -454,16 +455,17 @@ module Datadog
454
455
  end
455
456
  end
456
457
  # rubocop:enable Lint/UnderscorePrefixedVariableName
458
+ # rubocop:enable Metrics/MethodLength
457
459
 
458
460
  def resolve_tags(tags, service)
459
461
  merged_tags = if @tags.any? && tags
460
- # Combine default tags with provided tags,
461
- # preferring provided tags.
462
- @tags.merge(tags)
463
- else
464
- # Use provided tags or default tags if none.
465
- tags || @tags.dup
466
- end
462
+ # Combine default tags with provided tags,
463
+ # preferring provided tags.
464
+ @tags.merge(tags)
465
+ else
466
+ # Use provided tags or default tags if none.
467
+ tags || @tags.dup
468
+ end
467
469
  # Remove version tag if service is not the default service
468
470
  if merged_tags.key?(Core::Environment::Ext::TAG_VERSION) && service && service != @default_service
469
471
  merged_tags.delete(Core::Environment::Ext::TAG_VERSION)
@@ -507,12 +509,10 @@ module Datadog
507
509
  private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
508
510
 
509
511
  def sample_span(trace_op, span)
510
- begin
511
- @span_sampler.sample!(trace_op, span)
512
- rescue StandardError => e
513
- SAMPLE_SPAN_LOG_ONLY_ONCE.run do
514
- logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
515
- end
512
+ @span_sampler.sample!(trace_op, span)
513
+ rescue => e
514
+ SAMPLE_SPAN_LOG_ONLY_ONCE.run do
515
+ logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
516
516
  end
517
517
  end
518
518
 
@@ -521,13 +521,11 @@ module Datadog
521
521
 
522
522
  # Flush finished spans from the trace buffer, send them to writer.
523
523
  def flush_trace(trace_op)
524
- begin
525
- trace = @trace_flush.consume!(trace_op)
526
- write(trace) if trace && !trace.empty?
527
- rescue StandardError => e
528
- FLUSH_TRACE_LOG_ONLY_ONCE.run do
529
- logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
530
- end
524
+ trace = @trace_flush.consume!(trace_op)
525
+ write(trace) if trace && !trace.empty?
526
+ rescue => e
527
+ FLUSH_TRACE_LOG_ONLY_ONCE.run do
528
+ logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
531
529
  end
532
530
  end
533
531
 
@@ -30,7 +30,7 @@ module Datadog
30
30
  update_stats_from_response!(response)
31
31
 
32
32
  response
33
- rescue StandardError => e
33
+ rescue => e
34
34
  message =
35
35
  "Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
36
36
  "Location: #{Array(e.backtrace).first}"
@@ -95,10 +95,10 @@ module Datadog
95
95
  env.body = env.request.parcel.data
96
96
 
97
97
  # Query for response
98
- http_response = super(env, &block)
98
+ http_response = super
99
99
 
100
100
  # Process the response
101
- response_options = { trace_count: env.request.parcel.trace_count }.tap do |options|
101
+ response_options = {trace_count: env.request.parcel.trace_count}.tap do |options|
102
102
  # Parse service rates, if configured to do so.
103
103
  if service_rates? && !http_response.payload.to_s.empty?
104
104
  body = JSON.parse(http_response.payload)
@@ -30,17 +30,17 @@ module Datadog
30
30
  # If block is given, allow it to handle writing
31
31
  # Otherwise do a standard encode/write/response.
32
32
  response = if block_given?
33
- yield(out, request)
34
- else
35
- @request_block.call(out, request)
36
- end
33
+ yield(out, request)
34
+ else
35
+ @request_block.call(out, request)
36
+ end
37
37
 
38
38
  # Update statistics
39
39
  update_stats_from_response!(response)
40
40
 
41
41
  # Return response
42
42
  response
43
- rescue StandardError => e
43
+ rescue => e
44
44
  message =
45
45
  "Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
46
46
  "Location: #{Array(e.backtrace).first}"