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,289 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class GraphqlTest < Minitest::Test
7
- class TaskType < GraphQL::Schema::Object
8
- field :id, ID, null: false
9
- field :action, String, null: false
10
- end
11
-
12
- class JobType < GraphQL::Schema::Object
13
- field :id, ID, null: false
14
- field :name, String, null: false
15
- field :description, String, null: false
16
- end
17
-
18
- class TaskJobUnion < GraphQL::Schema::Union
19
- description "A union type for Task and Job"
20
- possible_types TaskType, JobType
21
-
22
- def self.resolve_type(object, _context)
23
- if !object.action.nil?
24
- TaskType
25
- elsif !object.description?
26
- JobType
27
- else
28
- raise("Unexpected object: #{object}")
29
- end
30
- end
31
- end
32
-
33
- class NewTaskType < GraphQL::Schema::Mutation
34
- argument :action, String, required: true
35
- field :task, TaskType, null: true
36
-
37
- def resolve(action:)
38
- {
39
- task: OpenStruct.new(id: '0', action: action)
40
- }
41
- end
42
- end
43
-
44
- class QueryType < GraphQL::Schema::Object
45
- field :tasks, TaskType.connection_type, null: false
46
- field :jobs, JobType.connection_type, null: false
47
- field :tasksorjobs, TaskJobUnion.connection_type, null: false
48
-
49
- def tasks()
50
- [
51
- OpenStruct.new(id: '0', action: 'Sample 00'),
52
- OpenStruct.new(id: '1', action: 'Sample 01'),
53
- OpenStruct.new(id: '2', action: 'Sample 02'),
54
- OpenStruct.new(id: '3', action: 'Sample 03'),
55
- OpenStruct.new(id: '4', action: 'Sample 04')
56
- ]
57
- end
58
-
59
- def jobs()
60
- [
61
- OpenStruct.new(id: '0', name: 'Name 00', description: 'Desc 00'),
62
- OpenStruct.new(id: '1', name: 'Name 01', description: 'Desc 01'),
63
- OpenStruct.new(id: '2', name: 'Name 02', description: 'Desc 02'),
64
- OpenStruct.new(id: '3', name: 'Name 03', description: 'Desc 03'),
65
- OpenStruct.new(id: '4', name: 'Name 04', description: 'Desc 04')
66
- ]
67
- end
68
-
69
- def tasksorjobs()
70
- [
71
- OpenStruct.new(id: '0', action: 'Task 00'),
72
- OpenStruct.new(id: '0', name: 'Job 00', description: 'Job Desc 00')
73
- ]
74
- end
75
- end
76
-
77
- class MutationType < GraphQL::Schema::Object
78
- field :create_task, mutation: NewTaskType
79
- end
80
-
81
- class Schema < GraphQL::Schema
82
- query QueryType
83
- mutation MutationType
84
- end
85
-
86
- def teardown
87
- ::Instana.config[:allow_exit_as_root] = false
88
- end
89
-
90
- def test_it_works
91
- assert defined?(GraphQL)
92
- end
93
-
94
- def test_config_defaults
95
- assert ::Instana.config[:graphql].is_a?(Hash)
96
- assert ::Instana.config[:graphql].key?(:enabled)
97
- assert_equal true, ::Instana.config[:graphql][:enabled]
98
- end
99
-
100
- def test_query
101
- clear_all!
102
-
103
- query = "query FirstTwoTaskSamples {
104
- tasks(after: \"\", first: 2) {
105
- nodes {
106
- action
107
- }
108
- }
109
- }"
110
-
111
- expected_data = {
112
- :operationName => "FirstTwoTaskSamples",
113
- :operationType => "query",
114
- :arguments => { "tasks" => ["after", "first"] },
115
- :fields => { "tasks" => ["nodes"], "nodes" => ["action"] }
116
- }
117
- expected_results = {
118
- "data" => {
119
- "tasks" => {
120
- "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"}]
121
- }
122
- }
123
- }
124
-
125
- results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
126
- query_span, root_span = *Instana.processor.queued_spans
127
-
128
- assert_equal expected_results, results.to_h
129
- assert_equal :sdk, root_span[:n]
130
- assert_equal :'graphql.server', query_span[:n]
131
- assert_equal expected_data, query_span[:data][:graphql]
132
- end
133
-
134
- def test_query_as_root_exit_span
135
- clear_all!
136
-
137
- query = "query FirstTwoTaskSamples {
138
- tasks(after: \"\", first: 2) {
139
- nodes {
140
- action
141
- }
142
- }
143
- }"
144
-
145
- expected_data = {
146
- :operationName => "FirstTwoTaskSamples",
147
- :operationType => "query",
148
- :arguments => { "tasks" => ["after", "first"] },
149
- :fields => { "tasks" => ["nodes"], "nodes" => ["action"] }
150
- }
151
- expected_results = {
152
- "data" => {
153
- "tasks" => {
154
- "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"}]
155
- }
156
- }
157
- }
158
-
159
- ::Instana.config[:allow_exit_as_root] = true
160
- results = Schema.execute(query)
161
- ::Instana.config[:allow_exit_as_root] = false
162
- queued_spans = Instana.processor.queued_spans
163
- assert_equal 1, queued_spans.length
164
- query_span = queued_spans[0]
165
-
166
- assert_equal expected_results, results.to_h
167
- assert_equal :'graphql.server', query_span[:n]
168
- assert_equal expected_data, query_span[:data][:graphql]
169
- end
170
-
171
- def test_query_with_fragment
172
- clear_all!
173
-
174
- query = "
175
- fragment actionDetails on Task {
176
- action
177
- }
178
-
179
- query SampleWithFragment {
180
- tasks {
181
- nodes {
182
- ... actionDetails
183
- }
184
- }
185
- }"
186
-
187
- expected_data = {
188
- :operationName => "SampleWithFragment",
189
- :operationType => "query",
190
- :arguments => {},
191
- :fields => { "tasks" => ["nodes"], "nodes" => ["actionDetails"] }
192
- }
193
- expected_results = {
194
- "data" => {
195
- "tasks" => {
196
- "nodes" => [{"action" => "Sample 00"}, {"action" => "Sample 01"},
197
- {"action" => "Sample 02"}, {"action" => "Sample 03"},
198
- {"action" => "Sample 04"}]
199
- }
200
- }
201
- }
202
-
203
- results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
204
- query_span, root_span = *Instana.processor.queued_spans
205
-
206
- assert_equal expected_results, results.to_h
207
- assert_equal :sdk, root_span[:n]
208
- assert_equal :'graphql.server', query_span[:n]
209
- assert_equal expected_data, query_span[:data][:graphql]
210
- end
211
-
212
- def test_query_union_with_fragment
213
- clear_all!
214
-
215
- query = "
216
- query QueryUnionWithFragment {
217
- tasksorjobs {
218
- nodes {
219
- ... on Task {
220
- action
221
- }
222
- ... on Job {
223
- name
224
- description
225
- }
226
- }
227
- }
228
- }"
229
-
230
- expected_data = {
231
- :operationName => "QueryUnionWithFragment",
232
- :operationType => "query",
233
- :arguments => {},
234
- :fields => { "tasksorjobs" => ["nodes"],
235
- "nodes" => ["InlineFragment", "InlineFragment"],
236
- "InlineFragment" => %w[action name description]}
237
- }
238
- expected_results = {
239
- "data" => {
240
- "tasksorjobs" => {
241
- "nodes" => [{"action" => "Task 00"},
242
- {"name" => "Job 00", "description" => "Job Desc 00"}]
243
- }
244
- }
245
- }
246
-
247
- results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
248
- query_span, root_span = *Instana.processor.queued_spans
249
-
250
- assert_equal expected_results, results.to_h
251
- assert_equal :sdk, root_span[:n]
252
- assert_equal :'graphql.server', query_span[:n]
253
- assert_equal expected_data, query_span[:data][:graphql]
254
- end
255
-
256
- def test_mutation
257
- clear_all!
258
-
259
- query = "mutation Sample {
260
- createTask(action: \"Sample\") {
261
- task {
262
- action
263
- }
264
- }
265
- }"
266
-
267
- expected_data = {
268
- :operationName => "Sample",
269
- :operationType => "mutation",
270
- :arguments => { "createTask" => ["action"] },
271
- :fields => { "createTask" => ["task"], "task" => ["action"] }
272
- }
273
- expected_results = {
274
- "data" => {
275
- "createTask" => {
276
- "task" => { "action" => "Sample" }
277
- }
278
- }
279
- }
280
-
281
- results = Instana.tracer.start_or_continue_trace('graphql-test') { Schema.execute(query) }
282
- query_span, root_span = *Instana.processor.queued_spans
283
-
284
- assert_equal expected_results, results.to_h
285
- assert_equal :sdk, root_span[:n]
286
- assert_equal :'graphql.server', query_span[:n]
287
- assert_equal expected_data, query_span[:data][:graphql]
288
- end
289
- end
@@ -1,420 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'test_helper'
5
- require 'support/apps/grpc/boot'
6
-
7
- class GrpcTest < Minitest::Test # rubocop:disable Metrics/ClassLength
8
- def client_stub
9
- PingPongService::Stub.new('127.0.0.1:50051', :this_channel_is_insecure)
10
- end
11
-
12
- def teardown
13
- ::Instana.config[:allow_exit_as_root] = false
14
- end
15
-
16
- def assert_client_span(client_span, call: '', call_type: '', error: nil)
17
- data = client_span[:data]
18
- assert_equal '127.0.0.1:50051', data[:rpc][:host]
19
- assert_equal :grpc, data[:rpc][:flavor]
20
- assert_equal call, data[:rpc][:call]
21
- assert_equal call_type, data[:rpc][:call_type]
22
-
23
- if error
24
- assert_equal true, data[:rpc][:error]
25
- assert data[:log][:message].include?("2:RuntimeError: #{error}")
26
- end
27
- end
28
-
29
- def assert_server_span(server_span, call: '', call_type: '', error: nil)
30
- # Span name validation
31
- assert_equal :'rpc-server', server_span[:n]
32
-
33
- data = server_span[:data]
34
- assert_equal :grpc, data[:rpc][:flavor]
35
- assert_equal call, data[:rpc][:call]
36
- assert_equal call_type, data[:rpc][:call_type]
37
-
38
- if error
39
- assert_equal true, data[:rpc][:error]
40
- assert_equal error, data[:log][:message]
41
- end
42
- end
43
-
44
- def test_request_response
45
- clear_all!
46
- response = nil
47
-
48
- Instana.tracer.start_or_continue_trace(:rpctests) do
49
- response = client_stub.ping(
50
- PingPongService::PingRequest.new(message: 'Hello World')
51
- )
52
- end
53
- sleep 1
54
-
55
- assert 'Hello World', response.message
56
-
57
- # Pause for a split second to allow traces to be queued
58
- sleep 0.2
59
-
60
- spans = ::Instana.processor.queued_spans
61
- sdk_span = find_spans_by_name(spans, :rpctests).first
62
- client_span = find_spans_by_name(spans, :'rpc-client').first
63
- server_span = find_spans_by_name(spans, :'rpc-server').first
64
-
65
- validate_sdk_span(sdk_span)
66
-
67
- assert_client_span(
68
- client_span,
69
- call: '/PingPongService/Ping',
70
- call_type: :request_response
71
- )
72
-
73
- assert_server_span(
74
- server_span,
75
- call: '/PingPongService/Ping',
76
- call_type: :request_response
77
- )
78
-
79
- trace_id = sdk_span[:t]
80
- assert_equal trace_id, client_span[:t]
81
- assert_equal trace_id, server_span[:t]
82
-
83
- assert_equal server_span[:p], client_span[:s]
84
- assert_equal client_span[:p], sdk_span[:s]
85
- end
86
-
87
- def test_request_response_as_root_exit_span
88
- clear_all!
89
- ::Instana.config[:allow_exit_as_root] = true
90
-
91
- response = client_stub.ping(
92
- PingPongService::PingRequest.new(message: 'Hello World')
93
- )
94
- sleep 1
95
-
96
- assert 'Hello World', response.message
97
-
98
- # Pause for a split second to allow traces to be queued
99
- sleep 0.2
100
-
101
- spans = ::Instana.processor.queued_spans
102
- client_span = find_spans_by_name(spans, :'rpc-client').first
103
- server_span = find_spans_by_name(spans, :'rpc-server').first
104
-
105
- assert_client_span(
106
- client_span,
107
- call: '/PingPongService/Ping',
108
- call_type: :request_response
109
- )
110
-
111
- assert_server_span(
112
- server_span,
113
- call: '/PingPongService/Ping',
114
- call_type: :request_response
115
- )
116
-
117
- assert_equal client_span[:t], server_span[:t]
118
- assert_equal client_span[:s], server_span[:p]
119
- assert_nil client_span[:p]
120
- end
121
-
122
- def test_client_streamer
123
- clear_all!
124
- response = nil
125
-
126
- Instana.tracer.start_or_continue_trace(:rpctests) do
127
- response = client_stub.ping_with_client_stream(
128
- (0..5).map do |index|
129
- PingPongService::PingRequest.new(message: index.to_s)
130
- end
131
- )
132
- end
133
- sleep 1
134
-
135
- assert '01234', response.message
136
-
137
- # Pause for a split second to allow traces to be queued
138
- sleep 0.2
139
-
140
- spans = ::Instana.processor.queued_spans
141
- sdk_span = find_spans_by_name(spans, :rpctests).first
142
- client_span = find_spans_by_name(spans, :'rpc-client').first
143
- server_span = find_spans_by_name(spans, :'rpc-server').first
144
-
145
- validate_sdk_span(sdk_span)
146
-
147
- assert_client_span(
148
- client_span,
149
- call: '/PingPongService/PingWithClientStream',
150
- call_type: :client_streamer
151
- )
152
-
153
- assert_server_span(
154
- server_span,
155
- call: '/PingPongService/PingWithClientStream',
156
- call_type: :client_streamer
157
- )
158
-
159
- trace_id = sdk_span[:t]
160
- assert_equal trace_id, client_span[:t]
161
- assert_equal trace_id, server_span[:t]
162
-
163
- assert_equal server_span[:p], client_span[:s]
164
- assert_equal client_span[:p], sdk_span[:s]
165
- end
166
-
167
- def test_server_streamer
168
- clear_all!
169
- responses = []
170
-
171
- Instana.tracer.start_or_continue_trace(:rpctests) do
172
- responses = client_stub.ping_with_server_stream(
173
- PingPongService::PingRequest.new(message: 'Hello World')
174
- )
175
- end
176
- assert %w(0 1 2 3 4), responses.map(&:message)
177
-
178
- # Pause for a split second to allow traces to be queued
179
- sleep 0.2
180
-
181
- spans = ::Instana.processor.queued_spans
182
- sdk_span = find_spans_by_name(spans, :rpctests).first
183
- client_span = find_spans_by_name(spans, :'rpc-client').first
184
- server_span = find_spans_by_name(spans, :'rpc-server').first
185
-
186
- validate_sdk_span(sdk_span)
187
-
188
- assert_client_span(
189
- client_span,
190
- call: '/PingPongService/PingWithServerStream',
191
- call_type: :server_streamer
192
- )
193
-
194
- assert_server_span(
195
- server_span,
196
- call: '/PingPongService/PingWithServerStream',
197
- call_type: :server_streamer
198
- )
199
-
200
- trace_id = sdk_span[:t]
201
- assert_equal trace_id, client_span[:t]
202
- assert_equal trace_id, server_span[:t]
203
-
204
- assert_equal server_span[:p], client_span[:s]
205
- assert_equal client_span[:p], sdk_span[:s]
206
- end
207
-
208
- def test_bidi_streamer
209
- clear_all!
210
- responses = []
211
-
212
- Instana.tracer.start_or_continue_trace(:rpctests) do
213
- responses = client_stub.ping_with_bidi_stream(
214
- (0..5).map do |index|
215
- PingPongService::PingRequest.new(message: (index * 2).to_s)
216
- end
217
- )
218
- end
219
- sleep 1
220
-
221
- assert %w(0 2 4 6 8), responses.to_a.map(&:message)
222
-
223
- # Pause for a split second to allow traces to be queued
224
- sleep 0.2
225
-
226
- spans = ::Instana.processor.queued_spans
227
- sdk_span = find_spans_by_name(spans, :rpctests).first
228
- client_span = find_spans_by_name(spans, :'rpc-client').first
229
- server_span = find_spans_by_name(spans, :'rpc-server').first
230
-
231
- validate_sdk_span(sdk_span)
232
-
233
- assert_client_span(
234
- client_span,
235
- call: '/PingPongService/PingWithBidiStream',
236
- call_type: :bidi_streamer
237
- )
238
-
239
- assert_server_span(
240
- server_span,
241
- call: '/PingPongService/PingWithBidiStream',
242
- call_type: :bidi_streamer
243
- )
244
-
245
- trace_id = sdk_span[:t]
246
- assert_equal trace_id, client_span[:t]
247
- assert_equal trace_id, server_span[:t]
248
-
249
- assert_equal server_span[:p], client_span[:s]
250
- assert_equal client_span[:p], sdk_span[:s]
251
- end
252
-
253
- def test_request_response_failure
254
- clear_all!
255
- Instana.tracer.start_or_continue_trace(:rpctests) do
256
- begin
257
- client_stub.fail_to_ping( PingPongService::PingRequest.new(message: 'Hello World'))
258
- rescue
259
- end
260
- end
261
-
262
- # Pause for a split second to allow traces to be queued
263
- sleep 0.2
264
-
265
- spans = ::Instana.processor.queued_spans
266
- sdk_span = find_spans_by_name(spans, :rpctests).first
267
- client_span = find_spans_by_name(spans, :'rpc-client').first
268
- server_span = find_spans_by_name(spans, :'rpc-server').first
269
-
270
- validate_sdk_span(sdk_span)
271
-
272
- assert_client_span(
273
- client_span,
274
- call: '/PingPongService/FailToPing',
275
- call_type: :request_response,
276
- error: 'Unexpected failed'
277
- )
278
- assert_server_span(
279
- server_span,
280
- call: '/PingPongService/FailToPing',
281
- call_type: :request_response,
282
- error: 'Unexpected failed'
283
- )
284
-
285
- trace_id = sdk_span[:t]
286
- assert_equal trace_id, client_span[:t]
287
- assert_equal trace_id, server_span[:t]
288
-
289
- assert_equal server_span[:p], client_span[:s]
290
- assert_equal client_span[:p], sdk_span[:s]
291
- end
292
-
293
- def test_client_streamer_failure
294
- clear_all!
295
- Instana.tracer.start_or_continue_trace(:rpctests) do
296
- begin
297
- client_stub.fail_to_ping_with_client_stream(
298
- (0..5).map do |index|
299
- PingPongService::PingRequest.new(message: index.to_s)
300
- end
301
- )
302
- rescue
303
- end
304
- end
305
-
306
- # Pause for a split second to allow traces to be queued
307
- sleep 0.2
308
-
309
- spans = ::Instana.processor.queued_spans
310
- sdk_span = find_spans_by_name(spans, :rpctests).first
311
- client_span = find_spans_by_name(spans, :'rpc-client').first
312
- server_span = find_spans_by_name(spans, :'rpc-server').first
313
-
314
- validate_sdk_span(sdk_span)
315
-
316
- assert_client_span(
317
- client_span,
318
- call: '/PingPongService/FailToPingWithClientStream',
319
- call_type: :client_streamer,
320
- error: 'Unexpected failed'
321
- )
322
-
323
- assert_server_span(
324
- server_span,
325
- call: '/PingPongService/FailToPingWithClientStream',
326
- call_type: :client_streamer,
327
- error: 'Unexpected failed'
328
- )
329
-
330
- trace_id = sdk_span[:t]
331
- assert_equal trace_id, client_span[:t]
332
- assert_equal trace_id, server_span[:t]
333
-
334
- assert_equal server_span[:p], client_span[:s]
335
- assert_equal client_span[:p], sdk_span[:s]
336
- end
337
-
338
- def test_server_streamer_failure
339
- clear_all!
340
- Instana.tracer.start_or_continue_trace(:rpctests) do
341
- begin
342
- client_stub.fail_to_ping_with_server_stream(
343
- PingPongService::PingRequest.new(message: 'Hello World')
344
- )
345
- rescue
346
- end
347
- end
348
-
349
- # Pause for a split second to allow traces to be queued
350
- sleep 0.2
351
-
352
- spans = ::Instana.processor.queued_spans
353
- sdk_span = find_spans_by_name(spans, :rpctests).first
354
- client_span = find_spans_by_name(spans, :'rpc-client').first
355
- server_span = find_spans_by_name(spans, :'rpc-server').first
356
-
357
- validate_sdk_span(sdk_span)
358
-
359
- assert_client_span(
360
- client_span,
361
- call: '/PingPongService/FailToPingWithServerStream',
362
- call_type: :server_streamer
363
- )
364
-
365
- assert_server_span(
366
- server_span,
367
- call: '/PingPongService/FailToPingWithServerStream',
368
- call_type: :server_streamer,
369
- error: 'Unexpected failed'
370
- )
371
-
372
- trace_id = sdk_span[:t]
373
- assert_equal trace_id, client_span[:t]
374
- assert_equal trace_id, server_span[:t]
375
-
376
- assert_equal server_span[:p], client_span[:s]
377
- assert_equal client_span[:p], sdk_span[:s]
378
- end
379
-
380
- def test_bidi_streamer_failure
381
- clear_all!
382
- Instana.tracer.start_or_continue_trace(:rpctests) do
383
- client_stub.fail_to_ping_with_bidi_stream(
384
- (0..5).map do |index|
385
- PingPongService::PingRequest.new(message: (index * 2).to_s)
386
- end
387
- )
388
- end
389
-
390
- # Pause for a split second to allow traces to be queued
391
- sleep 0.2
392
-
393
- spans = ::Instana.processor.queued_spans
394
- sdk_span = find_spans_by_name(spans, :rpctests).first
395
- client_span = find_spans_by_name(spans, :'rpc-client').first
396
- server_span = find_spans_by_name(spans, :'rpc-server').first
397
-
398
- validate_sdk_span(sdk_span)
399
-
400
- assert_client_span(
401
- client_span,
402
- call: '/PingPongService/FailToPingWithBidiStream',
403
- call_type: :bidi_streamer
404
- )
405
-
406
- assert_server_span(
407
- server_span,
408
- call: '/PingPongService/FailToPingWithBidiStream',
409
- call_type: :bidi_streamer,
410
- error: 'Unexpected failed'
411
- )
412
-
413
- trace_id = sdk_span[:t]
414
- assert_equal trace_id, client_span[:t]
415
- assert_equal trace_id, server_span[:t]
416
-
417
- assert_equal server_span[:p], client_span[:s]
418
- assert_equal client_span[:p], sdk_span[:s]
419
- end
420
- end