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.
- checksums.yaml +4 -4
- data/lib/instana/setup.rb +1 -0
- data/lib/instana/span_filtering/condition.rb +134 -0
- data/lib/instana/span_filtering/configuration.rb +262 -0
- data/lib/instana/span_filtering/filter_rule.rb +31 -0
- data/lib/instana/span_filtering.rb +62 -0
- data/lib/instana/trace/span.rb +5 -3
- data/lib/instana/version.rb +1 -1
- metadata +7 -258
- data/.circleci/config.yml +0 -361
- data/.codeclimate.yml +0 -23
- data/.editorconfig +0 -10
- data/.fasterer.yml +0 -23
- data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
- data/.github/ISSUE_TEMPLATE/config.yml +0 -8
- data/.github/workflows/pr_commits_signed_off.yml +0 -16
- data/.github/workflows/release-notification-on-slack.yml +0 -34
- data/.gitignore +0 -19
- data/.rubocop.yml +0 -34
- data/.rubocop_todo.yml +0 -1140
- data/.tekton/.currency/docs/report.md +0 -20
- data/.tekton/.currency/resources/requirements.txt +0 -4
- data/.tekton/.currency/resources/table.json +0 -100
- data/.tekton/.currency/scripts/generate_report.py +0 -308
- data/.tekton/README.md +0 -278
- data/.tekton/github-interceptor-secret.yaml +0 -8
- data/.tekton/github-pr-eventlistener.yaml +0 -104
- data/.tekton/github-pr-pipeline.yaml.part +0 -38
- data/.tekton/github-set-status-task.yaml +0 -43
- data/.tekton/github-webhook-ingress.yaml +0 -20
- data/.tekton/pipeline.yaml +0 -484
- data/.tekton/pipelinerun.yaml +0 -21
- data/.tekton/prepuller-restart-service-account.yaml +0 -31
- data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
- data/.tekton/ruby-tracer-prepuller.yaml +0 -88
- data/.tekton/run_unittests.sh +0 -87
- data/.tekton/scheduled-eventlistener.yaml +0 -108
- data/.tekton/task.yaml +0 -453
- data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
- data/Appraisals +0 -124
- data/CONTRIBUTING.md +0 -86
- data/Gemfile +0 -22
- data/LICENSE +0 -22
- data/MAINTAINERS.md +0 -3
- data/Rakefile +0 -49
- data/bin/announce_release_on_slack.py +0 -103
- data/docker-compose.yml +0 -20
- data/download.sh +0 -85
- data/examples/otel.rb +0 -98
- data/examples/tracing.rb +0 -85
- data/extras/license_header.rb +0 -44
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/aws_30.gemfile +0 -21
- data/gemfiles/aws_60.gemfile +0 -16
- data/gemfiles/cuba_30.gemfile +0 -16
- data/gemfiles/cuba_40.gemfile +0 -13
- data/gemfiles/dalli_20.gemfile +0 -15
- data/gemfiles/dalli_30.gemfile +0 -12
- data/gemfiles/dalli_32.gemfile +0 -12
- data/gemfiles/excon_0100.gemfile +0 -14
- data/gemfiles/excon_021.gemfile +0 -17
- data/gemfiles/excon_079.gemfile +0 -17
- data/gemfiles/excon_100.gemfile +0 -14
- data/gemfiles/graphql_10.gemfile +0 -16
- data/gemfiles/graphql_20.gemfile +0 -15
- data/gemfiles/grpc_10.gemfile +0 -15
- data/gemfiles/mongo_216.gemfile +0 -15
- data/gemfiles/mongo_219.gemfile +0 -12
- data/gemfiles/net_http_01.gemfile +0 -17
- data/gemfiles/rack_16.gemfile +0 -15
- data/gemfiles/rack_20.gemfile +0 -15
- data/gemfiles/rack_30.gemfile +0 -13
- data/gemfiles/rails_42.gemfile +0 -18
- data/gemfiles/rails_50.gemfile +0 -19
- data/gemfiles/rails_52.gemfile +0 -19
- data/gemfiles/rails_60.gemfile +0 -19
- data/gemfiles/rails_61.gemfile +0 -21
- data/gemfiles/rails_70.gemfile +0 -18
- data/gemfiles/rails_71.gemfile +0 -17
- data/gemfiles/rails_80.gemfile +0 -17
- data/gemfiles/redis_40.gemfile +0 -15
- data/gemfiles/redis_50.gemfile +0 -13
- data/gemfiles/redis_51.gemfile +0 -13
- data/gemfiles/resque_122.gemfile +0 -16
- data/gemfiles/resque_1274_3scale.gemfile +0 -17
- data/gemfiles/resque_20.gemfile +0 -16
- data/gemfiles/rest_client_16.gemfile +0 -17
- data/gemfiles/rest_client_20.gemfile +0 -17
- data/gemfiles/roda_20.gemfile +0 -16
- data/gemfiles/roda_30.gemfile +0 -16
- data/gemfiles/rubocop_162.gemfile +0 -6
- data/gemfiles/sequel_56.gemfile +0 -16
- data/gemfiles/sequel_57.gemfile +0 -16
- data/gemfiles/sequel_58.gemfile +0 -16
- data/gemfiles/shoryuken_50.gemfile +0 -16
- data/gemfiles/shoryuken_60.gemfile +0 -13
- data/gemfiles/sidekiq_42.gemfile +0 -15
- data/gemfiles/sidekiq_50.gemfile +0 -15
- data/gemfiles/sidekiq_60.gemfile +0 -12
- data/gemfiles/sidekiq_65.gemfile +0 -12
- data/gemfiles/sidekiq_70.gemfile +0 -12
- data/gemfiles/sinatra_14.gemfile +0 -15
- data/gemfiles/sinatra_22.gemfile +0 -12
- data/gemfiles/sinatra_30.gemfile +0 -12
- data/gemfiles/sinatra_40.gemfile +0 -12
- data/instana.gemspec +0 -53
- data/log/.keep +0 -0
- data/sonar-project.properties +0 -9
- data/test/activator_test.rb +0 -50
- data/test/backend/agent_test.rb +0 -80
- data/test/backend/gc_snapshot_test.rb +0 -11
- data/test/backend/host_agent_activation_observer_test.rb +0 -73
- data/test/backend/host_agent_lookup_test.rb +0 -78
- data/test/backend/host_agent_reporting_observer_test.rb +0 -276
- data/test/backend/host_agent_test.rb +0 -89
- data/test/backend/process_info_test.rb +0 -83
- data/test/backend/request_client_test.rb +0 -39
- data/test/backend/serverless_agent_test.rb +0 -83
- data/test/benchmarks/bench_id_generation.rb +0 -15
- data/test/benchmarks/bench_opentracing.rb +0 -16
- data/test/config_test.rb +0 -34
- data/test/frameworks/cuba_test.rb +0 -61
- data/test/frameworks/roda_test.rb +0 -60
- data/test/frameworks/sinatra_test.rb +0 -71
- data/test/instana_test.rb +0 -37
- data/test/instrumentation/aws_test.rb +0 -241
- data/test/instrumentation/dalli_test.rb +0 -325
- data/test/instrumentation/excon_test.rb +0 -204
- data/test/instrumentation/graphql_test.rb +0 -289
- data/test/instrumentation/grpc_test.rb +0 -420
- data/test/instrumentation/mongo_test.rb +0 -68
- data/test/instrumentation/net_http_test.rb +0 -220
- data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
- data/test/instrumentation/rack_test.rb +0 -415
- data/test/instrumentation/rails_action_cable_test.rb +0 -135
- data/test/instrumentation/rails_action_controller_test.rb +0 -218
- data/test/instrumentation/rails_action_mailer_test.rb +0 -66
- data/test/instrumentation/rails_action_view_test.rb +0 -154
- data/test/instrumentation/rails_active_job_test.rb +0 -65
- data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
- data/test/instrumentation/rails_active_record_test.rb +0 -116
- data/test/instrumentation/redis_test.rb +0 -152
- data/test/instrumentation/resque_test.rb +0 -188
- data/test/instrumentation/rest_client_test.rb +0 -106
- data/test/instrumentation/sequel_test.rb +0 -111
- data/test/instrumentation/shoryuken_test.rb +0 -47
- data/test/instrumentation/sidekiq-client_test.rb +0 -169
- data/test/instrumentation/sidekiq-worker_test.rb +0 -180
- data/test/secrets_test.rb +0 -112
- data/test/serverless_test.rb +0 -369
- data/test/snapshot/deltable_test.rb +0 -17
- data/test/snapshot/docker_container_test.rb +0 -82
- data/test/snapshot/fargate_container_test.rb +0 -82
- data/test/snapshot/fargate_process_test.rb +0 -35
- data/test/snapshot/fargate_task_test.rb +0 -49
- data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
- data/test/snapshot/google_cloud_run_process_test.rb +0 -33
- data/test/snapshot/lambda_function_test.rb +0 -37
- data/test/snapshot/ruby_process_test.rb +0 -32
- data/test/support/apps/active_record/active_record.rb +0 -24
- data/test/support/apps/grpc/boot.rb +0 -23
- data/test/support/apps/grpc/grpc_server.rb +0 -84
- data/test/support/apps/http_endpoint/boot.rb +0 -28
- data/test/support/apps/rails/boot.rb +0 -219
- data/test/support/apps/rails/models/block.rb +0 -21
- data/test/support/apps/rails/models/block6.rb +0 -21
- data/test/support/apps/resque/boot.rb +0 -5
- data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
- data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
- data/test/support/apps/sidekiq/boot.rb +0 -25
- data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
- data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
- data/test/support/apps/sidekiq/worker.rb +0 -37
- data/test/support/helpers.rb +0 -85
- data/test/support/mock_timer.rb +0 -20
- data/test/test_helper.rb +0 -69
- data/test/trace/custom_test.rb +0 -233
- data/test/trace/id_management_test.rb +0 -78
- data/test/trace/instrumented_logger_test.rb +0 -39
- data/test/trace/processor_test.rb +0 -58
- data/test/trace/span_context_test.rb +0 -22
- data/test/trace/span_test.rb +0 -179
- data/test/trace/tracer_async_test.rb +0 -243
- data/test/trace/tracer_provider_test.rb +0 -148
- data/test/trace/tracer_test.rb +0 -363
- 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
|