ddtrace 1.14.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +178 -2
  3. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +3 -5
  4. data/ext/ddtrace_profiling_native_extension/clock_id.h +0 -3
  5. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +0 -22
  6. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
  7. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +41 -6
  8. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +3 -0
  9. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +76 -24
  10. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +1 -1
  11. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +207 -32
  12. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +1 -1
  13. data/ext/ddtrace_profiling_native_extension/extconf.rb +8 -2
  14. data/ext/ddtrace_profiling_native_extension/http_transport.c +26 -10
  15. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +42 -0
  16. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +6 -0
  17. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +1 -16
  18. data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
  19. data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
  20. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +17 -12
  21. data/ext/ddtrace_profiling_native_extension/profiling.c +0 -2
  22. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +74 -37
  23. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +13 -3
  24. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  25. data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
  26. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  27. data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
  28. data/lib/datadog/appsec/assets.rb +8 -0
  29. data/lib/datadog/appsec/component.rb +9 -2
  30. data/lib/datadog/appsec/configuration/settings.rb +61 -2
  31. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
  32. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +2 -7
  33. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +2 -5
  34. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +2 -5
  35. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
  36. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +23 -9
  37. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
  38. data/lib/datadog/appsec/contrib/rails/patcher.rb +9 -3
  39. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +2 -5
  40. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
  41. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
  42. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +2 -5
  43. data/lib/datadog/appsec/event.rb +106 -50
  44. data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
  45. data/lib/datadog/appsec/monitor/reactive/set_user.rb +2 -5
  46. data/lib/datadog/appsec/processor/actions.rb +49 -0
  47. data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
  48. data/lib/datadog/appsec/processor.rb +34 -6
  49. data/lib/datadog/appsec/remote.rb +4 -1
  50. data/lib/datadog/appsec/response.rb +82 -4
  51. data/lib/datadog/appsec/sample_rate.rb +21 -0
  52. data/lib/datadog/appsec.rb +2 -2
  53. data/lib/datadog/core/configuration/agent_settings_resolver.rb +29 -24
  54. data/lib/datadog/core/configuration/base.rb +1 -11
  55. data/lib/datadog/core/configuration/components.rb +7 -2
  56. data/lib/datadog/core/configuration/ext.rb +21 -0
  57. data/lib/datadog/core/configuration/option.rb +2 -4
  58. data/lib/datadog/core/configuration/option_definition.rb +17 -41
  59. data/lib/datadog/core/configuration/options.rb +5 -5
  60. data/lib/datadog/core/configuration/settings.rb +47 -45
  61. data/lib/datadog/core/environment/execution.rb +47 -9
  62. data/lib/datadog/core/environment/variable_helpers.rb +0 -69
  63. data/lib/datadog/core/error.rb +1 -0
  64. data/lib/datadog/core/git/ext.rb +2 -0
  65. data/lib/datadog/core/remote/client/capabilities.rb +1 -1
  66. data/lib/datadog/core/remote/component.rb +2 -2
  67. data/lib/datadog/core/remote/negotiation.rb +2 -2
  68. data/lib/datadog/core/remote/transport/config.rb +60 -0
  69. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  70. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  71. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  72. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  73. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  74. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  75. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  76. data/lib/datadog/core/remote/transport/http.rb +179 -0
  77. data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
  78. data/lib/datadog/core/telemetry/collector.rb +3 -2
  79. data/lib/datadog/core/telemetry/http/transport.rb +2 -1
  80. data/lib/datadog/core/transport/ext.rb +47 -0
  81. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  82. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  83. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  84. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  85. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  86. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  87. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  88. data/lib/datadog/core/transport/http/env.rb +62 -0
  89. data/lib/datadog/core/transport/http/response.rb +60 -0
  90. data/lib/datadog/core/transport/parcel.rb +22 -0
  91. data/lib/datadog/core/transport/request.rb +17 -0
  92. data/lib/datadog/core/transport/response.rb +64 -0
  93. data/lib/datadog/core/workers/polling.rb +2 -2
  94. data/lib/datadog/opentelemetry/api/context.rb +10 -3
  95. data/lib/datadog/opentelemetry/sdk/propagator.rb +2 -1
  96. data/lib/datadog/opentelemetry/sdk/span_processor.rb +14 -2
  97. data/lib/datadog/opentelemetry/sdk/trace/span.rb +68 -0
  98. data/lib/datadog/opentelemetry/trace.rb +58 -0
  99. data/lib/datadog/opentelemetry.rb +1 -0
  100. data/lib/datadog/opentracer.rb +9 -0
  101. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +12 -18
  102. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  103. data/lib/datadog/profiling/collectors/thread_context.rb +9 -1
  104. data/lib/datadog/profiling/component.rb +24 -99
  105. data/lib/datadog/profiling/ext.rb +0 -12
  106. data/lib/datadog/profiling/flush.rb +0 -3
  107. data/lib/datadog/profiling/http_transport.rb +6 -3
  108. data/lib/datadog/profiling/native_extension.rb +0 -21
  109. data/lib/datadog/profiling/profiler.rb +11 -12
  110. data/lib/datadog/profiling.rb +8 -81
  111. data/lib/datadog/tracing/component.rb +10 -4
  112. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  113. data/lib/datadog/tracing/configuration/ext.rb +4 -2
  114. data/lib/datadog/tracing/configuration/settings.rb +14 -7
  115. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +1 -1
  116. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +1 -1
  117. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +4 -0
  118. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +104 -197
  119. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
  120. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +7 -0
  121. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  122. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -0
  123. data/lib/datadog/tracing/contrib/dalli/ext.rb +7 -0
  124. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +9 -2
  125. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +1 -1
  126. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +5 -0
  127. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +5 -0
  128. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +8 -0
  129. data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -0
  130. data/lib/datadog/tracing/contrib/ext.rb +3 -0
  131. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -1
  132. data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -0
  133. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +21 -1
  134. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +11 -1
  135. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +18 -0
  136. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
  137. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +3 -3
  138. data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -0
  139. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +5 -0
  140. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +5 -0
  141. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +7 -0
  142. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +13 -3
  143. data/lib/datadog/tracing/contrib/opensearch/integration.rb +2 -2
  144. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +7 -0
  145. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +5 -0
  146. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +5 -0
  147. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  148. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +1 -1
  149. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -0
  150. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +14 -4
  151. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -4
  152. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +1 -1
  153. data/lib/datadog/tracing/contrib/redis/tags.rb +5 -0
  154. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +1 -1
  155. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -0
  156. data/lib/datadog/tracing/contrib/sequel/utils.rb +5 -0
  157. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +1 -1
  158. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +1 -1
  159. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -1
  160. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +2 -2
  161. data/lib/datadog/tracing/distributed/propagation.rb +13 -33
  162. data/lib/datadog/tracing/metadata/tagging.rb +3 -3
  163. data/lib/datadog/tracing/sync_writer.rb +3 -3
  164. data/lib/datadog/tracing/tracer.rb +2 -0
  165. data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
  166. data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
  167. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  168. data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
  169. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  170. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  171. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  172. data/lib/datadog/tracing/transport/http.rb +124 -0
  173. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  174. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  175. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  176. data/lib/datadog/tracing/transport/io.rb +30 -0
  177. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  178. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  179. data/lib/datadog/tracing/transport/trace_formatter.rb +209 -0
  180. data/lib/datadog/tracing/transport/traces.rb +224 -0
  181. data/lib/datadog/tracing/workers/trace_writer.rb +5 -3
  182. data/lib/datadog/tracing/workers.rb +3 -2
  183. data/lib/datadog/tracing/writer.rb +5 -2
  184. data/lib/ddtrace/transport/ext.rb +17 -15
  185. data/lib/ddtrace/version.rb +1 -1
  186. data/lib/ddtrace.rb +1 -1
  187. metadata +72 -96
  188. data/lib/datadog/ci/configuration/components.rb +0 -32
  189. data/lib/datadog/ci/configuration/settings.rb +0 -51
  190. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -35
  191. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -22
  192. data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
  193. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
  194. data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
  195. data/lib/datadog/ci/contrib/cucumber/patcher.rb +0 -27
  196. data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +0 -35
  197. data/lib/datadog/ci/contrib/minitest/ext.rb +0 -21
  198. data/lib/datadog/ci/contrib/minitest/integration.rb +0 -49
  199. data/lib/datadog/ci/contrib/minitest/patcher.rb +0 -27
  200. data/lib/datadog/ci/contrib/minitest/test_helper.rb +0 -68
  201. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -35
  202. data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
  203. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -21
  204. data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
  205. data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
  206. data/lib/datadog/ci/ext/app_types.rb +0 -9
  207. data/lib/datadog/ci/ext/environment.rb +0 -575
  208. data/lib/datadog/ci/ext/settings.rb +0 -10
  209. data/lib/datadog/ci/ext/test.rb +0 -35
  210. data/lib/datadog/ci/extensions.rb +0 -19
  211. data/lib/datadog/ci/flush.rb +0 -38
  212. data/lib/datadog/ci/test.rb +0 -81
  213. data/lib/datadog/ci.rb +0 -21
  214. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
  215. data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
  216. data/lib/datadog/core/configuration/option_set.rb +0 -10
  217. data/lib/datadog/core/transport/config.rb +0 -58
  218. data/lib/datadog/core/transport/http/api.rb +0 -57
  219. data/lib/datadog/core/transport/http/client.rb +0 -45
  220. data/lib/datadog/core/transport/http/config.rb +0 -278
  221. data/lib/datadog/core/transport/http/negotiation.rb +0 -144
  222. data/lib/datadog/core/transport/http.rb +0 -169
  223. data/lib/datadog/core/utils/object_set.rb +0 -43
  224. data/lib/datadog/core/utils/string_table.rb +0 -47
  225. data/lib/datadog/profiling/backtrace_location.rb +0 -34
  226. data/lib/datadog/profiling/buffer.rb +0 -43
  227. data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
  228. data/lib/datadog/profiling/encoding/profile.rb +0 -41
  229. data/lib/datadog/profiling/event.rb +0 -15
  230. data/lib/datadog/profiling/events/stack.rb +0 -82
  231. data/lib/datadog/profiling/old_recorder.rb +0 -107
  232. data/lib/datadog/profiling/pprof/builder.rb +0 -125
  233. data/lib/datadog/profiling/pprof/converter.rb +0 -102
  234. data/lib/datadog/profiling/pprof/message_set.rb +0 -16
  235. data/lib/datadog/profiling/pprof/payload.rb +0 -20
  236. data/lib/datadog/profiling/pprof/pprof.proto +0 -212
  237. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
  238. data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
  239. data/lib/datadog/profiling/pprof/string_table.rb +0 -12
  240. data/lib/datadog/profiling/pprof/template.rb +0 -118
  241. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
  242. data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
  243. data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
  244. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
  245. data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
  246. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
  247. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
  248. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
  249. data/lib/ddtrace/transport/http/api/instance.rb +0 -35
  250. data/lib/ddtrace/transport/http/api/map.rb +0 -16
  251. data/lib/ddtrace/transport/http/api/spec.rb +0 -17
  252. data/lib/ddtrace/transport/http/api.rb +0 -39
  253. data/lib/ddtrace/transport/http/builder.rb +0 -176
  254. data/lib/ddtrace/transport/http/client.rb +0 -52
  255. data/lib/ddtrace/transport/http/env.rb +0 -58
  256. data/lib/ddtrace/transport/http/response.rb +0 -58
  257. data/lib/ddtrace/transport/http/statistics.rb +0 -43
  258. data/lib/ddtrace/transport/http/traces.rb +0 -144
  259. data/lib/ddtrace/transport/http.rb +0 -117
  260. data/lib/ddtrace/transport/io/client.rb +0 -85
  261. data/lib/ddtrace/transport/io/response.rb +0 -25
  262. data/lib/ddtrace/transport/io/traces.rb +0 -99
  263. data/lib/ddtrace/transport/io.rb +0 -28
  264. data/lib/ddtrace/transport/parcel.rb +0 -20
  265. data/lib/ddtrace/transport/request.rb +0 -15
  266. data/lib/ddtrace/transport/response.rb +0 -60
  267. data/lib/ddtrace/transport/serializable_trace.rb +0 -122
  268. data/lib/ddtrace/transport/statistics.rb +0 -75
  269. data/lib/ddtrace/transport/trace_formatter.rb +0 -207
  270. data/lib/ddtrace/transport/traces.rb +0 -216
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../tracing/contrib/analytics'
4
-
5
- require_relative 'ext/app_types'
6
- require_relative 'ext/test'
7
-
8
- require 'rbconfig'
9
-
10
- module Datadog
11
- module CI
12
- # Common behavior for CI tests
13
- module Test
14
- # Creates a new span for a CI test
15
- def self.trace(span_name, options = {})
16
- span_options = {
17
- span_type: Ext::AppTypes::TYPE_TEST
18
- }.merge(options[:span_options] || {})
19
-
20
- if block_given?
21
- Tracing.trace(span_name, **span_options) do |span, trace|
22
- set_tags!(trace, span, options)
23
- yield(span, trace)
24
- end
25
- else
26
- span = Tracing.trace(span_name, **span_options)
27
- trace = Tracing.active_trace
28
- set_tags!(trace, span, options)
29
- span
30
- end
31
- end
32
-
33
- # Adds tags to a CI test span.
34
- def self.set_tags!(trace, span, tags = {})
35
- tags ||= {}
36
-
37
- # Set default tags
38
- trace.origin = Ext::Test::CONTEXT_ORIGIN if trace
39
- Datadog::Tracing::Contrib::Analytics.set_measured(span)
40
- span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::AppTypes::TYPE_TEST)
41
-
42
- # Set environment tags
43
- @environment_tags ||= Ext::Environment.tags(ENV)
44
- @environment_tags.each { |k, v| span.set_tag(k, v) }
45
-
46
- # Set contextual tags
47
- span.set_tag(Ext::Test::TAG_FRAMEWORK, tags[:framework]) if tags[:framework]
48
- span.set_tag(Ext::Test::TAG_FRAMEWORK_VERSION, tags[:framework_version]) if tags[:framework_version]
49
- span.set_tag(Ext::Test::TAG_NAME, tags[:test_name]) if tags[:test_name]
50
- span.set_tag(Ext::Test::TAG_SUITE, tags[:test_suite]) if tags[:test_suite]
51
- span.set_tag(Ext::Test::TAG_TYPE, tags[:test_type]) if tags[:test_type]
52
-
53
- set_environment_runtime_tags!(span)
54
-
55
- span
56
- end
57
-
58
- def self.passed!(span)
59
- span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::PASS)
60
- end
61
-
62
- def self.failed!(span, exception = nil)
63
- span.status = 1
64
- span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::FAIL)
65
- span.set_error(exception) unless exception.nil?
66
- end
67
-
68
- def self.skipped!(span, exception = nil)
69
- span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::SKIP)
70
- span.set_error(exception) unless exception.nil?
71
- end
72
-
73
- private_class_method def self.set_environment_runtime_tags!(span)
74
- span.set_tag(Ext::Test::TAG_OS_ARCHITECTURE, ::RbConfig::CONFIG['host_cpu'])
75
- span.set_tag(Ext::Test::TAG_OS_PLATFORM, ::RbConfig::CONFIG['host_os'])
76
- span.set_tag(Ext::Test::TAG_RUNTIME_NAME, Core::Environment::Ext::LANG_ENGINE)
77
- span.set_tag(Ext::Test::TAG_RUNTIME_VERSION, Core::Environment::Ext::ENGINE_VERSION)
78
- end
79
- end
80
- end
81
- end
data/lib/datadog/ci.rb DELETED
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'core'
4
- require_relative 'tracing'
5
- require_relative 'tracing/contrib'
6
-
7
- module Datadog
8
- # Namespace for Datadog CI instrumentation:
9
- # e.g. rspec, cucumber, etc...
10
- module CI
11
- end
12
- end
13
-
14
- # Integrations
15
- require_relative 'ci/contrib/cucumber/integration'
16
- require_relative 'ci/contrib/rspec/integration'
17
- require_relative 'ci/contrib/minitest/integration'
18
-
19
- # Extensions
20
- require_relative 'ci/extensions'
21
- Datadog::CI::Extensions.activate!
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tsort'
4
-
5
- module Datadog
6
- module Core
7
- module Configuration
8
- # Resolver performs a topological sort over the dependency graph
9
- class DependencyResolver
10
- include TSort
11
-
12
- def initialize(dependency_graph = {})
13
- @dependency_graph = dependency_graph
14
- end
15
-
16
- def tsort_each_node(&blk)
17
- @dependency_graph.each_key(&blk)
18
- end
19
-
20
- def tsort_each_child(node, &blk)
21
- @dependency_graph.fetch(node).each(&blk)
22
- end
23
-
24
- alias call tsort
25
- end
26
- end
27
- end
28
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'dependency_resolver'
4
-
5
- module Datadog
6
- module Core
7
- module Configuration
8
- # Represents a set of configuration option definitions for an integration
9
- class OptionDefinitionSet < Hash
10
- def dependency_order
11
- DependencyResolver.new(dependency_graph).call
12
- end
13
-
14
- def dependency_graph
15
- each_with_object({}) do |(name, option), graph|
16
- graph[name] = option.depends_on
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module Core
5
- module Configuration
6
- class OptionSet < Hash
7
- end
8
- end
9
- end
10
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../ddtrace/transport/request'
4
- require_relative '../../../ddtrace/transport/parcel'
5
-
6
- module Datadog
7
- module Core
8
- module Transport
9
- module Config
10
- # Data transfer object for encoded traces
11
- class EncodedParcel
12
- include Datadog::Transport::Parcel
13
-
14
- def count
15
- data.length
16
- end
17
- end
18
-
19
- # Config request
20
- class Request < Datadog::Transport::Request
21
- end
22
-
23
- # Config response
24
- module Response
25
- attr_reader :roots, :targets, :target_files, :client_configs
26
-
27
- def empty?
28
- @empty
29
- end
30
- end
31
-
32
- # Config transport
33
- class Transport
34
- attr_reader :client, :apis, :default_api, :current_api_id
35
-
36
- def initialize(apis, default_api)
37
- @apis = apis
38
-
39
- @client = HTTP::Client.new(current_api)
40
- end
41
-
42
- ##### there is only one transport! it's negotiation!
43
- def send_config(payload)
44
- json = JSON.dump(payload)
45
- parcel = EncodedParcel.new(json)
46
- request = Request.new(parcel)
47
-
48
- @client.send_config_payload(request)
49
- end
50
-
51
- def current_api
52
- @apis[HTTP::API::V7]
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../encoding'
4
-
5
- require_relative '../../../../ddtrace/transport/http/api/map'
6
-
7
- # TODO: Decouple standard transport/http/api/instance
8
- #
9
- # Separate classes are needed because transport/http/traces includes
10
- # Trace::API::Instance which closes over and uses a single spec, which is
11
- # negotiated as either /v3 or /v4 for the whole API at the spec level, but we
12
- # need an independent toplevel path at the endpoint level.
13
- #
14
- # Separate classes are needed because of `include Trace::API::Instance`.
15
- #
16
- # Below should be:
17
- # require_relative '../../../../ddtrace/transport/http/api/spec'
18
- require_relative 'api/spec'
19
-
20
- # TODO: only needed for Negotiation::API::Endpoint
21
- require_relative 'negotiation'
22
-
23
- # TODO: only needed for Config::API::Endpoint
24
- require_relative 'config'
25
-
26
- module Datadog
27
- module Core
28
- module Transport
29
- module HTTP
30
- # Namespace for API components
31
- module API
32
- # Default API versions
33
- ROOT = 'root'
34
- V7 = 'v0.7'
35
-
36
- module_function
37
-
38
- def defaults
39
- Datadog::Transport::HTTP::API::Map[
40
- ROOT => Spec.new do |s|
41
- s.info = Negotiation::API::Endpoint.new(
42
- '/info',
43
- )
44
- end,
45
- V7 => Spec.new do |s|
46
- s.config = Config::API::Endpoint.new(
47
- '/v0.7/config',
48
- Core::Encoding::JSONEncoder,
49
- )
50
- end,
51
- ]
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../../ddtrace/transport/http/env'
4
-
5
- # TODO: Decouple transport/http/client
6
- #
7
- # The standard one does `include Transport::HTTP::Statistics` and performs
8
- # stats updates, which may or may not be desirable in general.
9
-
10
- module Datadog
11
- module Core
12
- module Transport
13
- module HTTP
14
- # Routes, encodes, and sends tracer data to the trace agent via HTTP.
15
- class Client
16
- attr_reader :api
17
-
18
- def initialize(api)
19
- @api = api
20
- end
21
-
22
- def send_request(request, &block)
23
- # Build request into env
24
- env = build_env(request)
25
-
26
- # Get responses from API
27
- yield(api, env)
28
- rescue StandardError => e
29
- message =
30
- "Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
31
- "Location: #{Array(e.backtrace).first}"
32
-
33
- Datadog.logger.debug(message)
34
-
35
- Datadog::Transport::InternalErrorResponse.new(e)
36
- end
37
-
38
- def build_env(request)
39
- Datadog::Transport::HTTP::Env.new(request)
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,278 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require 'base64'
5
-
6
- require_relative '../config'
7
- require_relative 'client'
8
- require_relative '../../../../ddtrace/transport/http/response'
9
- require_relative '../../../../ddtrace/transport/http/api/endpoint'
10
-
11
- # TODO: Decouple standard transport/http/api/instance
12
- #
13
- # Separate classes are needed because transport/http/trace includes
14
- # Trace::API::Instance which closes over and uses a single spec, which is
15
- # negotiated as either /v3 or /v4 for the whole API at the spec level, but we
16
- # need an independent toplevel path at the endpoint level.
17
- #
18
- # Separate classes are needed because of `include Trace::API::Instance`.
19
- #
20
- # Below should be:
21
- # require_relative '../../../../ddtrace/transport/http/api/instance'
22
- require_relative 'api/instance'
23
- # Below should be:
24
- # require_relative '../../../../ddtrace/transport/http/api/spec'
25
- require_relative 'api/spec'
26
-
27
- module Datadog
28
- module Core
29
- module Transport
30
- module HTTP
31
- # HTTP transport behavior for remote configuration
32
- module Config
33
- # Response from HTTP transport for remote configuration
34
- class Response
35
- include Datadog::Transport::HTTP::Response
36
- include Core::Transport::Config::Response
37
-
38
- def initialize(http_response, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
39
- super(http_response)
40
-
41
- begin
42
- payload = JSON.parse(http_response.payload, symbolize_names: true)
43
- rescue JSON::ParserError => e
44
- raise ParseError.new(:roots, e)
45
- end
46
-
47
- raise TypeError.new(Hash, payload) unless payload.is_a?(Hash)
48
-
49
- @empty = true if payload.empty?
50
-
51
- # TODO: these fallbacks should be improved
52
- roots = payload[:roots] || []
53
- targets = payload[:targets] || Base64.encode64('{}').chomp
54
- target_files = payload[:target_files] || []
55
- client_configs = payload[:client_configs] || []
56
-
57
- raise TypeError.new(Array, roots) unless roots.is_a?(Array)
58
-
59
- @roots = roots.map do |root|
60
- raise TypeError.new(String, root) unless root.is_a?(String)
61
-
62
- decoded = begin
63
- Base64.strict_decode64(root) # TODO: unprocessed, don't symbolize_names
64
- rescue ArgumentError
65
- raise DecodeError.new(:roots, root)
66
- end
67
-
68
- parsed = begin
69
- JSON.parse(decoded)
70
- rescue JSON::ParserError
71
- raise ParseError.new(:roots, decoded)
72
- end
73
-
74
- # TODO: perform more processing to validate content. til then, no freeze
75
-
76
- parsed
77
- end
78
-
79
- raise TypeError.new(String, targets) unless targets.is_a?(String)
80
-
81
- @targets = begin
82
- decoded = begin
83
- Base64.strict_decode64(targets)
84
- rescue ArgumentError
85
- raise DecodeError.new(:targets, targets)
86
- end
87
-
88
- parsed = begin
89
- JSON.parse(decoded) # TODO: unprocessed, don't symbolize_names
90
- rescue JSON::ParserError
91
- raise ParseError.new(:targets, decoded)
92
- end
93
-
94
- # TODO: perform more processing to validate content. til then, no freeze
95
-
96
- parsed
97
- end
98
-
99
- raise TypeError.new(Array, target_files) unless target_files.is_a?(Array)
100
-
101
- @target_files = target_files.map do |h|
102
- raise TypeError.new(Hash, h) unless h.is_a?(Hash)
103
- raise KeyError.new(:raw) unless h.key?(:raw) # rubocop:disable Style/RaiseArgs
104
- raise KeyError.new(:path) unless h.key?(:path) # rubocop:disable Style/RaiseArgs
105
-
106
- raw = h[:raw]
107
-
108
- raise TypeError.new(String, raw) unless raw.is_a?(String)
109
-
110
- content = begin
111
- Base64.strict_decode64(raw)
112
- rescue ArgumentError
113
- raise DecodeError.new(:target_files, raw)
114
- end
115
-
116
- {
117
- path: h[:path].freeze,
118
- content: StringIO.new(content.freeze),
119
- }
120
- end.freeze
121
-
122
- @client_configs = client_configs.map do |s|
123
- raise TypeError.new(String, s) unless s.is_a?(String)
124
-
125
- s.freeze
126
- end.freeze
127
- end
128
-
129
- def inspect
130
- "#{super}, #{
131
- {
132
- roots: @roots,
133
- targets: @targets,
134
- target_files: @target_files,
135
- client_configs: @client_configs,
136
- }}"
137
- end
138
-
139
- # When an expected key is missing
140
- class KeyError < StandardError
141
- def initialize(key)
142
- message = "key not found: #{key.inspect}"
143
-
144
- super(message)
145
- end
146
- end
147
-
148
- # When an expected value type is incorrect
149
- class TypeError < StandardError
150
- def initialize(type, value)
151
- message = "not a #{type}: #{value.inspect}"
152
-
153
- super(message)
154
- end
155
- end
156
-
157
- # When value decoding fails
158
- class DecodeError < StandardError
159
- def initialize(key, value)
160
- message = "could not decode key #{key.inspect}: #{value.inspect}"
161
-
162
- super(message)
163
- end
164
- end
165
-
166
- # When value parsing fails
167
- class ParseError < StandardError
168
- def initialize(key, value)
169
- message = "could not parse key #{key.inspect}: #{value.inspect}"
170
-
171
- super(message)
172
- end
173
- end
174
- end
175
-
176
- # Extensions for HTTP client
177
- module Client
178
- def send_config_payload(request)
179
- send_request(request) do |api, env|
180
- api.send_config(env)
181
- end
182
- end
183
- end
184
-
185
- module API
186
- # Extensions for HTTP API Spec
187
- module Spec
188
- attr_reader :config
189
-
190
- def config=(endpoint)
191
- @config = endpoint
192
- end
193
-
194
- def send_config(env, &block)
195
- raise NoConfigEndpointDefinedError, self if config.nil?
196
-
197
- config.call(env, &block)
198
- end
199
-
200
- # Raised when traces sent but no traces endpoint is defined
201
- class NoConfigEndpointDefinedError < StandardError
202
- attr_reader :spec
203
-
204
- def initialize(spec)
205
- super()
206
-
207
- @spec = spec
208
- end
209
-
210
- def message
211
- 'No config endpoint is defined for API specification!'
212
- end
213
- end
214
- end
215
-
216
- # Extensions for HTTP API Instance
217
- module Instance
218
- def send_config(env)
219
- raise ConfigNotSupportedError, spec unless spec.is_a?(Config::API::Spec)
220
-
221
- spec.send_config(env) do |request_env|
222
- call(request_env)
223
- end
224
- end
225
-
226
- # Raised when traces sent to API that does not support traces
227
- class ConfigNotSupportedError < StandardError
228
- attr_reader :spec
229
-
230
- def initialize(spec)
231
- super()
232
-
233
- @spec = spec
234
- end
235
-
236
- def message
237
- 'Config not supported for this API!'
238
- end
239
- end
240
- end
241
-
242
- # Endpoint for remote configuration
243
- class Endpoint < Datadog::Transport::HTTP::API::Endpoint
244
- HEADER_CONTENT_TYPE = 'Content-Type'
245
-
246
- attr_reader :encoder
247
-
248
- def initialize(path, encoder)
249
- super(:post, path)
250
- @encoder = encoder
251
- end
252
-
253
- def call(env, &block)
254
- # Encode body & type
255
- env.headers[HEADER_CONTENT_TYPE] = encoder.content_type
256
- env.body = env.request.parcel.data
257
-
258
- # Query for response
259
- http_response = super(env, &block)
260
-
261
- response_options = {}
262
-
263
- # Build and return a response
264
- Config::Response.new(http_response, response_options)
265
- end
266
- end
267
- end
268
-
269
- # Add remote configuration behavior to transport components
270
- ###### overrides send_payload! which calls send_<endpoint>! kills any other possible endpoint!
271
- HTTP::Client.include(Config::Client)
272
- HTTP::API::Spec.include(Config::API::Spec)
273
- HTTP::API::Instance.include(Config::API::Instance)
274
- end
275
- end
276
- end
277
- end
278
- end