datadog 2.0.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 (764) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +4236 -0
  3. data/LICENSE +6 -0
  4. data/LICENSE-3rdparty.csv +7 -0
  5. data/LICENSE.Apache +200 -0
  6. data/LICENSE.BSD3 +24 -0
  7. data/NOTICE +4 -0
  8. data/README.md +25 -0
  9. data/bin/ddprofrb +15 -0
  10. data/ext/datadog_profiling_loader/datadog_profiling_loader.c +134 -0
  11. data/ext/datadog_profiling_loader/extconf.rb +72 -0
  12. data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +156 -0
  13. data/ext/datadog_profiling_native_extension/clock_id.h +22 -0
  14. data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +56 -0
  15. data/ext/datadog_profiling_native_extension/clock_id_noop.c +22 -0
  16. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +1153 -0
  17. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
  18. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
  19. data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
  20. data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
  21. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
  22. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
  23. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
  24. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  25. data/ext/datadog_profiling_native_extension/collectors_stack.c +372 -0
  26. data/ext/datadog_profiling_native_extension/collectors_stack.h +27 -0
  27. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +1391 -0
  28. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +15 -0
  29. data/ext/datadog_profiling_native_extension/extconf.rb +302 -0
  30. data/ext/datadog_profiling_native_extension/heap_recorder.c +970 -0
  31. data/ext/datadog_profiling_native_extension/heap_recorder.h +155 -0
  32. data/ext/datadog_profiling_native_extension/helpers.h +23 -0
  33. data/ext/datadog_profiling_native_extension/http_transport.c +375 -0
  34. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
  35. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
  36. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +319 -0
  37. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +892 -0
  38. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +61 -0
  39. data/ext/datadog_profiling_native_extension/profiling.c +267 -0
  40. data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
  41. data/ext/datadog_profiling_native_extension/ruby_helpers.h +119 -0
  42. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +115 -0
  43. data/ext/datadog_profiling_native_extension/setup_signal_handler.h +11 -0
  44. data/ext/datadog_profiling_native_extension/stack_recorder.c +941 -0
  45. data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
  46. data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
  47. data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
  48. data/lib/datadog/appsec/assets/blocked.html +99 -0
  49. data/lib/datadog/appsec/assets/blocked.json +1 -0
  50. data/lib/datadog/appsec/assets/blocked.text +5 -0
  51. data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
  52. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  53. data/lib/datadog/appsec/assets/waf_rules/recommended.json +7703 -0
  54. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  55. data/lib/datadog/appsec/assets/waf_rules/strict.json +1635 -0
  56. data/lib/datadog/appsec/assets.rb +46 -0
  57. data/lib/datadog/appsec/autoload.rb +13 -0
  58. data/lib/datadog/appsec/component.rb +94 -0
  59. data/lib/datadog/appsec/configuration/settings.rb +202 -0
  60. data/lib/datadog/appsec/configuration.rb +11 -0
  61. data/lib/datadog/appsec/contrib/auto_instrument.rb +25 -0
  62. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  63. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  64. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  65. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  66. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  67. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  68. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  69. data/lib/datadog/appsec/contrib/devise/tracking.rb +49 -0
  70. data/lib/datadog/appsec/contrib/integration.rb +37 -0
  71. data/lib/datadog/appsec/contrib/patcher.rb +12 -0
  72. data/lib/datadog/appsec/contrib/rack/ext.rb +13 -0
  73. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +104 -0
  74. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
  75. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +162 -0
  76. data/lib/datadog/appsec/contrib/rack/integration.rb +44 -0
  77. data/lib/datadog/appsec/contrib/rack/patcher.rb +34 -0
  78. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +81 -0
  79. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +60 -0
  80. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +66 -0
  81. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +44 -0
  82. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +196 -0
  83. data/lib/datadog/appsec/contrib/rails/ext.rb +13 -0
  84. data/lib/datadog/appsec/contrib/rails/framework.rb +16 -0
  85. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
  86. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +71 -0
  87. data/lib/datadog/appsec/contrib/rails/integration.rb +43 -0
  88. data/lib/datadog/appsec/contrib/rails/patcher.rb +166 -0
  89. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +66 -0
  90. data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
  91. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
  92. data/lib/datadog/appsec/contrib/sinatra/ext.rb +14 -0
  93. data/lib/datadog/appsec/contrib/sinatra/framework.rb +20 -0
  94. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
  95. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
  96. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +117 -0
  97. data/lib/datadog/appsec/contrib/sinatra/integration.rb +43 -0
  98. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +168 -0
  99. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +61 -0
  100. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
  101. data/lib/datadog/appsec/event.rb +171 -0
  102. data/lib/datadog/appsec/ext.rb +10 -0
  103. data/lib/datadog/appsec/extensions.rb +15 -0
  104. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
  105. data/lib/datadog/appsec/instrumentation/gateway.rb +64 -0
  106. data/lib/datadog/appsec/instrumentation.rb +9 -0
  107. data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
  108. data/lib/datadog/appsec/monitor/reactive/set_user.rb +58 -0
  109. data/lib/datadog/appsec/monitor.rb +11 -0
  110. data/lib/datadog/appsec/processor/actions.rb +49 -0
  111. data/lib/datadog/appsec/processor/rule_loader.rb +123 -0
  112. data/lib/datadog/appsec/processor/rule_merger.rb +152 -0
  113. data/lib/datadog/appsec/processor.rb +171 -0
  114. data/lib/datadog/appsec/rate_limiter.rb +60 -0
  115. data/lib/datadog/appsec/reactive/address_hash.rb +22 -0
  116. data/lib/datadog/appsec/reactive/engine.rb +47 -0
  117. data/lib/datadog/appsec/reactive/operation.rb +68 -0
  118. data/lib/datadog/appsec/reactive/subscriber.rb +19 -0
  119. data/lib/datadog/appsec/remote.rb +129 -0
  120. data/lib/datadog/appsec/response.rb +151 -0
  121. data/lib/datadog/appsec/sample_rate.rb +21 -0
  122. data/lib/datadog/appsec/scope.rb +61 -0
  123. data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
  124. data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
  125. data/lib/datadog/appsec/utils/http.rb +11 -0
  126. data/lib/datadog/appsec/utils.rb +9 -0
  127. data/lib/datadog/appsec.rb +60 -0
  128. data/lib/datadog/auto_instrument.rb +16 -0
  129. data/lib/datadog/auto_instrument_base.rb +8 -0
  130. data/lib/datadog/core/buffer/cruby.rb +55 -0
  131. data/lib/datadog/core/buffer/random.rb +134 -0
  132. data/lib/datadog/core/buffer/thread_safe.rb +58 -0
  133. data/lib/datadog/core/chunker.rb +35 -0
  134. data/lib/datadog/core/configuration/agent_settings_resolver.rb +352 -0
  135. data/lib/datadog/core/configuration/base.rb +91 -0
  136. data/lib/datadog/core/configuration/components.rb +177 -0
  137. data/lib/datadog/core/configuration/ext.rb +45 -0
  138. data/lib/datadog/core/configuration/option.rb +319 -0
  139. data/lib/datadog/core/configuration/option_definition.rb +165 -0
  140. data/lib/datadog/core/configuration/options.rb +128 -0
  141. data/lib/datadog/core/configuration/settings.rb +786 -0
  142. data/lib/datadog/core/configuration.rb +296 -0
  143. data/lib/datadog/core/diagnostics/environment_logger.rb +173 -0
  144. data/lib/datadog/core/diagnostics/health.rb +19 -0
  145. data/lib/datadog/core/encoding.rb +74 -0
  146. data/lib/datadog/core/environment/cgroup.rb +53 -0
  147. data/lib/datadog/core/environment/class_count.rb +21 -0
  148. data/lib/datadog/core/environment/container.rb +91 -0
  149. data/lib/datadog/core/environment/execution.rb +103 -0
  150. data/lib/datadog/core/environment/ext.rb +45 -0
  151. data/lib/datadog/core/environment/gc.rb +20 -0
  152. data/lib/datadog/core/environment/git.rb +25 -0
  153. data/lib/datadog/core/environment/identity.rb +84 -0
  154. data/lib/datadog/core/environment/platform.rb +40 -0
  155. data/lib/datadog/core/environment/socket.rb +24 -0
  156. data/lib/datadog/core/environment/thread_count.rb +20 -0
  157. data/lib/datadog/core/environment/variable_helpers.rb +53 -0
  158. data/lib/datadog/core/environment/vm_cache.rb +64 -0
  159. data/lib/datadog/core/environment/yjit.rb +58 -0
  160. data/lib/datadog/core/error.rb +100 -0
  161. data/lib/datadog/core/extensions.rb +16 -0
  162. data/lib/datadog/core/git/ext.rb +16 -0
  163. data/lib/datadog/core/header_collection.rb +43 -0
  164. data/lib/datadog/core/logger.rb +45 -0
  165. data/lib/datadog/core/logging/ext.rb +13 -0
  166. data/lib/datadog/core/metrics/client.rb +199 -0
  167. data/lib/datadog/core/metrics/ext.rb +18 -0
  168. data/lib/datadog/core/metrics/helpers.rb +25 -0
  169. data/lib/datadog/core/metrics/logging.rb +44 -0
  170. data/lib/datadog/core/metrics/metric.rb +14 -0
  171. data/lib/datadog/core/metrics/options.rb +52 -0
  172. data/lib/datadog/core/pin.rb +75 -0
  173. data/lib/datadog/core/remote/client/capabilities.rb +62 -0
  174. data/lib/datadog/core/remote/client.rb +234 -0
  175. data/lib/datadog/core/remote/component.rb +162 -0
  176. data/lib/datadog/core/remote/configuration/content.rb +111 -0
  177. data/lib/datadog/core/remote/configuration/digest.rb +62 -0
  178. data/lib/datadog/core/remote/configuration/path.rb +90 -0
  179. data/lib/datadog/core/remote/configuration/repository.rb +294 -0
  180. data/lib/datadog/core/remote/configuration/target.rb +74 -0
  181. data/lib/datadog/core/remote/configuration.rb +18 -0
  182. data/lib/datadog/core/remote/dispatcher.rb +59 -0
  183. data/lib/datadog/core/remote/ext.rb +13 -0
  184. data/lib/datadog/core/remote/negotiation.rb +70 -0
  185. data/lib/datadog/core/remote/tie/tracing.rb +39 -0
  186. data/lib/datadog/core/remote/tie.rb +27 -0
  187. data/lib/datadog/core/remote/transport/config.rb +60 -0
  188. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  189. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  190. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  191. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  192. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  193. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  194. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  195. data/lib/datadog/core/remote/transport/http.rb +147 -0
  196. data/lib/datadog/core/remote/transport/negotiation.rb +62 -0
  197. data/lib/datadog/core/remote/worker.rb +102 -0
  198. data/lib/datadog/core/remote.rb +24 -0
  199. data/lib/datadog/core/runtime/ext.rb +38 -0
  200. data/lib/datadog/core/runtime/metrics.rb +185 -0
  201. data/lib/datadog/core/telemetry/client.rb +87 -0
  202. data/lib/datadog/core/telemetry/collector.rb +248 -0
  203. data/lib/datadog/core/telemetry/emitter.rb +50 -0
  204. data/lib/datadog/core/telemetry/event.rb +83 -0
  205. data/lib/datadog/core/telemetry/ext.rb +15 -0
  206. data/lib/datadog/core/telemetry/heartbeat.rb +35 -0
  207. data/lib/datadog/core/telemetry/http/adapters/net.rb +113 -0
  208. data/lib/datadog/core/telemetry/http/env.rb +20 -0
  209. data/lib/datadog/core/telemetry/http/ext.rb +22 -0
  210. data/lib/datadog/core/telemetry/http/response.rb +66 -0
  211. data/lib/datadog/core/telemetry/http/transport.rb +56 -0
  212. data/lib/datadog/core/telemetry/v1/app_event.rb +59 -0
  213. data/lib/datadog/core/telemetry/v1/application.rb +94 -0
  214. data/lib/datadog/core/telemetry/v1/configuration.rb +27 -0
  215. data/lib/datadog/core/telemetry/v1/dependency.rb +45 -0
  216. data/lib/datadog/core/telemetry/v1/host.rb +59 -0
  217. data/lib/datadog/core/telemetry/v1/install_signature.rb +38 -0
  218. data/lib/datadog/core/telemetry/v1/integration.rb +66 -0
  219. data/lib/datadog/core/telemetry/v1/product.rb +36 -0
  220. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +108 -0
  221. data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
  222. data/lib/datadog/core/telemetry/v2/request.rb +29 -0
  223. data/lib/datadog/core/transport/ext.rb +43 -0
  224. data/lib/datadog/core/transport/http/adapters/net.rb +159 -0
  225. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  226. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  227. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  228. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  229. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  230. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  231. data/lib/datadog/core/transport/http/env.rb +62 -0
  232. data/lib/datadog/core/transport/http/response.rb +60 -0
  233. data/lib/datadog/core/transport/parcel.rb +22 -0
  234. data/lib/datadog/core/transport/request.rb +17 -0
  235. data/lib/datadog/core/transport/response.rb +64 -0
  236. data/lib/datadog/core/utils/duration.rb +52 -0
  237. data/lib/datadog/core/utils/forking.rb +63 -0
  238. data/lib/datadog/core/utils/hash.rb +79 -0
  239. data/lib/datadog/core/utils/network.rb +121 -0
  240. data/lib/datadog/core/utils/only_once.rb +42 -0
  241. data/lib/datadog/core/utils/safe_dup.rb +40 -0
  242. data/lib/datadog/core/utils/sequence.rb +26 -0
  243. data/lib/datadog/core/utils/time.rb +52 -0
  244. data/lib/datadog/core/utils/url.rb +25 -0
  245. data/lib/datadog/core/utils.rb +94 -0
  246. data/lib/datadog/core/vendor/multipart-post/LICENSE +11 -0
  247. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +118 -0
  248. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +59 -0
  249. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +137 -0
  250. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +11 -0
  251. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +10 -0
  252. data/lib/datadog/core/vendor/multipart-post/multipart.rb +14 -0
  253. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +34 -0
  254. data/lib/datadog/core/worker.rb +24 -0
  255. data/lib/datadog/core/workers/async.rb +185 -0
  256. data/lib/datadog/core/workers/interval_loop.rb +123 -0
  257. data/lib/datadog/core/workers/polling.rb +59 -0
  258. data/lib/datadog/core/workers/queue.rb +44 -0
  259. data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
  260. data/lib/datadog/core.rb +45 -0
  261. data/lib/datadog/kit/appsec/events.rb +169 -0
  262. data/lib/datadog/kit/enable_core_dumps.rb +49 -0
  263. data/lib/datadog/kit/identity.rb +104 -0
  264. data/lib/datadog/kit.rb +11 -0
  265. data/lib/datadog/opentelemetry/api/context.rb +193 -0
  266. data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
  267. data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
  268. data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
  269. data/lib/datadog/opentelemetry/sdk/propagator.rb +92 -0
  270. data/lib/datadog/opentelemetry/sdk/span_processor.rb +134 -0
  271. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  272. data/lib/datadog/opentelemetry/trace.rb +59 -0
  273. data/lib/datadog/opentelemetry.rb +51 -0
  274. data/lib/datadog/profiling/collectors/code_provenance.rb +113 -0
  275. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +114 -0
  276. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  277. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +70 -0
  278. data/lib/datadog/profiling/collectors/info.rb +103 -0
  279. data/lib/datadog/profiling/collectors/stack.rb +13 -0
  280. data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
  281. data/lib/datadog/profiling/component.rb +418 -0
  282. data/lib/datadog/profiling/exporter.rb +103 -0
  283. data/lib/datadog/profiling/ext/forking.rb +98 -0
  284. data/lib/datadog/profiling/ext.rb +35 -0
  285. data/lib/datadog/profiling/flush.rb +43 -0
  286. data/lib/datadog/profiling/http_transport.rb +143 -0
  287. data/lib/datadog/profiling/load_native_extension.rb +28 -0
  288. data/lib/datadog/profiling/native_extension.rb +20 -0
  289. data/lib/datadog/profiling/preload.rb +5 -0
  290. data/lib/datadog/profiling/profiler.rb +64 -0
  291. data/lib/datadog/profiling/scheduler.rb +137 -0
  292. data/lib/datadog/profiling/stack_recorder.rb +69 -0
  293. data/lib/datadog/profiling/tag_builder.rb +60 -0
  294. data/lib/datadog/profiling/tasks/exec.rb +50 -0
  295. data/lib/datadog/profiling/tasks/help.rb +18 -0
  296. data/lib/datadog/profiling/tasks/setup.rb +60 -0
  297. data/lib/datadog/profiling.rb +152 -0
  298. data/lib/datadog/tracing/analytics.rb +25 -0
  299. data/lib/datadog/tracing/buffer.rb +129 -0
  300. data/lib/datadog/tracing/client_ip.rb +61 -0
  301. data/lib/datadog/tracing/component.rb +206 -0
  302. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  303. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  304. data/lib/datadog/tracing/configuration/ext.rb +98 -0
  305. data/lib/datadog/tracing/configuration/http.rb +74 -0
  306. data/lib/datadog/tracing/configuration/settings.rb +421 -0
  307. data/lib/datadog/tracing/context.rb +68 -0
  308. data/lib/datadog/tracing/context_provider.rb +82 -0
  309. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +39 -0
  310. data/lib/datadog/tracing/contrib/action_cable/event.rb +71 -0
  311. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
  312. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
  313. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
  314. data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
  315. data/lib/datadog/tracing/contrib/action_cable/ext.rb +33 -0
  316. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +90 -0
  317. data/lib/datadog/tracing/contrib/action_cable/integration.rb +50 -0
  318. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
  319. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +43 -0
  320. data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
  321. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +60 -0
  322. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +47 -0
  323. data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
  324. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +34 -0
  325. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +50 -0
  326. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
  327. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +138 -0
  328. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
  329. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +40 -0
  330. data/lib/datadog/tracing/contrib/action_pack/ext.rb +23 -0
  331. data/lib/datadog/tracing/contrib/action_pack/integration.rb +51 -0
  332. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
  333. data/lib/datadog/tracing/contrib/action_pack/utils.rb +40 -0
  334. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +43 -0
  335. data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
  336. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +54 -0
  337. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
  338. data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
  339. data/lib/datadog/tracing/contrib/action_view/ext.rb +25 -0
  340. data/lib/datadog/tracing/contrib/action_view/integration.rb +58 -0
  341. data/lib/datadog/tracing/contrib/action_view/patcher.rb +34 -0
  342. data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
  343. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +39 -0
  344. data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
  345. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
  346. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
  347. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
  348. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
  349. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
  350. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
  351. data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
  352. data/lib/datadog/tracing/contrib/active_job/ext.rb +40 -0
  353. data/lib/datadog/tracing/contrib/active_job/integration.rb +50 -0
  354. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +24 -0
  355. data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
  356. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +37 -0
  357. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +68 -0
  358. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
  359. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
  360. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
  361. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +25 -0
  362. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +45 -0
  363. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +32 -0
  364. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
  365. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +147 -0
  366. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +48 -0
  367. data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
  368. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +58 -0
  369. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +77 -0
  370. data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
  371. data/lib/datadog/tracing/contrib/active_record/ext.rb +30 -0
  372. data/lib/datadog/tracing/contrib/active_record/integration.rb +57 -0
  373. data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
  374. data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
  375. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +186 -0
  376. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +76 -0
  377. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
  378. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +47 -0
  379. data/lib/datadog/tracing/contrib/active_support/ext.rb +32 -0
  380. data/lib/datadog/tracing/contrib/active_support/integration.rb +52 -0
  381. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
  382. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
  383. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +164 -0
  384. data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
  385. data/lib/datadog/tracing/contrib/analytics.rb +28 -0
  386. data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
  387. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +53 -0
  388. data/lib/datadog/tracing/contrib/aws/ext.rb +50 -0
  389. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +119 -0
  390. data/lib/datadog/tracing/contrib/aws/integration.rb +47 -0
  391. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +64 -0
  392. data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
  393. data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
  394. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
  395. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
  396. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
  397. data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
  398. data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
  399. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
  400. data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
  401. data/lib/datadog/tracing/contrib/aws/services.rb +139 -0
  402. data/lib/datadog/tracing/contrib/component.rb +41 -0
  403. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  404. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +24 -0
  405. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
  406. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
  407. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +20 -0
  408. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +44 -0
  409. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +49 -0
  410. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  411. data/lib/datadog/tracing/contrib/configurable.rb +102 -0
  412. data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
  413. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
  414. data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
  415. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +58 -0
  416. data/lib/datadog/tracing/contrib/dalli/ext.rb +40 -0
  417. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +75 -0
  418. data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
  419. data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
  420. data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
  421. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +49 -0
  422. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +29 -0
  423. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
  424. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +37 -0
  425. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +108 -0
  426. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +34 -0
  427. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +57 -0
  428. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +34 -0
  429. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +50 -0
  430. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +164 -0
  431. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +87 -0
  432. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +56 -0
  433. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +223 -0
  434. data/lib/datadog/tracing/contrib/ethon/ext.rb +32 -0
  435. data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
  436. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +102 -0
  437. data/lib/datadog/tracing/contrib/ethon/patcher.rb +30 -0
  438. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +74 -0
  439. data/lib/datadog/tracing/contrib/excon/ext.rb +30 -0
  440. data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
  441. data/lib/datadog/tracing/contrib/excon/middleware.rb +196 -0
  442. data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
  443. data/lib/datadog/tracing/contrib/ext.rb +55 -0
  444. data/lib/datadog/tracing/contrib/extensions.rb +228 -0
  445. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +77 -0
  446. data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
  447. data/lib/datadog/tracing/contrib/faraday/ext.rb +30 -0
  448. data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
  449. data/lib/datadog/tracing/contrib/faraday/middleware.rb +112 -0
  450. data/lib/datadog/tracing/contrib/faraday/patcher.rb +56 -0
  451. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
  452. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +55 -0
  453. data/lib/datadog/tracing/contrib/grape/endpoint.rb +256 -0
  454. data/lib/datadog/tracing/contrib/grape/ext.rb +30 -0
  455. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
  456. data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
  457. data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
  458. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +50 -0
  459. data/lib/datadog/tracing/contrib/graphql/ext.rb +20 -0
  460. data/lib/datadog/tracing/contrib/graphql/integration.rb +56 -0
  461. data/lib/datadog/tracing/contrib/graphql/patcher.rb +55 -0
  462. data/lib/datadog/tracing/contrib/graphql/trace_patcher.rb +24 -0
  463. data/lib/datadog/tracing/contrib/graphql/tracing_patcher.rb +28 -0
  464. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +58 -0
  465. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +117 -0
  466. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +96 -0
  467. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +107 -0
  468. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
  469. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +46 -0
  470. data/lib/datadog/tracing/contrib/grpc/ext.rb +29 -0
  471. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  472. data/lib/datadog/tracing/contrib/grpc/integration.rb +50 -0
  473. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
  474. data/lib/datadog/tracing/contrib/grpc/patcher.rb +34 -0
  475. data/lib/datadog/tracing/contrib/grpc.rb +45 -0
  476. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
  477. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +23 -0
  478. data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
  479. data/lib/datadog/tracing/contrib/hanami/integration.rb +44 -0
  480. data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
  481. data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
  482. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
  483. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
  484. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +40 -0
  485. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +69 -0
  486. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
  487. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +45 -0
  488. data/lib/datadog/tracing/contrib/http/ext.rb +29 -0
  489. data/lib/datadog/tracing/contrib/http/instrumentation.rb +144 -0
  490. data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
  491. data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
  492. data/lib/datadog/tracing/contrib/http.rb +45 -0
  493. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
  494. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +68 -0
  495. data/lib/datadog/tracing/contrib/httpclient/ext.rb +30 -0
  496. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +137 -0
  497. data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
  498. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +42 -0
  499. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +68 -0
  500. data/lib/datadog/tracing/contrib/httprb/ext.rb +29 -0
  501. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +145 -0
  502. data/lib/datadog/tracing/contrib/httprb/integration.rb +48 -0
  503. data/lib/datadog/tracing/contrib/httprb/patcher.rb +42 -0
  504. data/lib/datadog/tracing/contrib/integration.rb +78 -0
  505. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +39 -0
  506. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +19 -0
  507. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
  508. data/lib/datadog/tracing/contrib/kafka/event.rb +53 -0
  509. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
  510. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
  511. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
  512. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
  513. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
  514. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
  515. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
  516. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +41 -0
  517. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +44 -0
  518. data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
  519. data/lib/datadog/tracing/contrib/kafka/ext.rb +55 -0
  520. data/lib/datadog/tracing/contrib/kafka/integration.rb +44 -0
  521. data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
  522. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +24 -0
  523. data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
  524. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +31 -0
  525. data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
  526. data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
  527. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +56 -0
  528. data/lib/datadog/tracing/contrib/mongodb/ext.rb +38 -0
  529. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
  530. data/lib/datadog/tracing/contrib/mongodb/integration.rb +48 -0
  531. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
  532. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
  533. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +141 -0
  534. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +64 -0
  535. data/lib/datadog/tracing/contrib/mysql2/ext.rb +28 -0
  536. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +95 -0
  537. data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
  538. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
  539. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +54 -0
  540. data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
  541. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  542. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  543. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  544. data/lib/datadog/tracing/contrib/patchable.rb +109 -0
  545. data/lib/datadog/tracing/contrib/patcher.rb +85 -0
  546. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +64 -0
  547. data/lib/datadog/tracing/contrib/pg/ext.rb +35 -0
  548. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +211 -0
  549. data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
  550. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  551. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +52 -0
  552. data/lib/datadog/tracing/contrib/presto/ext.rb +38 -0
  553. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +138 -0
  554. data/lib/datadog/tracing/contrib/presto/integration.rb +43 -0
  555. data/lib/datadog/tracing/contrib/presto/patcher.rb +37 -0
  556. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
  557. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
  558. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
  559. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +55 -0
  560. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +55 -0
  561. data/lib/datadog/tracing/contrib/que/ext.rb +33 -0
  562. data/lib/datadog/tracing/contrib/que/integration.rb +44 -0
  563. data/lib/datadog/tracing/contrib/que/patcher.rb +26 -0
  564. data/lib/datadog/tracing/contrib/que/tracer.rb +63 -0
  565. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +47 -0
  566. data/lib/datadog/tracing/contrib/racecar/event.rb +81 -0
  567. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +38 -0
  568. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
  569. data/lib/datadog/tracing/contrib/racecar/events/message.rb +38 -0
  570. data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
  571. data/lib/datadog/tracing/contrib/racecar/ext.rb +33 -0
  572. data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
  573. data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
  574. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +59 -0
  575. data/lib/datadog/tracing/contrib/rack/ext.rb +30 -0
  576. data/lib/datadog/tracing/contrib/rack/header_collection.rb +40 -0
  577. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  578. data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
  579. data/lib/datadog/tracing/contrib/rack/middlewares.rb +265 -0
  580. data/lib/datadog/tracing/contrib/rack/patcher.rb +119 -0
  581. data/lib/datadog/tracing/contrib/rack/request_queue.rb +48 -0
  582. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +52 -0
  583. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +10 -0
  584. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +76 -0
  585. data/lib/datadog/tracing/contrib/rails/ext.rb +23 -0
  586. data/lib/datadog/tracing/contrib/rails/framework.rb +148 -0
  587. data/lib/datadog/tracing/contrib/rails/integration.rb +52 -0
  588. data/lib/datadog/tracing/contrib/rails/log_injection.rb +29 -0
  589. data/lib/datadog/tracing/contrib/rails/middlewares.rb +46 -0
  590. data/lib/datadog/tracing/contrib/rails/patcher.rb +88 -0
  591. data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
  592. data/lib/datadog/tracing/contrib/rails/utils.rb +26 -0
  593. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +55 -0
  594. data/lib/datadog/tracing/contrib/rake/ext.rb +27 -0
  595. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +103 -0
  596. data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
  597. data/lib/datadog/tracing/contrib/rake/patcher.rb +33 -0
  598. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
  599. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +57 -0
  600. data/lib/datadog/tracing/contrib/redis/ext.rb +35 -0
  601. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +53 -0
  602. data/lib/datadog/tracing/contrib/redis/integration.rb +80 -0
  603. data/lib/datadog/tracing/contrib/redis/patcher.rb +92 -0
  604. data/lib/datadog/tracing/contrib/redis/quantize.rb +80 -0
  605. data/lib/datadog/tracing/contrib/redis/tags.rb +68 -0
  606. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +85 -0
  607. data/lib/datadog/tracing/contrib/redis/vendor/LICENSE +20 -0
  608. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +160 -0
  609. data/lib/datadog/tracing/contrib/registerable.rb +50 -0
  610. data/lib/datadog/tracing/contrib/registry.rb +52 -0
  611. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +42 -0
  612. data/lib/datadog/tracing/contrib/resque/ext.rb +22 -0
  613. data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
  614. data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
  615. data/lib/datadog/tracing/contrib/resque/resque_job.rb +106 -0
  616. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +55 -0
  617. data/lib/datadog/tracing/contrib/rest_client/ext.rb +28 -0
  618. data/lib/datadog/tracing/contrib/rest_client/integration.rb +43 -0
  619. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +28 -0
  620. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +129 -0
  621. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +38 -0
  622. data/lib/datadog/tracing/contrib/roda/ext.rb +19 -0
  623. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
  624. data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
  625. data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
  626. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +24 -0
  627. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
  628. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +35 -0
  629. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
  630. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
  631. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +37 -0
  632. data/lib/datadog/tracing/contrib/sequel/database.rb +62 -0
  633. data/lib/datadog/tracing/contrib/sequel/dataset.rb +67 -0
  634. data/lib/datadog/tracing/contrib/sequel/ext.rb +23 -0
  635. data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
  636. data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
  637. data/lib/datadog/tracing/contrib/sequel/utils.rb +90 -0
  638. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +43 -0
  639. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +27 -0
  640. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
  641. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
  642. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +65 -0
  643. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +62 -0
  644. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +47 -0
  645. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +46 -0
  646. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +44 -0
  647. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +61 -0
  648. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +90 -0
  649. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +61 -0
  650. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +36 -0
  651. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +34 -0
  652. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +57 -0
  653. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
  654. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +88 -0
  655. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +44 -0
  656. data/lib/datadog/tracing/contrib/sidekiq.rb +37 -0
  657. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +46 -0
  658. data/lib/datadog/tracing/contrib/sinatra/env.rb +38 -0
  659. data/lib/datadog/tracing/contrib/sinatra/ext.rb +31 -0
  660. data/lib/datadog/tracing/contrib/sinatra/framework.rb +116 -0
  661. data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
  662. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +75 -0
  663. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +86 -0
  664. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +109 -0
  665. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +43 -0
  666. data/lib/datadog/tracing/contrib/sneakers/ext.rb +27 -0
  667. data/lib/datadog/tracing/contrib/sneakers/integration.rb +44 -0
  668. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +27 -0
  669. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +60 -0
  670. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +92 -0
  671. data/lib/datadog/tracing/contrib/status_range_env_parser.rb +33 -0
  672. data/lib/datadog/tracing/contrib/status_range_matcher.rb +25 -0
  673. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +37 -0
  674. data/lib/datadog/tracing/contrib/stripe/ext.rb +27 -0
  675. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  676. data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
  677. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  678. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +39 -0
  679. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
  680. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +28 -0
  681. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +104 -0
  682. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
  683. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +35 -0
  684. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
  685. data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
  686. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
  687. data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
  688. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
  689. data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
  690. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
  691. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +179 -0
  692. data/lib/datadog/tracing/contrib.rb +81 -0
  693. data/lib/datadog/tracing/correlation.rb +103 -0
  694. data/lib/datadog/tracing/diagnostics/environment_logger.rb +159 -0
  695. data/lib/datadog/tracing/diagnostics/ext.rb +36 -0
  696. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  697. data/lib/datadog/tracing/distributed/b3_multi.rb +73 -0
  698. data/lib/datadog/tracing/distributed/b3_single.rb +69 -0
  699. data/lib/datadog/tracing/distributed/datadog.rb +200 -0
  700. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
  701. data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
  702. data/lib/datadog/tracing/distributed/helpers.rb +65 -0
  703. data/lib/datadog/tracing/distributed/none.rb +18 -0
  704. data/lib/datadog/tracing/distributed/propagation.rb +121 -0
  705. data/lib/datadog/tracing/distributed/trace_context.rb +436 -0
  706. data/lib/datadog/tracing/event.rb +76 -0
  707. data/lib/datadog/tracing/flush.rb +96 -0
  708. data/lib/datadog/tracing/metadata/analytics.rb +26 -0
  709. data/lib/datadog/tracing/metadata/errors.rb +24 -0
  710. data/lib/datadog/tracing/metadata/ext.rb +193 -0
  711. data/lib/datadog/tracing/metadata/tagging.rb +131 -0
  712. data/lib/datadog/tracing/metadata.rb +20 -0
  713. data/lib/datadog/tracing/pipeline/span_filter.rb +46 -0
  714. data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
  715. data/lib/datadog/tracing/pipeline.rb +63 -0
  716. data/lib/datadog/tracing/remote.rb +78 -0
  717. data/lib/datadog/tracing/runtime/metrics.rb +17 -0
  718. data/lib/datadog/tracing/sampling/all_sampler.rb +24 -0
  719. data/lib/datadog/tracing/sampling/ext.rb +56 -0
  720. data/lib/datadog/tracing/sampling/matcher.rb +65 -0
  721. data/lib/datadog/tracing/sampling/priority_sampler.rb +160 -0
  722. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +87 -0
  723. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +63 -0
  724. data/lib/datadog/tracing/sampling/rate_limiter.rb +185 -0
  725. data/lib/datadog/tracing/sampling/rate_sampler.rb +58 -0
  726. data/lib/datadog/tracing/sampling/rule.rb +61 -0
  727. data/lib/datadog/tracing/sampling/rule_sampler.rb +148 -0
  728. data/lib/datadog/tracing/sampling/sampler.rb +32 -0
  729. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  730. data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
  731. data/lib/datadog/tracing/sampling/span/rule.rb +78 -0
  732. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  733. data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
  734. data/lib/datadog/tracing/span.rb +207 -0
  735. data/lib/datadog/tracing/span_operation.rb +498 -0
  736. data/lib/datadog/tracing/sync_writer.rb +67 -0
  737. data/lib/datadog/tracing/trace_digest.rb +185 -0
  738. data/lib/datadog/tracing/trace_operation.rb +492 -0
  739. data/lib/datadog/tracing/trace_segment.rb +222 -0
  740. data/lib/datadog/tracing/tracer.rb +531 -0
  741. data/lib/datadog/tracing/transport/http/api/instance.rb +37 -0
  742. data/lib/datadog/tracing/transport/http/api/spec.rb +19 -0
  743. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  744. data/lib/datadog/tracing/transport/http/builder.rb +162 -0
  745. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  746. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  747. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  748. data/lib/datadog/tracing/transport/http.rb +97 -0
  749. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  750. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  751. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  752. data/lib/datadog/tracing/transport/io.rb +30 -0
  753. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  754. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  755. data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
  756. data/lib/datadog/tracing/transport/traces.rb +224 -0
  757. data/lib/datadog/tracing/utils.rb +83 -0
  758. data/lib/datadog/tracing/workers/trace_writer.rb +196 -0
  759. data/lib/datadog/tracing/workers.rb +125 -0
  760. data/lib/datadog/tracing/writer.rb +188 -0
  761. data/lib/datadog/tracing.rb +169 -0
  762. data/lib/datadog/version.rb +26 -0
  763. data/lib/datadog.rb +10 -0
  764. metadata +886 -0
