instana 1.217.1 → 2.1.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 (228) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/lib/instana/base.rb +4 -2
  4. data/lib/instana/instrumentation/action_cable.rb +8 -4
  5. data/lib/instana/instrumentation/action_controller.rb +2 -4
  6. data/lib/instana/instrumentation/action_mailer.rb +1 -1
  7. data/lib/instana/instrumentation/action_view.rb +4 -4
  8. data/lib/instana/instrumentation/active_job.rb +20 -5
  9. data/lib/instana/instrumentation/active_record.rb +1 -1
  10. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
  11. data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
  12. data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
  13. data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
  14. data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
  15. data/lib/instana/instrumentation/dalli.rb +1 -1
  16. data/lib/instana/instrumentation/excon.rb +2 -2
  17. data/lib/instana/instrumentation/graphql.rb +3 -3
  18. data/lib/instana/instrumentation/grpc.rb +14 -13
  19. data/lib/instana/instrumentation/mongo.rb +3 -3
  20. data/lib/instana/instrumentation/net-http.rb +5 -4
  21. data/lib/instana/instrumentation/rack.rb +36 -4
  22. data/lib/instana/instrumentation/redis.rb +1 -1
  23. data/lib/instana/instrumentation/resque.rb +10 -8
  24. data/lib/instana/instrumentation/rest-client.rb +4 -4
  25. data/lib/instana/instrumentation/sequel.rb +3 -3
  26. data/lib/instana/instrumentation/shoryuken.rb +4 -1
  27. data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
  28. data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
  29. data/lib/instana/instrumented_logger.rb +1 -1
  30. data/lib/instana/samplers/result.rb +32 -0
  31. data/lib/instana/samplers/samplers.rb +76 -0
  32. data/lib/instana/serverless.rb +4 -2
  33. data/lib/instana/setup.rb +5 -5
  34. data/lib/instana/span_filtering/condition.rb +134 -0
  35. data/lib/instana/span_filtering/configuration.rb +262 -0
  36. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  37. data/lib/instana/span_filtering.rb +62 -0
  38. data/lib/instana/trace/export.rb +36 -0
  39. data/lib/instana/{tracing → trace}/processor.rb +19 -15
  40. data/lib/instana/trace/span.rb +534 -0
  41. data/lib/instana/{tracing → trace}/span_context.rb +17 -8
  42. data/lib/instana/trace/span_kind.rb +51 -0
  43. data/lib/instana/trace/span_limits.rb +63 -0
  44. data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
  45. data/lib/instana/trace/tracer_provider.rb +198 -0
  46. data/lib/instana/trace.rb +74 -0
  47. data/lib/instana/util.rb +11 -0
  48. data/lib/instana/version.rb +1 -1
  49. metadata +89 -267
  50. data/.circleci/config.yml +0 -485
  51. data/.codeclimate.yml +0 -23
  52. data/.editorconfig +0 -10
  53. data/.fasterer.yml +0 -23
  54. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  55. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  56. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  57. data/.github/workflows/release-notification-on-slack.yml +0 -34
  58. data/.gitignore +0 -19
  59. data/.rubocop.yml +0 -34
  60. data/.rubocop_todo.yml +0 -1140
  61. data/.tekton/.currency/docs/report.md +0 -20
  62. data/.tekton/.currency/resources/requirements.txt +0 -4
  63. data/.tekton/.currency/resources/table.json +0 -100
  64. data/.tekton/.currency/scripts/generate_report.py +0 -136
  65. data/.tekton/README.md +0 -278
  66. data/.tekton/github-interceptor-secret.yaml +0 -8
  67. data/.tekton/github-pr-eventlistener.yaml +0 -104
  68. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  69. data/.tekton/github-set-status-task.yaml +0 -43
  70. data/.tekton/github-webhook-ingress.yaml +0 -20
  71. data/.tekton/pipeline.yaml +0 -571
  72. data/.tekton/pipelinerun.yaml +0 -21
  73. data/.tekton/ruby-tracer-prepuller.yaml +0 -87
  74. data/.tekton/run_unittests.sh +0 -87
  75. data/.tekton/scheduled-eventlistener.yaml +0 -108
  76. data/.tekton/task.yaml +0 -449
  77. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  78. data/Appraisals +0 -124
  79. data/CONTRIBUTING.md +0 -86
  80. data/Gemfile +0 -17
  81. data/LICENSE +0 -22
  82. data/MAINTAINERS.md +0 -3
  83. data/Rakefile +0 -49
  84. data/bin/announce_release_on_slack.py +0 -103
  85. data/docker-compose.yml +0 -20
  86. data/download.sh +0 -85
  87. data/examples/opentracing.rb +0 -35
  88. data/examples/tracing.rb +0 -84
  89. data/extras/license_header.rb +0 -44
  90. data/gemfiles/.bundle/config +0 -2
  91. data/gemfiles/aws_30.gemfile +0 -21
  92. data/gemfiles/aws_60.gemfile +0 -16
  93. data/gemfiles/cuba_30.gemfile +0 -16
  94. data/gemfiles/cuba_40.gemfile +0 -13
  95. data/gemfiles/dalli_20.gemfile +0 -15
  96. data/gemfiles/dalli_30.gemfile +0 -12
  97. data/gemfiles/dalli_32.gemfile +0 -12
  98. data/gemfiles/excon_0100.gemfile +0 -14
  99. data/gemfiles/excon_021.gemfile +0 -17
  100. data/gemfiles/excon_079.gemfile +0 -17
  101. data/gemfiles/excon_100.gemfile +0 -14
  102. data/gemfiles/graphql_10.gemfile +0 -16
  103. data/gemfiles/graphql_20.gemfile +0 -15
  104. data/gemfiles/grpc_10.gemfile +0 -15
  105. data/gemfiles/mongo_216.gemfile +0 -15
  106. data/gemfiles/mongo_219.gemfile +0 -12
  107. data/gemfiles/net_http_01.gemfile +0 -17
  108. data/gemfiles/rack_16.gemfile +0 -15
  109. data/gemfiles/rack_20.gemfile +0 -15
  110. data/gemfiles/rack_30.gemfile +0 -13
  111. data/gemfiles/rails_42.gemfile +0 -18
  112. data/gemfiles/rails_50.gemfile +0 -19
  113. data/gemfiles/rails_52.gemfile +0 -19
  114. data/gemfiles/rails_60.gemfile +0 -19
  115. data/gemfiles/rails_61.gemfile +0 -20
  116. data/gemfiles/rails_70.gemfile +0 -17
  117. data/gemfiles/rails_71.gemfile +0 -17
  118. data/gemfiles/rails_80.gemfile +0 -17
  119. data/gemfiles/redis_40.gemfile +0 -15
  120. data/gemfiles/redis_50.gemfile +0 -13
  121. data/gemfiles/redis_51.gemfile +0 -13
  122. data/gemfiles/resque_122.gemfile +0 -16
  123. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  124. data/gemfiles/resque_20.gemfile +0 -16
  125. data/gemfiles/rest_client_16.gemfile +0 -17
  126. data/gemfiles/rest_client_20.gemfile +0 -17
  127. data/gemfiles/roda_20.gemfile +0 -16
  128. data/gemfiles/roda_30.gemfile +0 -16
  129. data/gemfiles/rubocop_162.gemfile +0 -6
  130. data/gemfiles/sequel_56.gemfile +0 -16
  131. data/gemfiles/sequel_57.gemfile +0 -16
  132. data/gemfiles/sequel_58.gemfile +0 -16
  133. data/gemfiles/shoryuken_50.gemfile +0 -16
  134. data/gemfiles/shoryuken_60.gemfile +0 -13
  135. data/gemfiles/sidekiq_42.gemfile +0 -15
  136. data/gemfiles/sidekiq_50.gemfile +0 -15
  137. data/gemfiles/sidekiq_60.gemfile +0 -12
  138. data/gemfiles/sidekiq_65.gemfile +0 -12
  139. data/gemfiles/sidekiq_70.gemfile +0 -12
  140. data/gemfiles/sinatra_14.gemfile +0 -15
  141. data/gemfiles/sinatra_22.gemfile +0 -12
  142. data/gemfiles/sinatra_30.gemfile +0 -12
  143. data/gemfiles/sinatra_40.gemfile +0 -12
  144. data/instana.gemspec +0 -48
  145. data/lib/instana/open_tracing/carrier.rb +0 -7
  146. data/lib/instana/open_tracing/instana_tracer.rb +0 -99
  147. data/lib/instana/tracing/span.rb +0 -431
  148. data/lib/opentracing.rb +0 -32
  149. data/log/.keep +0 -0
  150. data/sonar-project.properties +0 -9
  151. data/test/activator_test.rb +0 -50
  152. data/test/backend/agent_test.rb +0 -80
  153. data/test/backend/gc_snapshot_test.rb +0 -11
  154. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  155. data/test/backend/host_agent_lookup_test.rb +0 -78
  156. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  157. data/test/backend/host_agent_test.rb +0 -89
  158. data/test/backend/process_info_test.rb +0 -83
  159. data/test/backend/request_client_test.rb +0 -39
  160. data/test/backend/serverless_agent_test.rb +0 -83
  161. data/test/benchmarks/bench_id_generation.rb +0 -15
  162. data/test/benchmarks/bench_opentracing.rb +0 -16
  163. data/test/config_test.rb +0 -34
  164. data/test/frameworks/cuba_test.rb +0 -61
  165. data/test/frameworks/roda_test.rb +0 -60
  166. data/test/frameworks/sinatra_test.rb +0 -71
  167. data/test/instana_test.rb +0 -37
  168. data/test/instrumentation/aws_test.rb +0 -241
  169. data/test/instrumentation/dalli_test.rb +0 -325
  170. data/test/instrumentation/excon_test.rb +0 -204
  171. data/test/instrumentation/graphql_test.rb +0 -289
  172. data/test/instrumentation/grpc_test.rb +0 -420
  173. data/test/instrumentation/mongo_test.rb +0 -68
  174. data/test/instrumentation/net_http_test.rb +0 -220
  175. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  176. data/test/instrumentation/rack_test.rb +0 -415
  177. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  178. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  179. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  180. data/test/instrumentation/rails_action_view_test.rb +0 -154
  181. data/test/instrumentation/rails_active_job_test.rb +0 -65
  182. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -45
  183. data/test/instrumentation/rails_active_record_test.rb +0 -115
  184. data/test/instrumentation/redis_test.rb +0 -152
  185. data/test/instrumentation/resque_test.rb +0 -188
  186. data/test/instrumentation/rest_client_test.rb +0 -107
  187. data/test/instrumentation/sequel_test.rb +0 -105
  188. data/test/instrumentation/shoryuken_test.rb +0 -47
  189. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  190. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  191. data/test/secrets_test.rb +0 -112
  192. data/test/serverless_test.rb +0 -369
  193. data/test/snapshot/deltable_test.rb +0 -17
  194. data/test/snapshot/docker_container_test.rb +0 -82
  195. data/test/snapshot/fargate_container_test.rb +0 -82
  196. data/test/snapshot/fargate_process_test.rb +0 -35
  197. data/test/snapshot/fargate_task_test.rb +0 -49
  198. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  199. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  200. data/test/snapshot/lambda_function_test.rb +0 -37
  201. data/test/snapshot/ruby_process_test.rb +0 -32
  202. data/test/support/apps/active_record/active_record.rb +0 -24
  203. data/test/support/apps/grpc/boot.rb +0 -23
  204. data/test/support/apps/grpc/grpc_server.rb +0 -84
  205. data/test/support/apps/http_endpoint/boot.rb +0 -28
  206. data/test/support/apps/rails/boot.rb +0 -219
  207. data/test/support/apps/rails/models/block.rb +0 -21
  208. data/test/support/apps/rails/models/block6.rb +0 -21
  209. data/test/support/apps/resque/boot.rb +0 -5
  210. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  211. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  212. data/test/support/apps/sidekiq/boot.rb +0 -25
  213. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  214. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  215. data/test/support/apps/sidekiq/worker.rb +0 -37
  216. data/test/support/helpers.rb +0 -85
  217. data/test/support/mock_timer.rb +0 -20
  218. data/test/test_helper.rb +0 -69
  219. data/test/tracing/custom_test.rb +0 -226
  220. data/test/tracing/id_management_test.rb +0 -80
  221. data/test/tracing/instrumented_logger_test.rb +0 -39
  222. data/test/tracing/opentracing_test.rb +0 -382
  223. data/test/tracing/processor_test.rb +0 -58
  224. data/test/tracing/span_context_test.rb +0 -22
  225. data/test/tracing/span_test.rb +0 -179
  226. data/test/tracing/tracer_async_test.rb +0 -230
  227. data/test/tracing/tracer_test.rb +0 -352
  228. data/test/util_test.rb +0 -10
