instana 2.0.0 → 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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/setup.rb +1 -0
  3. data/lib/instana/span_filtering/condition.rb +134 -0
  4. data/lib/instana/span_filtering/configuration.rb +262 -0
  5. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  6. data/lib/instana/span_filtering.rb +62 -0
  7. data/lib/instana/trace/span.rb +5 -3
  8. data/lib/instana/version.rb +1 -1
  9. metadata +7 -258
  10. data/.circleci/config.yml +0 -361
  11. data/.codeclimate.yml +0 -23
  12. data/.editorconfig +0 -10
  13. data/.fasterer.yml +0 -23
  14. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  15. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  16. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  17. data/.github/workflows/release-notification-on-slack.yml +0 -34
  18. data/.gitignore +0 -19
  19. data/.rubocop.yml +0 -34
  20. data/.rubocop_todo.yml +0 -1140
  21. data/.tekton/.currency/docs/report.md +0 -20
  22. data/.tekton/.currency/resources/requirements.txt +0 -4
  23. data/.tekton/.currency/resources/table.json +0 -100
  24. data/.tekton/.currency/scripts/generate_report.py +0 -308
  25. data/.tekton/README.md +0 -278
  26. data/.tekton/github-interceptor-secret.yaml +0 -8
  27. data/.tekton/github-pr-eventlistener.yaml +0 -104
  28. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  29. data/.tekton/github-set-status-task.yaml +0 -43
  30. data/.tekton/github-webhook-ingress.yaml +0 -20
  31. data/.tekton/pipeline.yaml +0 -484
  32. data/.tekton/pipelinerun.yaml +0 -21
  33. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  34. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  35. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  36. data/.tekton/run_unittests.sh +0 -87
  37. data/.tekton/scheduled-eventlistener.yaml +0 -108
  38. data/.tekton/task.yaml +0 -453
  39. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  40. data/Appraisals +0 -124
  41. data/CONTRIBUTING.md +0 -86
  42. data/Gemfile +0 -22
  43. data/LICENSE +0 -22
  44. data/MAINTAINERS.md +0 -3
  45. data/Rakefile +0 -49
  46. data/bin/announce_release_on_slack.py +0 -103
  47. data/docker-compose.yml +0 -20
  48. data/download.sh +0 -85
  49. data/examples/otel.rb +0 -98
  50. data/examples/tracing.rb +0 -85
  51. data/extras/license_header.rb +0 -44
  52. data/gemfiles/.bundle/config +0 -2
  53. data/gemfiles/aws_30.gemfile +0 -21
  54. data/gemfiles/aws_60.gemfile +0 -16
  55. data/gemfiles/cuba_30.gemfile +0 -16
  56. data/gemfiles/cuba_40.gemfile +0 -13
  57. data/gemfiles/dalli_20.gemfile +0 -15
  58. data/gemfiles/dalli_30.gemfile +0 -12
  59. data/gemfiles/dalli_32.gemfile +0 -12
  60. data/gemfiles/excon_0100.gemfile +0 -14
  61. data/gemfiles/excon_021.gemfile +0 -17
  62. data/gemfiles/excon_079.gemfile +0 -17
  63. data/gemfiles/excon_100.gemfile +0 -14
  64. data/gemfiles/graphql_10.gemfile +0 -16
  65. data/gemfiles/graphql_20.gemfile +0 -15
  66. data/gemfiles/grpc_10.gemfile +0 -15
  67. data/gemfiles/mongo_216.gemfile +0 -15
  68. data/gemfiles/mongo_219.gemfile +0 -12
  69. data/gemfiles/net_http_01.gemfile +0 -17
  70. data/gemfiles/rack_16.gemfile +0 -15
  71. data/gemfiles/rack_20.gemfile +0 -15
  72. data/gemfiles/rack_30.gemfile +0 -13
  73. data/gemfiles/rails_42.gemfile +0 -18
  74. data/gemfiles/rails_50.gemfile +0 -19
  75. data/gemfiles/rails_52.gemfile +0 -19
  76. data/gemfiles/rails_60.gemfile +0 -19
  77. data/gemfiles/rails_61.gemfile +0 -21
  78. data/gemfiles/rails_70.gemfile +0 -18
  79. data/gemfiles/rails_71.gemfile +0 -17
  80. data/gemfiles/rails_80.gemfile +0 -17
  81. data/gemfiles/redis_40.gemfile +0 -15
  82. data/gemfiles/redis_50.gemfile +0 -13
  83. data/gemfiles/redis_51.gemfile +0 -13
  84. data/gemfiles/resque_122.gemfile +0 -16
  85. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  86. data/gemfiles/resque_20.gemfile +0 -16
  87. data/gemfiles/rest_client_16.gemfile +0 -17
  88. data/gemfiles/rest_client_20.gemfile +0 -17
  89. data/gemfiles/roda_20.gemfile +0 -16
  90. data/gemfiles/roda_30.gemfile +0 -16
  91. data/gemfiles/rubocop_162.gemfile +0 -6
  92. data/gemfiles/sequel_56.gemfile +0 -16
  93. data/gemfiles/sequel_57.gemfile +0 -16
  94. data/gemfiles/sequel_58.gemfile +0 -16
  95. data/gemfiles/shoryuken_50.gemfile +0 -16
  96. data/gemfiles/shoryuken_60.gemfile +0 -13
  97. data/gemfiles/sidekiq_42.gemfile +0 -15
  98. data/gemfiles/sidekiq_50.gemfile +0 -15
  99. data/gemfiles/sidekiq_60.gemfile +0 -12
  100. data/gemfiles/sidekiq_65.gemfile +0 -12
  101. data/gemfiles/sidekiq_70.gemfile +0 -12
  102. data/gemfiles/sinatra_14.gemfile +0 -15
  103. data/gemfiles/sinatra_22.gemfile +0 -12
  104. data/gemfiles/sinatra_30.gemfile +0 -12
  105. data/gemfiles/sinatra_40.gemfile +0 -12
  106. data/instana.gemspec +0 -53
  107. data/log/.keep +0 -0
  108. data/sonar-project.properties +0 -9
  109. data/test/activator_test.rb +0 -50
  110. data/test/backend/agent_test.rb +0 -80
  111. data/test/backend/gc_snapshot_test.rb +0 -11
  112. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  113. data/test/backend/host_agent_lookup_test.rb +0 -78
  114. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  115. data/test/backend/host_agent_test.rb +0 -89
  116. data/test/backend/process_info_test.rb +0 -83
  117. data/test/backend/request_client_test.rb +0 -39
  118. data/test/backend/serverless_agent_test.rb +0 -83
  119. data/test/benchmarks/bench_id_generation.rb +0 -15
  120. data/test/benchmarks/bench_opentracing.rb +0 -16
  121. data/test/config_test.rb +0 -34
  122. data/test/frameworks/cuba_test.rb +0 -61
  123. data/test/frameworks/roda_test.rb +0 -60
  124. data/test/frameworks/sinatra_test.rb +0 -71
  125. data/test/instana_test.rb +0 -37
  126. data/test/instrumentation/aws_test.rb +0 -241
  127. data/test/instrumentation/dalli_test.rb +0 -325
  128. data/test/instrumentation/excon_test.rb +0 -204
  129. data/test/instrumentation/graphql_test.rb +0 -289
  130. data/test/instrumentation/grpc_test.rb +0 -420
  131. data/test/instrumentation/mongo_test.rb +0 -68
  132. data/test/instrumentation/net_http_test.rb +0 -220
  133. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  134. data/test/instrumentation/rack_test.rb +0 -415
  135. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  136. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  137. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  138. data/test/instrumentation/rails_action_view_test.rb +0 -154
  139. data/test/instrumentation/rails_active_job_test.rb +0 -65
  140. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  141. data/test/instrumentation/rails_active_record_test.rb +0 -116
  142. data/test/instrumentation/redis_test.rb +0 -152
  143. data/test/instrumentation/resque_test.rb +0 -188
  144. data/test/instrumentation/rest_client_test.rb +0 -106
  145. data/test/instrumentation/sequel_test.rb +0 -111
  146. data/test/instrumentation/shoryuken_test.rb +0 -47
  147. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  148. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  149. data/test/secrets_test.rb +0 -112
  150. data/test/serverless_test.rb +0 -369
  151. data/test/snapshot/deltable_test.rb +0 -17
  152. data/test/snapshot/docker_container_test.rb +0 -82
  153. data/test/snapshot/fargate_container_test.rb +0 -82
  154. data/test/snapshot/fargate_process_test.rb +0 -35
  155. data/test/snapshot/fargate_task_test.rb +0 -49
  156. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  157. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  158. data/test/snapshot/lambda_function_test.rb +0 -37
  159. data/test/snapshot/ruby_process_test.rb +0 -32
  160. data/test/support/apps/active_record/active_record.rb +0 -24
  161. data/test/support/apps/grpc/boot.rb +0 -23
  162. data/test/support/apps/grpc/grpc_server.rb +0 -84
  163. data/test/support/apps/http_endpoint/boot.rb +0 -28
  164. data/test/support/apps/rails/boot.rb +0 -219
  165. data/test/support/apps/rails/models/block.rb +0 -21
  166. data/test/support/apps/rails/models/block6.rb +0 -21
  167. data/test/support/apps/resque/boot.rb +0 -5
  168. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  169. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  170. data/test/support/apps/sidekiq/boot.rb +0 -25
  171. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  172. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  173. data/test/support/apps/sidekiq/worker.rb +0 -37
  174. data/test/support/helpers.rb +0 -85
  175. data/test/support/mock_timer.rb +0 -20
  176. data/test/test_helper.rb +0 -69
  177. data/test/trace/custom_test.rb +0 -233
  178. data/test/trace/id_management_test.rb +0 -78
  179. data/test/trace/instrumented_logger_test.rb +0 -39
  180. data/test/trace/processor_test.rb +0 -58
  181. data/test/trace/span_context_test.rb +0 -22
  182. data/test/trace/span_test.rb +0 -179
  183. data/test/trace/tracer_async_test.rb +0 -243
  184. data/test/trace/tracer_provider_test.rb +0 -148
  185. data/test/trace/tracer_test.rb +0 -363
  186. 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.in_span('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.in_span('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.in_span('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.in_span('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.in_span(: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.in_span(: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.in_span(: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.in_span(: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.in_span(: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.in_span(: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.in_span(: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.in_span(: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