@@ -0,0 +1,786 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ require_relative 'base'
6
+ require_relative 'ext'
7
+ require_relative '../environment/execution'
8
+ require_relative '../environment/ext'
9
+ require_relative '../runtime/ext'
10
+ require_relative '../telemetry/ext'
11
+ require_relative '../remote/ext'
12
+ require_relative '../../profiling/ext'
13
+
14
+ require_relative '../../tracing/configuration/settings'
15
+
16
+ module Datadog
17
+ module Core
18
+ module Configuration
19
+ # Global configuration settings for the Datadog library.
20
+ # @public_api
21
+ # rubocop:disable Metrics/BlockLength
22
+ class Settings
23
+ include Base
24
+
25
+ # @!visibility private
26
+ def initialize(*_)
27
+ super
28
+
29
+ # WORKAROUND: The values for services, version, and env can get set either directly OR as a side effect of
30
+ # accessing tags (reading or writing). This is of course really confusing and error-prone, e.g. in an app
31
+ # WITHOUT this workaround where you define `DD_TAGS=env:envenvtag,service:envservicetag,version:envversiontag`
32
+ # and do:
33
+ #
34
+ # puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
35
+ # Datadog.configuration.tags
36
+ # puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
37
+ #
38
+ # the output will be:
39
+ #
40
+ # [empty]
41
+ # envservicetag envenvtag envversiontag
42
+ #
43
+ # That is -- the proper values for service/env/version are only set AFTER something accidentally or not triggers
44
+ # the resolution of the tags.
45
+ # This is really confusing, error prone, etc, so calling tags here is a really hacky but effective way to
46
+ # avoid this. I could not think of a better way of fixing this issue without massive refactoring of tags parsing
47
+ # (so that the individual service/env/version get correctly set even from their tags values, not as a side
48
+ # effect). Sorry :(
49
+ tags
50
+ end
51
+
52
+ # {https://docs.datadoghq.com/agent/ Datadog Agent} configuration.
53
+ # @public_api
54
+ settings :agent do
55
+ # Agent hostname or IP.
56
+ # @default `DD_AGENT_HOST` environment variable, otherwise `127.0.0.1`
57
+ # @return [String,nil]
58
+ option :host
59
+
60
+ # Agent APM TCP port.
61
+ # @see https://docs.datadoghq.com/getting_started/tracing/#datadog-apm
62
+ # @default `DD_TRACE_AGENT_PORT` environment variable, otherwise `8126`
63
+ # @return [String,nil]
64
+ option :port
65
+
66
+ # Agent APM SSL.
67
+ # @see https://docs.datadoghq.com/getting_started/tracing/#datadog-apm
68
+ # @default defined as part of `DD_TRACE_AGENT_URL` environment variable, otherwise `false`
69
+ # Only applies to http connections.
70
+ # @return [Boolean,nil]
71
+ option :use_ssl
72
+
73
+ # Agent APM Timeout.
74
+ # @see https://docs.datadoghq.com/getting_started/tracing/#datadog-apm
75
+ # @default `DD_TRACE_AGENT_TIMEOUT_SECONDS` environment variable, otherwise `30` for http, '1' for UDS
76
+ # @return [Integer,nil]
77
+ option :timeout_seconds
78
+
79
+ # Agent unix domain socket path.
80
+ # @default defined in `DD_TRACE_AGENT_URL` environment variable, otherwise '/var/run/datadog/apm.socket'
81
+ # Agent connects via HTTP by default, but will use UDS if this is set or if unix scheme defined in
82
+ # DD_TRACE_AGENT_URL.
83
+ # @return [String,nil]
84
+ option :uds_path
85
+
86
+ # TODO: add declarative statsd configuration. Currently only usable via an environment variable.
87
+ # Statsd configuration for agent access.
88
+ # @public_api
89
+ # settings :statsd do
90
+ # # Agent Statsd UDP port.
91
+ # # @configure_with {Datadog::Statsd}
92
+ # # @default `DD_AGENT_HOST` environment variable, otherwise `8125`
93
+ # # @return [String,nil]
94
+ # option :port
95
+ # end
96
+ end
97
+
98
+ # Datadog API key.
99
+ #
100
+ # For internal use only.
101
+ #
102
+ # @default `DD_API_KEY` environment variable, otherwise `nil`
103
+ # @return [String,nil]
104
+ option :api_key do |o|
105
+ o.type :string, nilable: true
106
+ o.env Core::Environment::Ext::ENV_API_KEY
107
+ end
108
+
109
+ # Datadog diagnostic settings.
110
+ #
111
+ # Enabling these surfaces debug information that can be helpful to
112
+ # diagnose issues related to Datadog internals.
113
+ # @public_api
114
+ settings :diagnostics do
115
+ # Outputs all spans created by the host application to `Datadog.logger`.
116
+ #
117
+ # **This option is very verbose!** It's only recommended for non-production
118
+ # environments.
119
+ #
120
+ # This option is helpful when trying to understand what information the
121
+ # Datadog features are sending to the Agent or backend.
122
+ # @default `DD_TRACE_DEBUG` environment variable, otherwise `false`
123
+ # @return [Boolean]
124
+ option :debug do |o|
125
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED
126
+ o.default false
127
+ o.type :bool
128
+ o.after_set do |enabled|
129
+ # Enable rich debug print statements.
130
+ # We do not need to unnecessarily load 'pp' unless in debugging mode.
131
+ require 'pp' if enabled
132
+ end
133
+ end
134
+
135
+ # Tracer startup debug log statement configuration.
136
+ # @public_api
137
+ settings :startup_logs do
138
+ # Enable startup logs collection.
139
+ #
140
+ # If `nil`, defaults to logging startup logs when `datadog` detects that the application
141
+ # is *not* running in a development environment.
142
+ #
143
+ # @default `DD_TRACE_STARTUP_LOGS` environment variable, otherwise `nil`
144
+ # @return [Boolean, nil]
145
+ option :enabled do |o|
146
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_STARTUP_LOGS_ENABLED
147
+ # Defaults to nil as we want to know when the default value is being used
148
+ o.type :bool, nilable: true
149
+ end
150
+ end
151
+ end
152
+
153
+ # The `env` tag in Datadog. Use it to separate out your staging, development, and production environments.
154
+ # @see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging
155
+ # @default `DD_ENV` environment variable, otherwise `nil`
156
+ # @return [String,nil]
157
+ option :env do |o|
158
+ o.type :string, nilable: true
159
+ # NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
160
+ o.env Core::Environment::Ext::ENV_ENVIRONMENT
161
+ end
162
+
163
+ # Internal {Datadog::Statsd} metrics collection.
164
+ #
165
+ # @public_api
166
+ settings :health_metrics do
167
+ # Enable health metrics collection.
168
+ #
169
+ # @default `DD_HEALTH_METRICS_ENABLED` environment variable, otherwise `false`
170
+ # @return [Boolean]
171
+ option :enabled do |o|
172
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_HEALTH_METRICS_ENABLED
173
+ o.default false
174
+ o.type :bool
175
+ end
176
+
177
+ # {Datadog::Statsd} instance to collect health metrics.
178
+ #
179
+ # If `nil`, health metrics creates a new {Datadog::Statsd} client with default agent configuration.
180
+ #
181
+ # @default `nil`
182
+ # @return [Datadog::Statsd,nil] a custom {Datadog::Statsd} instance
183
+ # @return [nil] an instance with default agent configuration will be lazily created
184
+ option :statsd
185
+ end
186
+
187
+ # Internal `Datadog.logger` configuration.
188
+ #
189
+ # This logger instance is only used internally by the gem.
190
+ # @public_api
191
+ settings :logger do
192
+ # The `Datadog.logger` object.
193
+ #
194
+ # Can be overwritten with a custom logger object that respects the
195
+ # [built-in Ruby Logger](https://ruby-doc.org/stdlib-3.0.1/libdoc/logger/rdoc/Logger.html)
196
+ # interface.
197
+ #
198
+ # @return Logger::Severity
199
+ option :instance do |o|
200
+ o.after_set { |value| set_option(:level, value.level) unless value.nil? }
201
+ end
202
+
203
+ # Log level for `Datadog.logger`.
204
+ # @see Logger::Severity
205
+ # @return Logger::Severity
206
+ option :level, default: ::Logger::INFO
207
+ end
208
+
209
+ # Datadog Profiler-specific configurations.
210
+ #
211
+ # @see https://docs.datadoghq.com/tracing/profiler/
212
+ # @public_api
213
+ settings :profiling do
214
+ # Enable profiling.
215
+ #
216
+ # @default `DD_PROFILING_ENABLED` environment variable, otherwise `false`
217
+ # @return [Boolean]
218
+ option :enabled do |o|
219
+ o.env Profiling::Ext::ENV_ENABLED
220
+ o.default false
221
+ o.type :bool
222
+ end
223
+
224
+ # @public_api
225
+ settings :exporter do
226
+ option :transport
227
+ end
228
+
229
+ # Can be used to enable/disable collection of allocation profiles.
230
+ #
231
+ # This feature is disabled by default
232
+ #
233
+ # @warn Due to bugs in Ruby we only recommend enabling this feature in
234
+ # Ruby versions 2.x, 3.1.4+, 3.2.3+ and 3.3.0+
235
+ # (more details in {Datadog::Profiling::Component.enable_allocation_profiling?})
236
+ #
237
+ # @default `DD_PROFILING_ALLOCATION_ENABLED` environment variable as a boolean, otherwise `false`
238
+ option :allocation_enabled do |o|
239
+ o.type :bool
240
+ o.env 'DD_PROFILING_ALLOCATION_ENABLED'
241
+ o.default false
242
+ end
243
+
244
+ # @public_api
245
+ settings :advanced do
246
+ # Controls the maximum number of frames for each thread sampled. Can be tuned to avoid omitted frames in the
247
+ # produced profiles. Increasing this may increase the overhead of profiling.
248
+ #
249
+ # @default `DD_PROFILING_MAX_FRAMES` environment variable, otherwise 400
250
+ option :max_frames do |o|
251
+ o.type :int
252
+ o.env Profiling::Ext::ENV_MAX_FRAMES
253
+ o.default 400
254
+ end
255
+
256
+ # @public_api
257
+ settings :endpoint do
258
+ settings :collection do
259
+ # When using profiling together with tracing, this controls if endpoint names
260
+ # are gathered and reported together with profiles.
261
+ #
262
+ # @default `DD_PROFILING_ENDPOINT_COLLECTION_ENABLED` environment variable, otherwise `true`
263
+ # @return [Boolean]
264
+ option :enabled do |o|
265
+ o.env Profiling::Ext::ENV_ENDPOINT_COLLECTION_ENABLED
266
+ o.default true
267
+ o.type :bool
268
+ end
269
+ end
270
+ end
271
+
272
+ # Can be used to disable the gathering of names and versions of gems in use by the service, used to power
273
+ # grouping and categorization of stack traces.
274
+ option :code_provenance_enabled, default: true
275
+
276
+ # Forces enabling of profiling of time/resources spent in Garbage Collection.
277
+ #
278
+ # Note that setting this to "false" (or not setting it) will not prevent the feature from being
279
+ # being automatically enabled in the future.
280
+ #
281
+ # This feature defaults to off for two reasons:
282
+ # 1. Currently this feature can add a lot of overhead for GC-heavy workloads.
283
+ # 2. Although this feature is safe on Ruby 2.x, on Ruby 3.x it can break in applications that make use of
284
+ # Ractors due to two Ruby VM bugs:
285
+ # https://bugs.ruby-lang.org/issues/19112 AND https://bugs.ruby-lang.org/issues/18464.
286
+ # If you use Ruby 3.x and your application does not use Ractors (or if your Ruby has been patched), the
287
+ # feature is fully safe to enable and this toggle can be used to do so.
288
+ #
289
+ # We expect the once the above issues are overcome, we'll automatically enable the feature on fixed Ruby
290
+ # versions.
291
+ #
292
+ # @default `DD_PROFILING_FORCE_ENABLE_GC` environment variable, otherwise `false`
293
+ option :force_enable_gc_profiling do |o|
294
+ o.env 'DD_PROFILING_FORCE_ENABLE_GC'
295
+ o.type :bool
296
+ o.default false
297
+ end
298
+
299
+ # Can be used to enable/disable the Datadog::Profiling.allocation_count feature.
300
+ #
301
+ # @deprecated Use {:allocation_enabled} (outside of advanced section) instead.
302
+ option :allocation_counting_enabled do |o|
303
+ o.after_set do |_, _, precedence|
304
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
305
+ Datadog.logger.warn(
306
+ 'The profiling.advanced.allocation_counting_enabled setting has been deprecated for removal and no ' \
307
+ 'longer does anything. Please remove it from your Datadog.configure block. ' \
308
+ 'Allocation counting is now controlled by the profiling.allocation_enabled setting instead.'
309
+ )
310
+ end
311
+ end
312
+ end
313
+
314
+ # @deprecated Use {:allocation_enabled} (outside of advanced section) instead.
315
+ option :experimental_allocation_enabled do |o|
316
+ o.type :bool
317
+ o.default false
318
+ o.after_set do |_, _, precedence|
319
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
320
+ Datadog.logger.warn(
321
+ 'The profiling.advanced.experimental_allocation_enabled setting has been deprecated for removal and ' \
322
+ 'no longer does anything. Please remove it from your Datadog.configure block. ' \
323
+ 'Allocation profiling is now controlled by the profiling.allocation_enabled setting instead.'
324
+ )
325
+ end
326
+ end
327
+ end
328
+
329
+ # Can be used to enable/disable the collection of heap profiles.
330
+ #
331
+ # This feature is alpha and disabled by default
332
+ #
333
+ # @warn To enable heap profiling you are required to also enable allocation profiling.
334
+ #
335
+ # @default `DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED` environment variable as a boolean, otherwise `false`
336
+ option :experimental_heap_enabled do |o|
337
+ o.type :bool
338
+ o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED'
339
+ o.default false
340
+ end
341
+
342
+ # Can be used to enable/disable the collection of heap size profiles.
343
+ #
344
+ # This feature is alpha and enabled by default when heap profiling is enabled.
345
+ #
346
+ # @warn To enable heap size profiling you are required to also enable allocation and heap profiling.
347
+ #
348
+ # @default `DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED` environment variable as a boolean, otherwise
349
+ # whatever the value of DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED is.
350
+ option :experimental_heap_size_enabled do |o|
351
+ o.type :bool
352
+ o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED'
353
+ o.default true # This gets ANDed with experimental_heap_enabled in the profiler component.
354
+ end
355
+
356
+ # Can be used to configure the allocation sampling rate: a sample will be collected every x allocations.
357
+ #
358
+ # This feature is now controlled via {:overhead_target_percentage}
359
+ option :experimental_allocation_sample_rate do |o|
360
+ o.after_set do |_, _, precedence|
361
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
362
+ Datadog.logger.warn(
363
+ 'The profiling.advanced.experimental_allocation_sample_rate setting has been deprecated for removal ' \
364
+ 'and no longer does anything. Please remove it from your Datadog.configure block. ' \
365
+ 'Allocation sample rate is now handled by a dynamic sampler which will adjust the sampling rate to ' \
366
+ 'keep to the configured `profiling.advanced.overhead_target_percentage`.'
367
+ )
368
+ end
369
+ end
370
+ end
371
+
372
+ # Can be used to configure the heap sampling rate: a heap sample will be collected for every x allocation
373
+ # samples.
374
+ #
375
+ # The lower the value, the more accuracy in heap tracking but the bigger the overhead. In particular, a
376
+ # value of 1 will track ALL allocations samples for heap profiles.
377
+ #
378
+ # The effective heap sampling rate in terms of allocations (not allocation samples) can be calculated via
379
+ # effective_heap_sample_rate = allocation_sample_rate * heap_sample_rate.
380
+ #
381
+ # @default `DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE` environment variable, otherwise `10`.
382
+ option :experimental_heap_sample_rate do |o|
383
+ o.type :int
384
+ o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE'
385
+ o.default 10
386
+ end
387
+
388
+ # Can be used to disable checking which version of `libmysqlclient` is being used by the `mysql2` gem.
389
+ #
390
+ # This setting is only used when the `mysql2` gem is installed.
391
+ #
392
+ # @default `DD_PROFILING_SKIP_MYSQL2_CHECK` environment variable, otherwise `false`
393
+ option :skip_mysql2_check do |o|
394
+ o.type :bool
395
+ o.env 'DD_PROFILING_SKIP_MYSQL2_CHECK'
396
+ o.default false
397
+ end
398
+
399
+ # Enables data collection for the timeline feature. This is still experimental and not recommended yet.
400
+ #
401
+ # @default `DD_PROFILING_EXPERIMENTAL_TIMELINE_ENABLED` environment variable as a boolean, otherwise `false`
402
+ option :experimental_timeline_enabled do |o|
403
+ o.after_set do |_, _, precedence|
404
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
405
+ Datadog.logger.warn(
406
+ 'The profiling.advanced.experimental_timeline_enabled setting has been deprecated for removal ' \
407
+ 'and no longer does anything. Please remove it from your Datadog.configure block. ' \
408
+ 'The timeline feature counting is now controlled by the `timeline_enabled` setting instead.'
409
+ )
410
+ end
411
+ end
412
+ end
413
+
414
+ # Controls data collection for the timeline feature.
415
+ #
416
+ # If you needed to disable this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>,
417
+ # so we can fix it!
418
+ #
419
+ # @default `DD_PROFILING_TIMELINE_ENABLED` environment variable as a boolean, otherwise `true`
420
+ option :timeline_enabled do |o|
421
+ o.type :bool
422
+ o.env 'DD_PROFILING_TIMELINE_ENABLED'
423
+ o.default true
424
+ end
425
+
426
+ # The profiler gathers data by sending `SIGPROF` unix signals to Ruby application threads.
427
+ #
428
+ # Sending `SIGPROF` is a common profiling approach, and may cause system calls from native
429
+ # extensions/libraries to be interrupted with a system
430
+ # [EINTR error code.](https://man7.org/linux/man-pages/man7/signal.7.html#:~:text=Interruption%20of%20system%20calls%20and%20library%20functions%20by%20signal%20handlers)
431
+ # Rarely, native extensions or libraries called by them may have missing or incorrect error handling for the
432
+ # `EINTR` error code.
433
+ #
434
+ # The "no signals" workaround, when enabled, enables an alternative mode for the profiler where it does not
435
+ # send `SIGPROF` unix signals. The downside of this approach is that the profiler data will have lower
436
+ # quality.
437
+ #
438
+ # This workaround is automatically enabled when gems that are known to have issues handling
439
+ # `EINTR` error codes are detected. If you suspect you may be seeing an issue due to the profiler's use of
440
+ # signals, you can try manually enabling this mode as a fallback.
441
+ # Please also report these issues to us on <https://github.com/DataDog/dd-trace-rb/issues/new>, so we can
442
+ # work with the gem authors to fix them!
443
+ #
444
+ # @default `DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED` environment variable as a boolean, otherwise `:auto`
445
+ option :no_signals_workaround_enabled do |o|
446
+ o.env 'DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED'
447
+ o.default :auto
448
+ o.env_parser do |value|
449
+ if value
450
+ value = value.strip.downcase
451
+ ['true', '1'].include?(value)
452
+ end
453
+ end
454
+ end
455
+
456
+ # Configures how much wall-time overhead the profiler targets. The profiler will dynamically adjust the
457
+ # interval between samples it takes so as to try and maintain the property that it spends no longer than
458
+ # this amount of wall-clock time profiling. For example, with the default value of 2%, the profiler will
459
+ # try and cause no more than 1.2 seconds per minute of overhead. Decreasing this value will reduce the
460
+ # accuracy of the data collected. Increasing will impact the application.
461
+ #
462
+ # We do not recommend tweaking this value.
463
+ #
464
+ # This value should be a percentage i.e. a number between 0 and 100, not 0 and 1.
465
+ #
466
+ # @default `DD_PROFILING_OVERHEAD_TARGET_PERCENTAGE` as a float, otherwise 2.0
467
+ option :overhead_target_percentage do |o|
468
+ o.type :float
469
+ o.env 'DD_PROFILING_OVERHEAD_TARGET_PERCENTAGE'
470
+ o.default 2.0
471
+ end
472
+
473
+ # Controls how often the profiler reports data, in seconds. Cannot be lower than 60 seconds.
474
+ #
475
+ # We do not recommend tweaking this value.
476
+ #
477
+ # @default `DD_PROFILING_UPLOAD_PERIOD` environment variable, otherwise 60
478
+ option :upload_period_seconds do |o|
479
+ o.type :int
480
+ o.env 'DD_PROFILING_UPLOAD_PERIOD'
481
+ o.default 60
482
+ end
483
+ end
484
+
485
+ # @public_api
486
+ settings :upload do
487
+ # Network timeout for reporting profiling data to Datadog.
488
+ #
489
+ # @default `DD_PROFILING_UPLOAD_TIMEOUT` environment variable, otherwise `30.0`
490
+ option :timeout_seconds do |o|
491
+ o.type :float
492
+ o.env Profiling::Ext::ENV_UPLOAD_TIMEOUT
493
+ o.default 30.0
494
+ end
495
+ end
496
+ end
497
+
498
+ # [Runtime Metrics](https://docs.datadoghq.com/tracing/runtime_metrics/)
499
+ # are StatsD metrics collected by the tracer to gain additional insights into an application's performance.
500
+ # @public_api
501
+ settings :runtime_metrics do
502
+ # Enable runtime metrics.
503
+ # @default `DD_RUNTIME_METRICS_ENABLED` environment variable, otherwise `false`
504
+ # @return [Boolean]
505
+ option :enabled do |o|
506
+ o.env Core::Runtime::Ext::Metrics::ENV_ENABLED
507
+ o.default false
508
+ o.type :bool
509
+ end
510
+
511
+ option :opts, default: {}, type: :hash
512
+ option :statsd
513
+ end
514
+
515
+ # The `service` tag in Datadog. Use it to group related traces into a service.
516
+ # @see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging
517
+ # @default `DD_SERVICE` environment variable, otherwise the program name (e.g. `'ruby'`, `'rails'`, `'pry'`)
518
+ # @return [String]
519
+ option :service do |o|
520
+ o.type :string, nilable: true
521
+
522
+ # NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
523
+ o.env Core::Environment::Ext::ENV_SERVICE
524
+ o.default Core::Environment::Ext::FALLBACK_SERVICE_NAME
525
+
526
+ # There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
527
+ # nil instead so that one can do
528
+ # nice_service_name = Datadog.configuration.service_without_fallback || nice_service_name_default
529
+ o.helper(:service_without_fallback) do
530
+ service_name = service
531
+ service_name unless service_name.equal?(Core::Environment::Ext::FALLBACK_SERVICE_NAME)
532
+ end
533
+ end
534
+
535
+ # The Datadog site host to send data to.
536
+ # By default, data is sent to the Datadog US site: `app.datadoghq.com`.
537
+ #
538
+ # If your organization is on another site, you must update this value to the new site.
539
+ #
540
+ # For internal use only.
541
+ #
542
+ # @see https://docs.datadoghq.com/agent/troubleshooting/site/
543
+ # @default `DD_SITE` environment variable, otherwise `nil` which sends data to `app.datadoghq.com`
544
+ # @return [String,nil]
545
+ option :site do |o|
546
+ o.type :string, nilable: true
547
+ o.env Core::Environment::Ext::ENV_SITE
548
+ end
549
+
550
+ # Default tags
551
+ #
552
+ # These tags are used by all Datadog products, when applicable.
553
+ # e.g. trace spans, profiles, etc.
554
+ # @default `DD_TAGS` environment variable (in the format `'tag1:value1,tag2:value2'`), otherwise `{}`
555
+ # @return [Hash<String,String>]
556
+ option :tags do |o|
557
+ o.type :hash, nilable: true
558
+ o.env Core::Environment::Ext::ENV_TAGS
559
+ o.env_parser do |env_value|
560
+ values = if env_value.include?(',')
561
+ env_value.split(',')
562
+ else
563
+ env_value.split(' ') # rubocop:disable Style/RedundantArgument
564
+ end
565
+
566
+ values.map! do |v|
567
+ v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
568
+
569
+ v.empty? ? nil : v
570
+ end
571
+
572
+ values.compact!
573
+ values.each_with_object({}) do |tag, tags|
574
+ key, value = tag.split(':', 2)
575
+ tags[key] = value if value && !value.empty?
576
+ end
577
+ end
578
+ o.setter do |new_value, old_value|
579
+ raw_tags = new_value || {}
580
+
581
+ env_value = env
582
+ version_value = version
583
+ service_name = service_without_fallback
584
+
585
+ # Override tags if defined
586
+ raw_tags[Core::Environment::Ext::TAG_ENV] = env_value unless env_value.nil?
587
+ raw_tags[Core::Environment::Ext::TAG_VERSION] = version_value unless version_value.nil?
588
+
589
+ # Coerce keys to strings
590
+ string_tags = raw_tags.collect { |k, v| [k.to_s, v] }.to_h
591
+
592
+ # Cross-populate tag values with other settings
593
+ if env_value.nil? && string_tags.key?(Core::Environment::Ext::TAG_ENV)
594
+ self.env = string_tags[Core::Environment::Ext::TAG_ENV]
595
+ end
596
+
597
+ if version_value.nil? && string_tags.key?(Core::Environment::Ext::TAG_VERSION)
598
+ self.version = string_tags[Core::Environment::Ext::TAG_VERSION]
599
+ end
600
+
601
+ if service_name.nil? && string_tags.key?(Core::Environment::Ext::TAG_SERVICE)
602
+ self.service = string_tags[Core::Environment::Ext::TAG_SERVICE]
603
+ end
604
+
605
+ # Merge with previous tags
606
+ (old_value || {}).merge(string_tags)
607
+ end
608
+ end
609
+
610
+ # The time provider used by Datadog. It must respect the interface of [Time](https://ruby-doc.org/core-3.0.1/Time.html).
611
+ #
612
+ # When testing, it can be helpful to use a different time provider.
613
+ #
614
+ # For [Timecop](https://rubygems.org/gems/timecop), for example, `->{ Time.now_without_mock_time }`
615
+ # allows Datadog features to use the real wall time when time is frozen.
616
+ #
617
+ # @default `->{ Time.now }`
618
+ # @return [Proc<Time>]
619
+ option :time_now_provider do |o|
620
+ o.default_proc { ::Time.now }
621
+ o.type :proc
622
+
623
+ o.after_set do |time_provider|
624
+ Core::Utils::Time.now_provider = time_provider
625
+ end
626
+
627
+ o.resetter do |_value|
628
+ # TODO: Resetter needs access to the default value
629
+ # TODO: to help reduce duplication.
630
+ -> { ::Time.now }.tap do |default|
631
+ Core::Utils::Time.now_provider = default
632
+ end
633
+ end
634
+ end
635
+
636
+ # The `version` tag in Datadog. Use it to enable [Deployment Tracking](https://docs.datadoghq.com/tracing/deployment_tracking/).
637
+ # @see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging
638
+ # @default `DD_VERSION` environment variable, otherwise `nils`
639
+ # @return [String,nil]
640
+ option :version do |o|
641
+ # NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
642
+ o.type :string, nilable: true
643
+ o.env Core::Environment::Ext::ENV_VERSION
644
+ end
645
+
646
+ # Client-side telemetry configuration
647
+ # @public_api
648
+ settings :telemetry do
649
+ # Enable telemetry collection. This allows telemetry events to be emitted to the telemetry API.
650
+ #
651
+ # @default `DD_INSTRUMENTATION_TELEMETRY_ENABLED` environment variable, otherwise `true`.
652
+ # Can be disabled as documented [here](https://docs.datadoghq.com/tracing/configure_data_security/#telemetry-collection).
653
+ # By default, telemetry is disabled in development environments.
654
+ # @return [Boolean]
655
+ option :enabled do |o|
656
+ o.env Core::Telemetry::Ext::ENV_ENABLED
657
+ o.default do
658
+ if Datadog::Core::Environment::Execution.development?
659
+ Datadog.logger.debug do
660
+ 'Development environment detected, disabling Telemetry. ' \
661
+ 'You can enable it with DD_INSTRUMENTATION_TELEMETRY_ENABLED=true.'
662
+ end
663
+ false
664
+ else
665
+ true
666
+ end
667
+ end
668
+ o.type :bool
669
+ end
670
+
671
+ # The interval in seconds when telemetry must be sent.
672
+ #
673
+ # This method is used internally, for testing purposes only.
674
+ #
675
+ # @default `DD_TELEMETRY_HEARTBEAT_INTERVAL` environment variable, otherwise `60`.
676
+ # @return [Float]
677
+ # @!visibility private
678
+ option :heartbeat_interval_seconds do |o|
679
+ o.type :float
680
+ o.env Core::Telemetry::Ext::ENV_HEARTBEAT_INTERVAL
681
+ o.default 60.0
682
+ end
683
+
684
+ # The install id of the application.
685
+ #
686
+ # This method is used internally, by library injection.
687
+ #
688
+ # @default `DD_INSTRUMENTATION_INSTALL_ID` environment variable, otherwise `nil`.
689
+ # @return [String,nil]
690
+ # @!visibility private
691
+ option :install_id do |o|
692
+ o.type :string, nilable: true
693
+ o.env Core::Telemetry::Ext::ENV_INSTALL_ID
694
+ end
695
+
696
+ # The install type of the application.
697
+ #
698
+ # This method is used internally, by library injection.
699
+ #
700
+ # @default `DD_INSTRUMENTATION_INSTALL_TYPE` environment variable, otherwise `nil`.
701
+ # @return [String,nil]
702
+ # @!visibility private
703
+ option :install_type do |o|
704
+ o.type :string, nilable: true
705
+ o.env Core::Telemetry::Ext::ENV_INSTALL_TYPE
706
+ end
707
+
708
+ # The install time of the application.
709
+ #
710
+ # This method is used internally, by library injection.
711
+ #
712
+ # @default `DD_INSTRUMENTATION_INSTALL_TIME` environment variable, otherwise `nil`.
713
+ # @return [String,nil]
714
+ # @!visibility private
715
+ option :install_time do |o|
716
+ o.type :string, nilable: true
717
+ o.env Core::Telemetry::Ext::ENV_INSTALL_TIME
718
+ end
719
+ end
720
+
721
+ # Remote configuration
722
+ # @public_api
723
+ settings :remote do
724
+ # Enable remote configuration. This allows fetching of remote configuration for live updates.
725
+ #
726
+ # @default `DD_REMOTE_CONFIGURATION_ENABLED` environment variable, otherwise `true`.
727
+ # By default, remote configuration is disabled in development environments.
728
+ # @return [Boolean]
729
+ option :enabled do |o|
730
+ o.env Core::Remote::Ext::ENV_ENABLED
731
+ o.default do
732
+ if Datadog::Core::Environment::Execution.development?
733
+ Datadog.logger.debug do
734
+ 'Development environment detected, disabling Remote Configuration. ' \
735
+ 'You can enable it with DD_REMOTE_CONFIGURATION_ENABLED=true.'
736
+ end
737
+ false
738
+ else
739
+ true
740
+ end
741
+ end
742
+ o.type :bool
743
+ end
744
+
745
+ # Tune remote configuration polling interval.
746
+ # This is a private setting. Do not use outside of Datadog. It might change at any point in time.
747
+ #
748
+ # @default `DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS` environment variable, otherwise `5.0` seconds.
749
+ # @return [Float]
750
+ # @!visibility private
751
+ option :poll_interval_seconds do |o|
752
+ o.env Core::Remote::Ext::ENV_POLL_INTERVAL_SECONDS
753
+ o.type :float
754
+ o.default 5.0
755
+ end
756
+
757
+ # Tune remote configuration boot timeout.
758
+ # Early operations such as requests are blocked until RC is ready. In
759
+ # order to not block the application indefinitely a timeout is
760
+ # enforced allowing requests to proceed with the local configuration.
761
+ #
762
+ # @default `DD_REMOTE_CONFIG_BOOT_TIMEOUT` environment variable, otherwise `1.0` seconds.
763
+ # @return [Float]
764
+ option :boot_timeout_seconds do |o|
765
+ o.env Core::Remote::Ext::ENV_BOOT_TIMEOUT_SECONDS
766
+ o.type :float
767
+ o.default 1.0
768
+ end
769
+
770
+ # Declare service name to bind to remote configuration. Use when
771
+ # DD_SERVICE does not match the correct integration for which remote
772
+ # configuration applies.
773
+ #
774
+ # @default `nil`.
775
+ # @return [String,nil]
776
+ option :service
777
+ end
778
+
779
+ # TODO: Tracing should manage its own settings.
780
+ # Keep this extension here for now to keep things working.
781
+ extend Datadog::Tracing::Configuration::Settings
782
+ end
783
+ # rubocop:enable Metrics/BlockLength
784
+ end
785
+ end
786
+ end