@@ -1,369 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class ServerlessTest < Minitest::Test
7
- def setup
8
- @mock_agent = Minitest::Mock.new
9
- @mock_agent.expect(:send_bundle, true, [])
10
- @subject = Instana::Serverless.new(agent: @mock_agent)
11
- end
12
-
13
- def teardown
14
- @mock_agent.verify
15
- end
16
-
17
- def test_lambda_send_error
18
- mock_logger = Minitest::Mock.new
19
- mock_logger.expect(:error, true, [String])
20
-
21
- @mock_agent.expect(:send_bundle, true) { |_args| raise StandardError, 'error' }
22
-
23
- mock_context = OpenStruct.new(
24
- invoked_function_arn: 'test_arn',
25
- function_name: 'test_function',
26
- function_version: '$TEST'
27
- )
28
-
29
- subject = Instana::Serverless.new(agent: @mock_agent, logger: mock_logger)
30
- subject.wrap_aws(nil, mock_context) { 0 }
31
- subject.wrap_aws(nil, mock_context) { 0 }
32
-
33
- mock_logger.verify
34
- end
35
-
36
- def test_lambda_data
37
- clear_all!
38
-
39
- mock_context = OpenStruct.new(
40
- invoked_function_arn: 'test_arn',
41
- function_name: 'test_function',
42
- function_version: '$TEST'
43
- )
44
-
45
- @subject.wrap_aws(nil, mock_context) { 0 }
46
-
47
- lambda_span, *rest = Instana.processor.queued_spans
48
- assert rest.empty?
49
-
50
- data = lambda_span[:data][:lambda]
51
-
52
- assert_equal 'aws:api.gateway.noproxy', lambda_span[:data][:lambda][:trigger]
53
-
54
- assert_equal mock_context.invoked_function_arn, data[:arn]
55
- assert_equal mock_context.function_name, data[:functionName]
56
- assert_equal mock_context.function_version, data[:functionVersion]
57
- assert_equal 'ruby', data[:runtime]
58
- end
59
-
60
- def test_lambda_http
61
- clear_all!
62
-
63
- mock_id = Instana::Util.generate_id
64
- mock_context = OpenStruct.new(
65
- invoked_function_arn: 'test_arn',
66
- function_name: 'test_function',
67
- function_version: '$TEST'
68
- )
69
- mock_http = {
70
- "headers" => {
71
- "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
72
- "Accept-Encoding" => "gzip, deflate",
73
- "Accept-Language" => "en-US,en;q=0.5",
74
- "Connection" => "keep-alive",
75
- "Host" => "127.0.0.1:3000",
76
- "Upgrade-Insecure-Requests" => "1",
77
- "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0",
78
- "X-Forwarded-Port" => "3000",
79
- "X-Forwarded-Proto" => "http",
80
- 'X-Instana-S' => mock_id,
81
- 'X-Instana-T' => mock_id,
82
- 'X-Instana-L' => '1'
83
- },
84
- "httpMethod" => "GET",
85
- "path" => "/hello",
86
- "queryStringParameters" => {"test" => "abcde"}
87
- }
88
-
89
- @subject.wrap_aws(mock_http, mock_context) { 0 }
90
-
91
- lambda_span, *rest = Instana.processor.queued_spans
92
- assert rest.empty?
93
-
94
- data = lambda_span[:data][:http]
95
-
96
- assert_equal 'aws:api.gateway', lambda_span[:data][:lambda][:trigger]
97
- assert_equal mock_id, lambda_span[:t]
98
- assert_equal mock_id, lambda_span[:p]
99
-
100
- assert_equal 'GET', data[:method]
101
- assert_equal '/hello', data[:url]
102
- assert_equal '127.0.0.1:3000', data[:host]
103
- assert_equal 'test=abcde', data[:params]
104
- end
105
-
106
- def test_lambda_alb
107
- clear_all!
108
-
109
- mock_id = Instana::Util.generate_id
110
- mock_context = OpenStruct.new(
111
- invoked_function_arn: 'test_arn',
112
- function_name: 'test_function',
113
- function_version: '$TEST'
114
- )
115
- mock_http = {
116
- "headers" => {
117
- "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
118
- "Accept-Encoding" => "gzip, deflate",
119
- "Accept-Language" => "en-US,en;q=0.5",
120
- "Connection" => "keep-alive",
121
- "Host" => "127.0.0.1:3000",
122
- "Upgrade-Insecure-Requests" => "1",
123
- "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0",
124
- "X-Forwarded-Port" => "3000",
125
- "X-Forwarded-Proto" => "http",
126
- 'X-Instana-S' => mock_id,
127
- 'X-Instana-T' => mock_id,
128
- 'X-Instana-L' => '1'
129
- },
130
- "httpMethod" => "GET",
131
- "path" => "/hello",
132
- "requestContext" => { "elb" => {} }
133
- }
134
-
135
- @subject.wrap_aws(mock_http, mock_context) { 0 }
136
-
137
- lambda_span, *rest = Instana.processor.queued_spans
138
- assert rest.empty?
139
-
140
- data = lambda_span[:data][:http]
141
-
142
- assert_equal 'aws:application.load.balancer', lambda_span[:data][:lambda][:trigger]
143
- assert_equal mock_id, lambda_span[:t]
144
- assert_equal mock_id, lambda_span[:p]
145
-
146
- assert_equal 'GET', data[:method]
147
- assert_equal '/hello', data[:url]
148
- assert_equal '127.0.0.1:3000', data[:host]
149
- assert_equal '', data[:params]
150
- end
151
-
152
- def test_lambda_cw_event
153
- clear_all!
154
-
155
- mock_context = OpenStruct.new(
156
- invoked_function_arn: 'test_arn',
157
- function_name: 'test_function',
158
- function_version: '$TEST'
159
- )
160
- mock_event = {
161
- "detail-type" => "Scheduled Event",
162
- "source" => "aws.events",
163
- "id" => "test",
164
- "resources" => ["test"]
165
- }
166
-
167
- @subject.wrap_aws(mock_event, mock_context) { 0 }
168
-
169
- lambda_span, *rest = Instana.processor.queued_spans
170
- assert rest.empty?
171
-
172
- data = lambda_span[:data][:lambda][:cw][:events]
173
-
174
- assert_equal 'aws:cloudwatch.events', lambda_span[:data][:lambda][:trigger]
175
- assert_equal 'test', data[:id]
176
- assert_equal ["test"], data[:resources]
177
- end
178
-
179
- def test_lambda_cw_logs
180
- clear_all!
181
-
182
- mock_context = OpenStruct.new(
183
- invoked_function_arn: 'test_arn',
184
- function_name: 'test_function',
185
- function_version: '$TEST'
186
- )
187
- mock_event = {
188
- "awslogs" => {"data" => File.read('test/support/serverless/cloudwatch_log.bin')}
189
- }
190
-
191
- @subject.wrap_aws(mock_event, mock_context) { 0 }
192
-
193
- lambda_span, *rest = Instana.processor.queued_spans
194
- assert rest.empty?
195
-
196
- data = lambda_span[:data][:lambda][:cw][:logs]
197
-
198
- assert_equal 'aws:cloudwatch.logs', lambda_span[:data][:lambda][:trigger]
199
- assert_equal '/aws/lambda/echo-nodejs', data[:group]
200
- assert_equal '2019/03/13/[$LATEST]94fa867e5374431291a7fc14e2f56ae7', data[:stream]
201
- end
202
-
203
- def test_lambda_cw_error
204
- clear_all!
205
-
206
- mock_context = OpenStruct.new(
207
- invoked_function_arn: 'test_arn',
208
- function_name: 'test_function',
209
- function_version: '$TEST'
210
- )
211
- mock_event = {
212
- "awslogs" => {"data" => "error"}
213
- }
214
-
215
- @subject.wrap_aws(mock_event, mock_context) { 0 }
216
-
217
- lambda_span, *rest = Instana.processor.queued_spans
218
- assert rest.empty?
219
-
220
- data = lambda_span[:data][:lambda][:cw][:logs]
221
-
222
- assert_equal 'aws:cloudwatch.logs', lambda_span[:data][:lambda][:trigger]
223
- assert_equal 'incorrect header check', data[:decodingError]
224
- end
225
-
226
- def test_lambda_s3
227
- clear_all!
228
-
229
- mock_context = OpenStruct.new(
230
- invoked_function_arn: 'test_arn',
231
- function_name: 'test_function',
232
- function_version: '$TEST'
233
- )
234
- mock_event = {
235
- "Records" => [
236
- {
237
- "source" => "aws:s3",
238
- "eventName" => "test",
239
- "s3" => {
240
- "bucket" => {"name" => "test_bucket"},
241
- "object" => {"key" => "test_key"}
242
- }
243
- }
244
- ]
245
- }
246
-
247
- @subject.wrap_aws(mock_event, mock_context) { 0 }
248
-
249
- lambda_span, *rest = Instana.processor.queued_spans
250
- assert rest.empty?
251
-
252
- data = lambda_span[:data][:lambda][:s3]
253
-
254
- assert_equal 'aws:s3', lambda_span[:data][:lambda][:trigger]
255
- assert_equal 1, data[:events].length
256
-
257
- assert_equal 'test', data[:events].first[:name]
258
- assert_equal 'test_bucket', data[:events].first[:bucket]
259
- assert_equal 'test_key', data[:events].first[:object]
260
- end
261
-
262
- def test_lambda_s3_no_object
263
- clear_all!
264
-
265
- mock_context = OpenStruct.new(
266
- invoked_function_arn: 'test_arn',
267
- function_name: 'test_function',
268
- function_version: '$TEST'
269
- )
270
- mock_event = {
271
- "Records" => [
272
- {
273
- "source" => "aws:s3",
274
- "eventName" => "test"
275
- }
276
- ]
277
- }
278
-
279
- @subject.wrap_aws(mock_event, mock_context) { 0 }
280
-
281
- lambda_span, *rest = Instana.processor.queued_spans
282
- assert rest.empty?
283
-
284
- data = lambda_span[:data][:lambda][:s3]
285
-
286
- assert_equal 'aws:s3', lambda_span[:data][:lambda][:trigger]
287
- assert_equal 1, data[:events].length
288
-
289
- assert_equal 'test', data[:events].first[:name]
290
- assert_nil data[:events].first[:bucket]
291
- assert_nil data[:events].first[:object]
292
- end
293
-
294
- def test_lambda_sqs
295
- clear_all!
296
-
297
- mock_context = OpenStruct.new(
298
- invoked_function_arn: 'test_arn',
299
- function_name: 'test_function',
300
- function_version: '$TEST'
301
- )
302
- mock_event = {
303
- "Records" => [
304
- {
305
- "source" => "aws:sqs",
306
- "eventSourceARN" => "test_arn"
307
- }
308
- ]
309
- }
310
-
311
- @subject.wrap_aws(mock_event, mock_context) { 0 }
312
-
313
- lambda_span, *rest = Instana.processor.queued_spans
314
- assert rest.empty?
315
-
316
- data = lambda_span[:data][:lambda][:sqs]
317
-
318
- assert_equal 'aws:sqs', lambda_span[:data][:lambda][:trigger]
319
- assert_equal 1, data[:messages].length
320
-
321
- assert_equal 'test_arn', data[:messages].first[:queue]
322
- end
323
-
324
- def test_lambda_client_context
325
- clear_all!
326
-
327
- mock_context = OpenStruct.new(
328
- invoked_function_arn: 'test_arn',
329
- function_name: 'test_function',
330
- function_version: '$TEST',
331
- client_context: "eyJYLUlOU1RBTkEtVCI6IjEyMyIsIlgtSU5TVEFOQS1TIjoiNDU2IiwiWC1J\nTlNUQU5BLUwiOiIxIn0=\n"
332
- )
333
- mock_event = {
334
- "Invoked" => true
335
- }
336
-
337
- @subject.wrap_aws(mock_event, mock_context) { 0 }
338
-
339
- lambda_span, *rest = Instana.processor.queued_spans
340
- assert rest.empty?
341
-
342
- assert_equal 'aws.lambda.invoke', lambda_span[:data][:lambda][:trigger]
343
- assert_equal '123', lambda_span[:t]
344
- assert_equal '456', lambda_span[:p]
345
- end
346
-
347
- def test_lambda_client_context_error
348
- clear_all!
349
-
350
- mock_context = OpenStruct.new(
351
- invoked_function_arn: 'test_arn',
352
- function_name: 'test_function',
353
- function_version: '$TEST',
354
- client_context: "eyJYLUlOU1RBkEtVCI6IjEyMyIsIlgtSU5TVEFOQS1TIjoiNDU2IiwiWC1J\nTlNUQU5BLUwiOiIxIn0=\n"
355
- )
356
- mock_event = {
357
- "Invoked" => true
358
- }
359
-
360
- @subject.wrap_aws(mock_event, mock_context) { 0 }
361
-
362
- lambda_span, *rest = Instana.processor.queued_spans
363
- assert rest.empty?
364
-
365
- refute_equal 'aws.lambda.invoke', lambda_span[:data][:lambda][:trigger]
366
- refute_equal '123', lambda_span[:t]
367
- refute_equal '456', lambda_span[:p]
368
- end
369
- end
@@ -1,17 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class DeltableTest < Minitest::Test
7
- include Instana::Snapshot::Deltable
8
-
9
- def test_delta
10
- subject = {a: {b: 5}}
11
-
12
- assert_equal 5, delta(:a, :b, obj: subject, compute: ->(o, n) { o + n })
13
- assert_equal 10, delta(:a, :b, obj: subject, compute: ->(o, n) { o + n })
14
-
15
- assert_nil delta(:a, :c, obj: subject, compute: ->(o, n) { o + n })
16
- end
17
- end
@@ -1,82 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class DockerContainerTest < Minitest::Test
7
- def test_container
8
- stub_request(:get, 'https://10.10.10.10:8080/v3/task/stats')
9
- .to_return(status: 200, body: File.read('test/support/ecs/stats.json'))
10
-
11
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'].first
12
- subject = Instana::Snapshot::DockerContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
13
-
14
- snapshot = subject.snapshot
15
-
16
- assert_equal Instana::Snapshot::DockerContainer::ID, snapshot[:name]
17
- assert_equal 'arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3::~internal~ecs~pause', snapshot[:entityId]
18
-
19
- assert_equal "731a0d6a3b4210e2448339bc7015aaa79bfe4fa256384f4102db86ef94cbbc4c", snapshot[:data][:Id]
20
- assert_equal "2018-02-01T20:55:08.366329616Z", snapshot[:data][:Created]
21
- assert_equal "2018-02-01T20:55:09.058354915Z", snapshot[:data][:Started]
22
- assert_equal "amazon/amazon-ecs-pause:0.1.0", snapshot[:data][:Image]
23
- assert_equal container['Labels'], snapshot[:data][:Labels]
24
- assert_nil snapshot[:data][:Ports]
25
- assert_equal "awsvpc", snapshot[:data][:NetworkMode]
26
- end
27
-
28
- def test_container_metrics
29
- stub_request(:get, 'https://10.10.10.10:8080/v3/task/stats')
30
- .to_return(status: 200, body: File.read('test/support/ecs/stats.json'))
31
-
32
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'].last
33
- subject = Instana::Snapshot::DockerContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
34
-
35
- snapshot = subject.snapshot
36
-
37
- assert_equal Instana::Snapshot::DockerContainer::ID, snapshot[:name]
38
- assert_equal 'arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3::nginx-curl', snapshot[:entityId]
39
-
40
- assert_equal 0.0030905127838258164, snapshot[:data][:cpu][:total_usage]
41
- assert_equal 0.0022809745982374286, snapshot[:data][:cpu][:user_usage]
42
- assert_equal 0.00031104199066874026, snapshot[:data][:cpu][:system_usage]
43
- assert_equal 0, snapshot[:data][:cpu][:throttling_count]
44
- assert_equal 0, snapshot[:data][:cpu][:throttling_time]
45
- assert_equal 5_890_048, snapshot[:data][:blkio][:blk_read]
46
- assert_equal 12288, snapshot[:data][:blkio][:blk_write]
47
- assert_equal 6_610_944, snapshot[:data][:memory][:active_anon]
48
- assert_equal 0, snapshot[:data][:memory][:active_file]
49
- assert_equal 0, snapshot[:data][:memory][:inactive_anon]
50
- assert_equal 2_158_592, snapshot[:data][:memory][:inactive_file]
51
- assert_equal 0, snapshot[:data][:memory][:total_cache]
52
- assert_equal 8_769_536, snapshot[:data][:memory][:total_rss]
53
- assert_equal 10_035_200, snapshot[:data][:memory][:usage]
54
- assert_equal 12_677_120, snapshot[:data][:memory][:max_usage]
55
- assert_equal 4_134_825_984, snapshot[:data][:memory][:limit]
56
- assert_equal({bytes: 40_000_257, dropped: 7, errors: 2, packet: 200_017}, snapshot[:data][:network][:rx])
57
- assert_equal({bytes: 20_000_511, dropped: 200_007, errors: 5, packet: 2}, snapshot[:data][:network][:tx])
58
- end
59
-
60
- def test_container_no_network
61
- stub_request(:get, 'https://10.10.10.10:8080/v3/task/stats')
62
- .to_return(status: 200, body: File.read('test/support/ecs/stats.json'))
63
-
64
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'][1]
65
- subject = Instana::Snapshot::DockerContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
66
-
67
- snapshot = subject.snapshot
68
- assert_nil snapshot[:data][:network]
69
- end
70
-
71
- def test_snapshot_error
72
- stub_request(:get, 'https://10.10.10.10:8080/v3/task/stats')
73
- .to_return(status: 500)
74
-
75
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'].first
76
- subject = Instana::Snapshot::DockerContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
77
-
78
- assert_raises do
79
- subject.snapshot
80
- end
81
- end
82
- end
@@ -1,82 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class FargateContainerTest < Minitest::Test
7
- def test_snapshot_observed
8
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'].first
9
- subject = Instana::Snapshot::FargateContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
10
-
11
- stub_request(:get, 'https://10.10.10.10:8080/v3')
12
- .to_return(status: 200, body: File.read('test/support/ecs/container.json'))
13
-
14
- snapshot = subject.snapshot
15
-
16
- assert_equal Instana::Snapshot::FargateContainer::ID, snapshot[:name]
17
- assert_equal 'arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3::~internal~ecs~pause', snapshot[:entityId]
18
-
19
- assert_equal "731a0d6a3b4210e2448339bc7015aaa79bfe4fa256384f4102db86ef94cbbc4c", snapshot[:data][:dockerId]
20
- assert_equal "ecs-nginx-5-internalecspause-acc699c0cbf2d6d11700", snapshot[:data][:dockerName]
21
- assert_equal "~internal~ecs~pause", snapshot[:data][:containerName]
22
- assert_equal "amazon/amazon-ecs-pause:0.1.0", snapshot[:data][:image]
23
- assert_equal "", snapshot[:data][:imageId]
24
- assert_equal "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3", snapshot[:data][:taskArn]
25
- assert_nil snapshot[:data][:taskDefinition]
26
- assert_nil snapshot[:data][:taskDefinitionVersion]
27
- assert_equal "default", snapshot[:data][:clusterArn]
28
- assert_equal "RESOURCES_PROVISIONED", snapshot[:data][:desiredStatus]
29
- assert_equal "RESOURCES_PROVISIONED", snapshot[:data][:knownStatus]
30
- assert_nil snapshot[:data][:ports]
31
- assert_equal({:cpu => 0, :memory => 0}, snapshot[:data][:limits])
32
- assert_equal "2018-02-01T20:55:08.366329616Z", snapshot[:data][:createdAt]
33
- assert_equal "2018-02-01T20:55:09.058354915Z", snapshot[:data][:startedAt]
34
-
35
- assert_nil subject.source
36
- end
37
-
38
- def test_snapshot_current
39
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'].last
40
- subject = Instana::Snapshot::FargateContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
41
-
42
- stub_request(:get, 'https://10.10.10.10:8080/v3')
43
- .to_return(status: 200, body: File.read('test/support/ecs/container.json'))
44
-
45
- snapshot = subject.snapshot
46
-
47
- assert_equal Instana::Snapshot::FargateContainer::ID, snapshot[:name]
48
- assert_equal 'arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3::nginx-curl', snapshot[:entityId]
49
-
50
- assert_equal "43481a6ce4842eec8fe72fc28500c6b52edcc0917f105b83379f88cac1ff3946", snapshot[:data][:dockerId]
51
- assert_equal "ecs-nginx-5-nginx-curl-ccccb9f49db0dfe0d901", snapshot[:data][:dockerName]
52
- assert_equal "nginx-curl", snapshot[:data][:containerName]
53
- assert_equal "nrdlngr/nginx-curl", snapshot[:data][:image]
54
- assert_equal "sha256:2e00ae64383cfc865ba0a2ba37f61b50a120d2d9378559dcd458dc0de47bc165", snapshot[:data][:imageId]
55
- assert_equal "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3", snapshot[:data][:taskArn]
56
- assert_nil snapshot[:data][:taskDefinition]
57
- assert_nil snapshot[:data][:taskDefinitionVersion]
58
- assert_equal "default", snapshot[:data][:clusterArn]
59
- assert_equal "RUNNING", snapshot[:data][:desiredStatus]
60
- assert_equal "RUNNING", snapshot[:data][:knownStatus]
61
- assert_nil snapshot[:data][:ports]
62
- assert_equal({:cpu => 512, :memory => 512}, snapshot[:data][:limits])
63
- assert_equal "2018-02-01T20:55:10.554941919Z", snapshot[:data][:createdAt]
64
- assert_equal "2018-02-01T20:55:11.064236631Z", snapshot[:data][:startedAt]
65
- assert_equal true, snapshot[:data][:instrumented]
66
- assert_equal "ruby", snapshot[:data][:runtime]
67
-
68
- assert_equal({hl: true, cp: "aws", e: "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3::nginx-curl"}, subject.source)
69
- end
70
-
71
- def test_snapshot_error
72
- stub_request(:get, 'https://10.10.10.10:8080/v3')
73
- .to_return(status: 500)
74
-
75
- container = JSON.parse(File.read('test/support/ecs/task.json'))['Containers'].first
76
- subject = Instana::Snapshot::FargateContainer.new(container, metadata_uri: 'https://10.10.10.10:8080/v3')
77
-
78
- assert_raises do
79
- subject.snapshot
80
- end
81
- end
82
- end
@@ -1,35 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class FargateProcessTest < Minitest::Test
7
- def setup
8
- @subject = Instana::Snapshot::FargateProcess.new(metadata_uri: 'https://10.10.10.10:8080/v3')
9
- end
10
-
11
- def test_snapshot
12
- stub_request(:get, 'https://10.10.10.10:8080/v3')
13
- .to_return(status: 200, body: File.read('test/support/ecs/container.json'))
14
- stub_request(:get, 'https://10.10.10.10:8080/v3/task')
15
- .to_return(status: 200, body: File.read('test/support/ecs/task.json'))
16
-
17
- snapshot = @subject.snapshot
18
-
19
- assert_equal Instana::Snapshot::FargateProcess::ID, snapshot[:name]
20
- assert_equal Process.pid.to_s, snapshot[:entityId]
21
-
22
- assert_equal 'docker', snapshot[:data][:containerType]
23
- assert_equal '43481a6ce4842eec8fe72fc28500c6b52edcc0917f105b83379f88cac1ff3946', snapshot[:data][:container]
24
- assert_equal 'arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3', snapshot[:data][:'com.instana.plugin.host.name']
25
- end
26
-
27
- def test_snapshot_error
28
- stub_request(:get, 'https://10.10.10.10:8080/v3')
29
- .to_return(status: 500)
30
-
31
- assert_raises do
32
- @subject.snapshot
33
- end
34
- end
35
- end
@@ -1,49 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class FargateTaskTest < Minitest::Test
7
- def setup
8
- @subject = Instana::Snapshot::FargateTask.new(metadata_uri: 'https://10.10.10.10:8080/v3')
9
-
10
- ENV['INSTANA_ZONE'] = 'test'
11
- ENV['INSTANA_TAGS'] = 'test=a,b,c'
12
- end
13
-
14
- def teardown
15
- ENV['INSTANA_ZONE'] = nil
16
- ENV['INSTANA_TAGS'] = nil
17
- end
18
-
19
- def test_snapshot
20
- stub_request(:get, 'https://10.10.10.10:8080/v3/task')
21
- .to_return(status: 200, body: File.read('test/support/ecs/task.json'))
22
-
23
- snapshot = @subject.snapshot
24
-
25
- assert_equal Instana::Snapshot::FargateTask::ID, snapshot[:name]
26
- assert_equal 'arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3', snapshot[:entityId]
27
-
28
- assert_equal "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3", snapshot[:data][:taskArn]
29
- assert_equal "default", snapshot[:data][:clusterArn]
30
- assert_equal "nginx", snapshot[:data][:taskDefinition]
31
- assert_equal "5", snapshot[:data][:taskDefinitionVersion]
32
- assert_equal "us-east-2b", snapshot[:data][:availabilityZone]
33
- assert_equal "RUNNING", snapshot[:data][:desiredStatus]
34
- assert_equal "RUNNING", snapshot[:data][:knownStatus]
35
- assert_equal "2018-02-01T20:55:09.372495529Z", snapshot[:data][:pullStartedAt]
36
- assert_equal "2018-02-01T20:55:10.552018345Z", snapshot[:data][:pullStoppedAt]
37
- assert_equal "test", snapshot[:data][:instanaZone]
38
- assert_equal({"test" => "a", "b" => nil, "c" => nil}, snapshot[:data][:tags])
39
- end
40
-
41
- def test_snapshot_error
42
- stub_request(:get, 'https://10.10.10.10:8080/v3/task')
43
- .to_return(status: 500)
44
-
45
- assert_raises do
46
- @subject.snapshot
47
- end
48
- end
49
- end