datadog 2.7.1 → 2.17.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 (417) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +310 -1
  3. data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
  5. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
  8. data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
  9. data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
  10. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
  11. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
  12. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  13. data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
  14. data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
  15. data/ext/datadog_profiling_native_extension/extconf.rb +7 -8
  16. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
  17. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
  18. data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
  19. data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
  20. data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
  21. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
  23. data/ext/datadog_profiling_native_extension/profiling.c +19 -8
  24. data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
  25. data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
  26. data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
  27. data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
  28. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
  29. data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
  30. data/ext/libdatadog_api/crashtracker.c +17 -15
  31. data/ext/libdatadog_api/crashtracker.h +5 -0
  32. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  33. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  34. data/ext/libdatadog_api/init.c +15 -0
  35. data/ext/libdatadog_api/library_config.c +122 -0
  36. data/ext/libdatadog_api/library_config.h +19 -0
  37. data/ext/libdatadog_api/macos_development.md +3 -3
  38. data/ext/libdatadog_api/process_discovery.c +117 -0
  39. data/ext/libdatadog_api/process_discovery.h +5 -0
  40. data/ext/libdatadog_extconf_helpers.rb +1 -1
  41. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  42. data/lib/datadog/appsec/actions_handler.rb +49 -0
  43. data/lib/datadog/appsec/anonymizer.rb +16 -0
  44. data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
  45. data/lib/datadog/appsec/api_security.rb +9 -0
  46. data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
  47. data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
  48. data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
  49. data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
  50. data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
  51. data/lib/datadog/appsec/autoload.rb +1 -1
  52. data/lib/datadog/appsec/component.rb +41 -33
  53. data/lib/datadog/appsec/compressed_json.rb +40 -0
  54. data/lib/datadog/appsec/configuration/settings.rb +152 -25
  55. data/lib/datadog/appsec/context.rb +74 -0
  56. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
  57. data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
  58. data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
  59. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  60. data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
  61. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  62. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  63. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  64. data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
  65. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
  66. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
  67. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
  68. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  69. data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
  70. data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
  71. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
  72. data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
  73. data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
  74. data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
  75. data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
  76. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
  77. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
  78. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
  79. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  80. data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
  81. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  82. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
  83. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
  84. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  85. data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
  86. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
  87. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
  88. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
  89. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  90. data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
  91. data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
  92. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
  93. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
  94. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
  95. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  96. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
  97. data/lib/datadog/appsec/event.rb +96 -135
  98. data/lib/datadog/appsec/ext.rb +12 -3
  99. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
  100. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  101. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  102. data/lib/datadog/appsec/metrics/collector.rb +38 -0
  103. data/lib/datadog/appsec/metrics/exporter.rb +35 -0
  104. data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
  105. data/lib/datadog/appsec/metrics.rb +13 -0
  106. data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
  107. data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
  108. data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
  109. data/lib/datadog/appsec/processor.rb +5 -4
  110. data/lib/datadog/appsec/remote.rb +26 -12
  111. data/lib/datadog/appsec/response.rb +19 -85
  112. data/lib/datadog/appsec/security_engine/result.rb +67 -0
  113. data/lib/datadog/appsec/security_engine/runner.rb +88 -0
  114. data/lib/datadog/appsec/security_engine.rb +9 -0
  115. data/lib/datadog/appsec/security_event.rb +39 -0
  116. data/lib/datadog/appsec/utils.rb +0 -2
  117. data/lib/datadog/appsec.rb +23 -10
  118. data/lib/datadog/auto_instrument.rb +3 -0
  119. data/lib/datadog/core/buffer/random.rb +18 -2
  120. data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
  121. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  122. data/lib/datadog/core/configuration/components.rb +76 -32
  123. data/lib/datadog/core/configuration/components_state.rb +23 -0
  124. data/lib/datadog/core/configuration/ext.rb +5 -1
  125. data/lib/datadog/core/configuration/option.rb +79 -43
  126. data/lib/datadog/core/configuration/option_definition.rb +6 -4
  127. data/lib/datadog/core/configuration/options.rb +3 -3
  128. data/lib/datadog/core/configuration/settings.rb +100 -41
  129. data/lib/datadog/core/configuration/stable_config.rb +23 -0
  130. data/lib/datadog/core/configuration.rb +43 -11
  131. data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
  132. data/lib/datadog/core/crashtracking/component.rb +4 -13
  133. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  134. data/lib/datadog/core/encoding.rb +17 -1
  135. data/lib/datadog/core/environment/agent_info.rb +78 -0
  136. data/lib/datadog/core/environment/cgroup.rb +10 -12
  137. data/lib/datadog/core/environment/container.rb +38 -40
  138. data/lib/datadog/core/environment/ext.rb +6 -6
  139. data/lib/datadog/core/environment/git.rb +1 -0
  140. data/lib/datadog/core/environment/identity.rb +3 -3
  141. data/lib/datadog/core/environment/platform.rb +3 -3
  142. data/lib/datadog/core/environment/variable_helpers.rb +1 -1
  143. data/lib/datadog/core/error.rb +11 -9
  144. data/lib/datadog/core/logger.rb +2 -2
  145. data/lib/datadog/core/metrics/client.rb +27 -27
  146. data/lib/datadog/core/metrics/logging.rb +5 -5
  147. data/lib/datadog/core/process_discovery.rb +32 -0
  148. data/lib/datadog/core/rate_limiter.rb +4 -2
  149. data/lib/datadog/core/remote/client/capabilities.rb +6 -0
  150. data/lib/datadog/core/remote/client.rb +107 -92
  151. data/lib/datadog/core/remote/component.rb +18 -19
  152. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  153. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  154. data/lib/datadog/core/remote/configuration/repository.rb +2 -1
  155. data/lib/datadog/core/remote/negotiation.rb +9 -9
  156. data/lib/datadog/core/remote/transport/config.rb +4 -3
  157. data/lib/datadog/core/remote/transport/http/api.rb +13 -18
  158. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  159. data/lib/datadog/core/remote/transport/http/config.rb +27 -55
  160. data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
  161. data/lib/datadog/core/remote/transport/http.rb +25 -94
  162. data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
  163. data/lib/datadog/core/remote/worker.rb +10 -7
  164. data/lib/datadog/core/runtime/metrics.rb +12 -5
  165. data/lib/datadog/core/telemetry/component.rb +84 -49
  166. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  167. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
  168. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  169. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  170. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  171. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  172. data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
  173. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  174. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  175. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  176. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  177. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  178. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  179. data/lib/datadog/core/telemetry/event.rb +17 -383
  180. data/lib/datadog/core/telemetry/ext.rb +1 -0
  181. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  182. data/lib/datadog/core/telemetry/logger.rb +1 -1
  183. data/lib/datadog/core/telemetry/logging.rb +2 -2
  184. data/lib/datadog/core/telemetry/metric.rb +28 -6
  185. data/lib/datadog/core/telemetry/request.rb +4 -4
  186. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  187. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  188. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  189. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  190. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  191. data/lib/datadog/core/telemetry/worker.rb +128 -25
  192. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  193. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
  194. data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
  195. data/lib/datadog/core/transport/http/api/spec.rb +36 -0
  196. data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
  197. data/lib/datadog/core/transport/http.rb +75 -0
  198. data/lib/datadog/core/transport/response.rb +4 -0
  199. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  200. data/lib/datadog/core/utils/duration.rb +32 -32
  201. data/lib/datadog/core/utils/forking.rb +2 -2
  202. data/lib/datadog/core/utils/network.rb +6 -6
  203. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  204. data/lib/datadog/core/utils/time.rb +20 -0
  205. data/lib/datadog/core/utils/truncation.rb +21 -0
  206. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  207. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  208. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  209. data/lib/datadog/core/worker.rb +1 -1
  210. data/lib/datadog/core/workers/async.rb +29 -12
  211. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  212. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  213. data/lib/datadog/core.rb +8 -0
  214. data/lib/datadog/di/base.rb +115 -0
  215. data/lib/datadog/di/boot.rb +34 -0
  216. data/lib/datadog/di/code_tracker.rb +26 -15
  217. data/lib/datadog/di/component.rb +23 -14
  218. data/lib/datadog/di/configuration/settings.rb +25 -1
  219. data/lib/datadog/di/contrib/active_record.rb +1 -0
  220. data/lib/datadog/di/contrib/railtie.rb +15 -0
  221. data/lib/datadog/di/contrib.rb +28 -0
  222. data/lib/datadog/di/error.rb +5 -0
  223. data/lib/datadog/di/instrumenter.rb +111 -20
  224. data/lib/datadog/di/logger.rb +30 -0
  225. data/lib/datadog/di/preload.rb +18 -0
  226. data/lib/datadog/di/probe.rb +14 -7
  227. data/lib/datadog/di/probe_builder.rb +1 -0
  228. data/lib/datadog/di/probe_manager.rb +11 -5
  229. data/lib/datadog/di/probe_notification_builder.rb +34 -8
  230. data/lib/datadog/di/probe_notifier_worker.rb +52 -26
  231. data/lib/datadog/di/redactor.rb +0 -1
  232. data/lib/datadog/di/remote.rb +147 -0
  233. data/lib/datadog/di/serializer.rb +14 -7
  234. data/lib/datadog/di/transport/diagnostics.rb +62 -0
  235. data/lib/datadog/di/transport/http/api.rb +42 -0
  236. data/lib/datadog/di/transport/http/client.rb +47 -0
  237. data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
  238. data/lib/datadog/di/transport/http/input.rb +67 -0
  239. data/lib/datadog/di/transport/http.rb +57 -0
  240. data/lib/datadog/di/transport/input.rb +62 -0
  241. data/lib/datadog/di/utils.rb +103 -0
  242. data/lib/datadog/di.rb +14 -76
  243. data/lib/datadog/error_tracking/collector.rb +87 -0
  244. data/lib/datadog/error_tracking/component.rb +167 -0
  245. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  246. data/lib/datadog/error_tracking/configuration.rb +11 -0
  247. data/lib/datadog/error_tracking/ext.rb +18 -0
  248. data/lib/datadog/error_tracking/extensions.rb +16 -0
  249. data/lib/datadog/error_tracking/filters.rb +77 -0
  250. data/lib/datadog/error_tracking.rb +18 -0
  251. data/lib/datadog/kit/appsec/events.rb +15 -3
  252. data/lib/datadog/kit/identity.rb +9 -5
  253. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  254. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  255. data/lib/datadog/opentelemetry/api/context.rb +16 -2
  256. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  257. data/lib/datadog/opentelemetry.rb +2 -1
  258. data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
  259. data/lib/datadog/profiling/collectors/info.rb +3 -0
  260. data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
  261. data/lib/datadog/profiling/component.rb +60 -76
  262. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  263. data/lib/datadog/profiling/exporter.rb +3 -4
  264. data/lib/datadog/profiling/ext.rb +0 -2
  265. data/lib/datadog/profiling/flush.rb +5 -8
  266. data/lib/datadog/profiling/http_transport.rb +6 -85
  267. data/lib/datadog/profiling/load_native_extension.rb +1 -33
  268. data/lib/datadog/profiling/scheduler.rb +8 -1
  269. data/lib/datadog/profiling/stack_recorder.rb +4 -4
  270. data/lib/datadog/profiling/tag_builder.rb +1 -5
  271. data/lib/datadog/profiling.rb +6 -2
  272. data/lib/datadog/tracing/analytics.rb +1 -1
  273. data/lib/datadog/tracing/component.rb +16 -12
  274. data/lib/datadog/tracing/configuration/ext.rb +8 -1
  275. data/lib/datadog/tracing/configuration/settings.rb +22 -10
  276. data/lib/datadog/tracing/context_provider.rb +1 -1
  277. data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
  278. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
  279. data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
  280. data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
  281. data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
  282. data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
  283. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
  284. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
  285. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  286. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
  287. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
  288. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
  289. data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
  290. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
  291. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
  292. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
  293. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
  294. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  295. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
  296. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
  297. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
  298. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
  299. data/lib/datadog/tracing/contrib/ext.rb +1 -0
  300. data/lib/datadog/tracing/contrib/extensions.rb +29 -3
  301. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
  302. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
  303. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
  304. data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
  305. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
  306. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
  307. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  308. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  309. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  310. data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
  311. data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
  312. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
  313. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
  314. data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
  315. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
  316. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  317. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  318. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  319. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  320. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  321. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  322. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  323. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
  324. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  325. data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
  326. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
  327. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  328. data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
  329. data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
  330. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
  331. data/lib/datadog/tracing/contrib/patcher.rb +5 -2
  332. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
  333. data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
  334. data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
  335. data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
  336. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
  337. data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
  338. data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
  339. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
  340. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
  341. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  342. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  343. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
  344. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
  345. data/lib/datadog/tracing/contrib/support.rb +28 -0
  346. data/lib/datadog/tracing/contrib.rb +1 -0
  347. data/lib/datadog/tracing/correlation.rb +9 -2
  348. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  349. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  350. data/lib/datadog/tracing/distributed/baggage.rb +131 -0
  351. data/lib/datadog/tracing/distributed/datadog.rb +4 -2
  352. data/lib/datadog/tracing/distributed/propagation.rb +25 -4
  353. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  354. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  355. data/lib/datadog/tracing/metadata/ext.rb +5 -0
  356. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  357. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  358. data/lib/datadog/tracing/metadata.rb +2 -0
  359. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  360. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  361. data/lib/datadog/tracing/span.rb +22 -5
  362. data/lib/datadog/tracing/span_event.rb +124 -4
  363. data/lib/datadog/tracing/span_operation.rb +52 -16
  364. data/lib/datadog/tracing/sync_writer.rb +9 -5
  365. data/lib/datadog/tracing/trace_digest.rb +9 -2
  366. data/lib/datadog/tracing/trace_operation.rb +44 -24
  367. data/lib/datadog/tracing/trace_segment.rb +6 -4
  368. data/lib/datadog/tracing/tracer.rb +60 -12
  369. data/lib/datadog/tracing/transport/http/api.rb +5 -4
  370. data/lib/datadog/tracing/transport/http/client.rb +5 -4
  371. data/lib/datadog/tracing/transport/http/traces.rb +13 -44
  372. data/lib/datadog/tracing/transport/http.rb +13 -70
  373. data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
  374. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  375. data/lib/datadog/tracing/transport/traces.rb +47 -13
  376. data/lib/datadog/tracing/utils.rb +1 -1
  377. data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
  378. data/lib/datadog/tracing/workers.rb +5 -4
  379. data/lib/datadog/tracing/writer.rb +10 -6
  380. data/lib/datadog/tracing.rb +16 -3
  381. data/lib/datadog/version.rb +2 -2
  382. data/lib/datadog.rb +2 -0
  383. metadata +143 -50
  384. data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
  385. data/ext/datadog_profiling_loader/extconf.rb +0 -60
  386. data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
  387. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
  388. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
  389. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  390. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  391. data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
  392. data/lib/datadog/appsec/contrib/patcher.rb +0 -12
  393. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
  394. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
  395. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
  396. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
  397. data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
  398. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
  399. data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
  400. data/lib/datadog/appsec/processor/actions.rb +0 -49
  401. data/lib/datadog/appsec/processor/context.rb +0 -107
  402. data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
  403. data/lib/datadog/appsec/reactive/engine.rb +0 -47
  404. data/lib/datadog/appsec/reactive/operation.rb +0 -68
  405. data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
  406. data/lib/datadog/appsec/scope.rb +0 -58
  407. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  408. data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
  409. data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
  410. data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
  411. data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
  412. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  413. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  414. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  415. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
  416. data/lib/datadog/di/transport.rb +0 -81
  417. data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module Datadog
6
+ module Core
7
+ module Telemetry
8
+ module Event
9
+ # Telemetry class for the 'generate-metrics' event
10
+ class GenerateMetrics < Base
11
+ attr_reader :namespace, :metric_series
12
+
13
+ def type
14
+ 'generate-metrics'
15
+ end
16
+
17
+ def initialize(namespace, metric_series)
18
+ super()
19
+ @namespace = namespace
20
+ @metric_series = metric_series
21
+ end
22
+
23
+ def payload
24
+ {
25
+ namespace: @namespace,
26
+ series: @metric_series.map(&:to_h)
27
+ }
28
+ end
29
+
30
+ def ==(other)
31
+ other.is_a?(GenerateMetrics) && other.namespace == @namespace && other.metric_series == @metric_series
32
+ end
33
+
34
+ alias_method :eql?, :==
35
+
36
+ def hash
37
+ [self.class, @namespace, @metric_series].hash
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module Datadog
6
+ module Core
7
+ module Telemetry
8
+ module Event
9
+ # Telemetry class for the 'logs' event.
10
+ # Logs with the same content are deduplicated at flush time.
11
+ class Log < Base
12
+ LEVELS = {
13
+ error: 'ERROR',
14
+ warn: 'WARN',
15
+ }.freeze
16
+
17
+ LEVELS_STRING = LEVELS.values.freeze
18
+
19
+ attr_reader :message, :level, :stack_trace, :count
20
+
21
+ def type
22
+ 'logs'
23
+ end
24
+
25
+ # @param message [String] the log message
26
+ # @param level [Symbol, String] the log level. Either :error, :warn, 'ERROR', or 'WARN'.
27
+ # @param stack_trace [String, nil] the stack trace
28
+ # @param count [Integer] the number of times the log was emitted. Used for deduplication.
29
+ def initialize(message:, level:, stack_trace: nil, count: 1)
30
+ super()
31
+ @message = message
32
+ @stack_trace = stack_trace
33
+
34
+ if level.is_a?(String) && LEVELS_STRING.include?(level)
35
+ # String level is used during object copy for deduplication
36
+ @level = level
37
+ elsif level.is_a?(Symbol)
38
+ # Symbol level is used by the regular log emitter user
39
+ @level = LEVELS.fetch(level) { |k| raise ArgumentError, "Invalid log level :#{k}" }
40
+ else
41
+ raise ArgumentError, "Invalid log level #{level}"
42
+ end
43
+
44
+ @count = count
45
+ end
46
+
47
+ def payload
48
+ {
49
+ logs: [
50
+ {
51
+ message: @message,
52
+ level: @level,
53
+ stack_trace: @stack_trace,
54
+ count: @count,
55
+ }.compact
56
+ ]
57
+ }
58
+ end
59
+
60
+ # override equality to allow for deduplication
61
+ def ==(other)
62
+ other.is_a?(Log) &&
63
+ other.message == @message &&
64
+ other.level == @level && other.stack_trace == @stack_trace && other.count == @count
65
+ end
66
+
67
+ alias_method :eql?, :==
68
+
69
+ def hash
70
+ [self.class, @message, @level, @stack_trace, @count].hash
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Core
5
+ module Telemetry
6
+ module Event
7
+ # Telemetry class for the 'message-batch' event.
8
+ class MessageBatch < Base
9
+ attr_reader :events
10
+
11
+ def type
12
+ 'message-batch'
13
+ end
14
+
15
+ def initialize(events)
16
+ super()
17
+ @events = events
18
+ end
19
+
20
+ def payload
21
+ @events.map do |event|
22
+ {
23
+ request_type: event.type,
24
+ payload: event.payload,
25
+ }
26
+ end
27
+ end
28
+
29
+ def ==(other)
30
+ other.is_a?(MessageBatch) && other.events == @events
31
+ end
32
+
33
+ alias_method :eql?, :==
34
+
35
+ def hash
36
+ [self.class, @events].hash
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module Datadog
6
+ module Core
7
+ module Telemetry
8
+ module Event
9
+ # app-client-configuration-change event emitted instead of
10
+ # app-started event for telemetry startups other than the initial
11
+ # one in a process.
12
+ #
13
+ # dd-trace-rb generally creates a new component tree whenever
14
+ # the tracer is reconfigured via Datadog.configure (with some
15
+ # components potentially reused, if their configuration has not
16
+ # changed). Telemetry system tests on the other hand expect there
17
+ # to be one "tracer" per process, and do not permit multiple
18
+ # app-started events to be emitted.
19
+ #
20
+ # To resolve this conflict, we replace second and onward app-started
21
+ # events with app-client-configuration-change events.
22
+ # To avoid diffing configuration, we send all parameters that are
23
+ # sent in app-started event.
24
+ #
25
+ # It's a "quick fix" on top of a not-so-quick fix that omitted
26
+ # second and subsequent app-started (and app-closing) events in the
27
+ # first place, and only works with the existing hackery of app-started
28
+ # and app-closing events.
29
+ class SynthAppClientConfigurationChange < AppStarted
30
+ def type
31
+ 'app-client-configuration-change'
32
+ end
33
+
34
+ def payload
35
+ {
36
+ configuration: configuration,
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -6,8 +6,10 @@ require_relative '../utils/sequence'
6
6
  module Datadog
7
7
  module Core
8
8
  module Telemetry
9
- # Collection of telemetry events
10
- class Event
9
+ # Collection of telemetry events.
10
+ #
11
+ # @api private
12
+ module Event
11
13
  extend Core::Utils::Forking
12
14
 
13
15
  # returns sequence that increments every time the configuration changes
@@ -15,388 +17,20 @@ module Datadog
15
17
  after_fork! { @sequence = Datadog::Core::Utils::Sequence.new(1) }
16
18
  @sequence ||= Datadog::Core::Utils::Sequence.new(1)
17
19
  end
18
-
19
- # Base class for all Telemetry V2 events.
20
- class Base
21
- # The type of the event.
22
- # It must be one of the stings defined in the Telemetry V2
23
- # specification for event names.
24
- def type
25
- raise NotImplementedError, 'Must be implemented by subclass'
26
- end
27
-
28
- # The JSON payload for the event.
29
- def payload
30
- {}
31
- end
32
- end
33
-
34
- # Telemetry class for the 'app-started' event
35
- class AppStarted < Base
36
- def type
37
- 'app-started'
38
- end
39
-
40
- def payload
41
- {
42
- products: products,
43
- configuration: configuration,
44
- install_signature: install_signature,
45
- # DEV: Not implemented yet
46
- # error: error, # Start-up errors
47
- }
48
- end
49
-
50
- private
51
-
52
- def products
53
- # @type var products: Hash[Symbol, Hash[Symbol, Object]]
54
- products = {
55
- appsec: {
56
- enabled: Datadog::AppSec.enabled?,
57
- },
58
- profiler: {
59
- enabled: Datadog::Profiling.enabled?,
60
- },
61
- # DEV: Not implemented yet
62
- # dynamic_instrumentation: {
63
- # enabled: true,
64
- # }
65
- }
66
-
67
- if (unsupported_reason = Datadog::Profiling.unsupported_reason)
68
- products[:profiler][:error] = {
69
- code: 1, # Error code. 0 if no error.
70
- message: unsupported_reason,
71
- }
72
- end
73
-
74
- products
75
- end
76
-
77
- TARGET_OPTIONS = %w[
78
- logger.level
79
- profiling.advanced.code_provenance_enabled
80
- profiling.advanced.endpoint.collection.enabled
81
- profiling.enabled
82
- runtime_metrics.enabled
83
- tracing.analytics.enabled
84
- tracing.propagation_style_extract
85
- tracing.propagation_style_inject
86
- tracing.enabled
87
- tracing.log_injection
88
- tracing.partial_flush.enabled
89
- tracing.partial_flush.min_spans_threshold
90
- tracing.report_hostname
91
- tracing.sampling.rate_limit
92
- ].freeze
93
-
94
- # rubocop:disable Metrics/AbcSize
95
- # rubocop:disable Metrics/MethodLength
96
- def configuration
97
- config = Datadog.configuration
98
- seq_id = Event.configuration_sequence.next
99
-
100
- list = [
101
- conf_value('DD_AGENT_HOST', config.agent.host, seq_id),
102
- conf_value('DD_AGENT_TRANSPORT', agent_transport(config), seq_id),
103
- conf_value('DD_TRACE_SAMPLE_RATE', to_value(config.tracing.sampling.default_rate), seq_id),
104
- conf_value(
105
- 'DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED',
106
- config.tracing.contrib.global_default_service_name.enabled,
107
- seq_id
108
- ),
109
- ]
110
-
111
- peer_service_mapping_str = ''
112
- unless config.tracing.contrib.peer_service_mapping.empty?
113
- peer_service_mapping = config.tracing.contrib.peer_service_mapping
114
- peer_service_mapping_str = peer_service_mapping.map { |key, value| "#{key}:#{value}" }.join(',')
115
- end
116
- list << conf_value('DD_TRACE_PEER_SERVICE_MAPPING', peer_service_mapping_str, seq_id)
117
-
118
- # Whitelist of configuration options to send in additional payload object
119
- TARGET_OPTIONS.each do |option|
120
- split_option = option.split('.')
121
- list << conf_value(option, to_value(config.dig(*split_option)), seq_id)
122
- end
123
-
124
- # Add some more custom additional payload values here
125
- list.push(
126
- conf_value('tracing.auto_instrument.enabled', !defined?(Datadog::AutoInstrument::LOADED).nil?, seq_id),
127
- conf_value(
128
- 'tracing.writer_options.buffer_size',
129
- to_value(config.tracing.writer_options[:buffer_size]),
130
- seq_id
131
- ),
132
- conf_value(
133
- 'tracing.writer_options.flush_interval',
134
- to_value(config.tracing.writer_options[:flush_interval]),
135
- seq_id
136
- ),
137
- conf_value(
138
- 'tracing.opentelemetry.enabled',
139
- !defined?(Datadog::OpenTelemetry::LOADED).nil?,
140
- seq_id
141
- ),
142
- )
143
- list << conf_value('logger.instance', config.logger.instance.class.to_s, seq_id) if config.logger.instance
144
- if config.respond_to?('appsec')
145
- list << conf_value('appsec.enabled', config.dig('appsec', 'enabled'), seq_id)
146
- list << conf_value('appsec.sca_enabled', config.dig('appsec', 'sca_enabled'), seq_id)
147
- end
148
- list << conf_value('ci.enabled', config.dig('ci', 'enabled'), seq_id) if config.respond_to?('ci')
149
-
150
- list.reject! { |entry| entry[:value].nil? }
151
- list
152
- end
153
- # rubocop:enable Metrics/AbcSize
154
- # rubocop:enable Metrics/MethodLength
155
-
156
- def agent_transport(config)
157
- adapter = Core::Configuration::AgentSettingsResolver.call(config).adapter
158
- if adapter == Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
159
- 'UDS'
160
- else
161
- 'TCP'
162
- end
163
- end
164
-
165
- def conf_value(name, value, seq_id, origin = 'code')
166
- {
167
- name: name,
168
- value: value,
169
- origin: origin,
170
- seq_id: seq_id,
171
- }
172
- end
173
-
174
- def to_value(value)
175
- # TODO: Add float if telemetry starts accepting it
176
- case value
177
- when Integer, String, true, false, nil
178
- value
179
- else
180
- value.to_s
181
- end
182
- end
183
-
184
- def install_signature
185
- config = Datadog.configuration
186
- {
187
- install_id: config.dig('telemetry', 'install_id'),
188
- install_type: config.dig('telemetry', 'install_type'),
189
- install_time: config.dig('telemetry', 'install_time'),
190
- }
191
- end
192
- end
193
-
194
- # Telemetry class for the 'app-dependencies-loaded' event
195
- class AppDependenciesLoaded < Base
196
- def type
197
- 'app-dependencies-loaded'
198
- end
199
-
200
- def payload
201
- { dependencies: dependencies }
202
- end
203
-
204
- private
205
-
206
- def dependencies
207
- Gem.loaded_specs.collect do |name, gem|
208
- {
209
- name: name,
210
- version: gem.version.to_s,
211
- # hash: nil,
212
- }
213
- end
214
- end
215
- end
216
-
217
- # Telemetry class for the 'app-integrations-change' event
218
- class AppIntegrationsChange < Base
219
- def type
220
- 'app-integrations-change'
221
- end
222
-
223
- def payload
224
- { integrations: integrations }
225
- end
226
-
227
- private
228
-
229
- def integrations
230
- instrumented_integrations = Datadog.configuration.tracing.instrumented_integrations
231
- Datadog.registry.map do |integration|
232
- is_instrumented = instrumented_integrations.include?(integration.name)
233
-
234
- is_enabled = is_instrumented ? !!integration.klass.patcher.patch_successful : false
235
-
236
- version = integration.klass.class.version ? integration.klass.class.version.to_s : nil
237
-
238
- res = {
239
- name: integration.name.to_s,
240
- enabled: is_enabled,
241
- version: version,
242
- compatible: integration.klass.class.compatible?,
243
- error: (patch_error(integration) if is_instrumented && !is_enabled),
244
- # TODO: Track if integration is instrumented by manual configuration or by auto instrumentation
245
- # auto_enabled: is_enabled && ???,
246
- }
247
- res.reject! { |_, v| v.nil? }
248
- res
249
- end
250
- end
251
-
252
- def patch_error(integration)
253
- patch_error_result = integration.klass.patcher.patch_error_result
254
- return patch_error_result.compact.to_s if patch_error_result
255
-
256
- # If no error occurred during patching, but integration is still not instrumented
257
- "Available?: #{integration.klass.class.available?}" \
258
- ", Loaded? #{integration.klass.class.loaded?}" \
259
- ", Compatible? #{integration.klass.class.compatible?}" \
260
- ", Patchable? #{integration.klass.class.patchable?}"
261
- end
262
- end
263
-
264
- # Telemetry class for the 'app-client-configuration-change' event
265
- class AppClientConfigurationChange < Base
266
- def type
267
- 'app-client-configuration-change'
268
- end
269
-
270
- def initialize(changes, origin)
271
- super()
272
- @changes = changes
273
- @origin = origin
274
- end
275
-
276
- def payload
277
- { configuration: configuration }
278
- end
279
-
280
- def configuration
281
- config = Datadog.configuration
282
- seq_id = Event.configuration_sequence.next
283
-
284
- res = @changes.map do |name, value|
285
- {
286
- name: name,
287
- value: value,
288
- origin: @origin,
289
- seq_id: seq_id,
290
- }
291
- end
292
-
293
- unless config.dig('appsec', 'sca_enabled').nil?
294
- res << {
295
- name: 'appsec.sca_enabled',
296
- value: config.appsec.sca_enabled,
297
- origin: 'code',
298
- seq_id: seq_id,
299
- }
300
- end
301
-
302
- res
303
- end
304
- end
305
-
306
- # Telemetry class for the 'app-heartbeat' event
307
- class AppHeartbeat < Base
308
- def type
309
- 'app-heartbeat'
310
- end
311
- end
312
-
313
- # Telemetry class for the 'app-closing' event
314
- class AppClosing < Base
315
- def type
316
- 'app-closing'
317
- end
318
- end
319
-
320
- # Telemetry class for the 'generate-metrics' event
321
- class GenerateMetrics < Base
322
- def type
323
- 'generate-metrics'
324
- end
325
-
326
- def initialize(namespace, metric_series)
327
- super()
328
- @namespace = namespace
329
- @metric_series = metric_series
330
- end
331
-
332
- def payload
333
- {
334
- namespace: @namespace,
335
- series: @metric_series.map(&:to_h)
336
- }
337
- end
338
- end
339
-
340
- # Telemetry class for the 'logs' event
341
- class Log < Base
342
- LEVELS = {
343
- error: 'ERROR',
344
- warn: 'WARN',
345
- }.freeze
346
-
347
- def type
348
- 'logs'
349
- end
350
-
351
- def initialize(message:, level:, stack_trace: nil)
352
- super()
353
- @message = message
354
- @stack_trace = stack_trace
355
- @level = LEVELS.fetch(level) { |k| raise ArgumentError, "Invalid log level :#{k}" }
356
- end
357
-
358
- def payload
359
- {
360
- logs: [
361
- {
362
- message: @message,
363
- level: @level,
364
- stack_trace: @stack_trace,
365
- }.compact
366
- ]
367
- }
368
- end
369
- end
370
-
371
- # Telemetry class for the 'distributions' event
372
- class Distributions < GenerateMetrics
373
- def type
374
- 'distributions'
375
- end
376
- end
377
-
378
- # Telemetry class for the 'message-batch' event
379
- class MessageBatch
380
- attr_reader :events
381
-
382
- def type
383
- 'message-batch'
384
- end
385
-
386
- def initialize(events)
387
- @events = events
388
- end
389
-
390
- def payload
391
- @events.map do |event|
392
- {
393
- request_type: event.type,
394
- payload: event.payload,
395
- }
396
- end
397
- end
398
- end
399
20
  end
400
21
  end
401
22
  end
402
23
  end
24
+
25
+ require_relative 'event/base'
26
+ require_relative 'event/app_client_configuration_change'
27
+ require_relative 'event/app_closing'
28
+ require_relative 'event/app_dependencies_loaded'
29
+ require_relative 'event/app_heartbeat'
30
+ require_relative 'event/app_integrations_change'
31
+ require_relative 'event/app_started'
32
+ require_relative 'event/synth_app_client_configuration_change'
33
+ require_relative 'event/generate_metrics'
34
+ require_relative 'event/distributions'
35
+ require_relative 'event/log'
36
+ require_relative 'event/message_batch'
@@ -13,6 +13,7 @@ module Datadog
13
13
  ENV_INSTALL_TYPE = 'DD_INSTRUMENTATION_INSTALL_TYPE'
14
14
  ENV_INSTALL_TIME = 'DD_INSTRUMENTATION_INSTALL_TIME'
15
15
  ENV_AGENTLESS_URL_OVERRIDE = 'DD_TELEMETRY_AGENTLESS_URL'
16
+ ENV_LOG_COLLECTION = 'DD_TELEMETRY_LOG_COLLECTION_ENABLED'
16
17
  end
17
18
  end
18
19
  end