instana 1.199.3 → 1.200.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +27 -1
  3. data/.rubocop.yml +11 -2
  4. data/lib/instana.rb +2 -4
  5. data/lib/instana/activators/aws_sdk_dynamodb.rb +1 -1
  6. data/lib/instana/activators/aws_sdk_s3.rb +1 -1
  7. data/lib/instana/activators/aws_sdk_sns.rb +1 -1
  8. data/lib/instana/activators/aws_sdk_sqs.rb +1 -1
  9. data/lib/instana/activators/redis.rb +1 -1
  10. data/lib/instana/activators/resque_worker.rb +4 -2
  11. data/lib/instana/activators/sidekiq_client.rb +1 -1
  12. data/lib/instana/activators/sidekiq_worker.rb +1 -1
  13. data/lib/instana/backend/host_agent.rb +17 -11
  14. data/lib/instana/backend/host_agent_activation_observer.rb +2 -2
  15. data/lib/instana/backend/serverless_agent.rb +1 -1
  16. data/lib/instana/config.rb +3 -1
  17. data/lib/instana/frameworks/roda.rb +1 -1
  18. data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
  19. data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
  20. data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
  21. data/lib/instana/instrumentation/instrumented_request.rb +4 -4
  22. data/lib/instana/instrumentation/rack.rb +1 -1
  23. data/lib/instana/instrumentation/shoryuken.rb +1 -1
  24. data/lib/instana/setup.rb +3 -1
  25. data/lib/instana/snapshot/docker_container.rb +1 -1
  26. data/lib/instana/snapshot/fargate_task.rb +1 -1
  27. data/lib/instana/snapshot/google_cloud_run_instance.rb +1 -1
  28. data/lib/instana/tracing/processor.rb +8 -5
  29. data/lib/instana/tracing/span_context.rb +1 -1
  30. data/lib/instana/version.rb +1 -1
  31. metadata +59 -67
  32. data/benchmarks/10k-rack-traces.rb +0 -95
  33. data/benchmarks/Gemfile +0 -11
  34. data/benchmarks/Gemfile.lock +0 -38
  35. data/benchmarks/id_generation.rb +0 -16
  36. data/benchmarks/opentracing.rb +0 -30
  37. data/benchmarks/rack_vanilla_vs_traced.rb +0 -88
  38. data/benchmarks/stackprof_rack_tracing.rb +0 -80
  39. data/benchmarks/time_processing.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f50b5331be370b903eef0f43c5565c82e6dc91776ee42f2a406820ab77a6281
4
- data.tar.gz: b9f19763f4e27082ecb893706b016e181d9b03993b49e91dc0d106ced00c2689
3
+ metadata.gz: 300da2a4ba4b62f11b6028d9c1482c896be48bf8e17d78f3053e0e54c9bbfa0d
4
+ data.tar.gz: 2956c4c1f541ed290aad66c937ef3700a8e5809062cb29c4badb24754fbcf2f1
5
5
  SHA512:
6
- metadata.gz: 995d7c897b69f00439becf36790caebd57b7e39738ff480ea17e1b4a7c47487f6c28f322bd8b39149e6a182453672b285bc49245b904cbe9eba6cf316ea30582
7
- data.tar.gz: 89c525c7d9ed2b4702b15e6fc8f74158973b5455007e5adbc9250cb504e8d82c5426e257a45690a3518f600eba2f4eb76b6df40eb2bebb2376987627918d0a66
6
+ metadata.gz: 8ac726cfb46337984d4a57e372b6a64dd39b8cbcfdd8b4c34bd03ab6a01013293526d52842709dee38b7dd657c27c8bf0634cc065bcc523b740bfa8377b601f5
7
+ data.tar.gz: 97c0442d0ce046cddef5b782d365b64d8b5b28501967541585b8859f45fe5266f95ac35a9a1ddd137c30818948515ae1f163cb565a5b6807273f01faccf26447
data/.circleci/config.yml CHANGED
@@ -155,7 +155,19 @@ commands:
155
155
  name: Run Tests
156
156
  command: |
157
157
  bundle exec rubocop
158
-
158
+ publish_gem:
159
+ steps:
160
+ - run:
161
+ name: Setup Access
162
+ command: |
163
+ mkdir -p ~/.gem
164
+ echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
165
+ chmod 0600 /home/circleci/.gem/credentials
166
+ - run:
167
+ name: Publish Gem
168
+ command: |
169
+ bundle exec rake release[origin]
170
+
159
171
  jobs:
160
172
  test_core:
161
173
  parameters:
@@ -189,8 +201,22 @@ jobs:
189
201
  - checkout
190
202
  - setup
191
203
  - run_rubocop
204
+ publish:
205
+ executor: ruby_27
206
+ steps:
207
+ - checkout
208
+ - setup
209
+ - publish_gem
192
210
 
193
211
  workflows:
212
+ publish:
213
+ jobs:
214
+ - publish:
215
+ filters:
216
+ branches:
217
+ ignore: /.*/
218
+ tags:
219
+ only: /^v.*/
194
220
  core:
195
221
  jobs:
196
222
  - lint
data/.rubocop.yml CHANGED
@@ -2,11 +2,14 @@ inherit_from: .rubocop_todo.yml
2
2
 
3
3
  require:
4
4
  - ./extras/license_header.rb
5
-
5
+
6
6
  # Remove when we remove .rubocop_todo.yml
7
7
  AllCops:
8
8
  NewCops: disable
9
9
 
10
+ Metrics/PerceivedComplexity:
11
+ Max: 20
12
+
10
13
  # Broken on 1.9
11
14
  Style/HashSyntax:
12
15
  Enabled: false
@@ -19,7 +22,13 @@ Style/NilComparison:
19
22
 
20
23
  Style/SoleNestedConditional:
21
24
  Enabled: false
22
-
25
+
23
26
  # Ruby 2.1 compatibility
24
27
  Style/SafeNavigation:
25
28
  Enabled: false
29
+
30
+ Style/SymbolProc:
31
+ Enabled: false
32
+
33
+ Style/MultilineBlockChain:
34
+ Enabled: false
data/lib/instana.rb CHANGED
@@ -1,10 +1,7 @@
1
1
  # (c) Copyright IBM Corp. 2021
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
- require 'concurrent'
5
- require 'sys-proctable'
6
-
7
- require "instana/setup"
4
+ require 'instana/setup'
8
5
 
9
6
  # Boot the instana agent background thread. If you wish to have greater
10
7
  # control on the where and which thread this is run in, instead use
@@ -15,4 +12,5 @@ require "instana/setup"
15
12
  # the thread of your choice.
16
13
  #
17
14
 
15
+ ::Instana::Activator.start
18
16
  ::Instana.agent.spawn_background_thread
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class AwsDynamoDB < Activator
7
7
  def can_instrument?
8
- defined?(Aws::DynamoDB::Client)
8
+ defined?(::Aws::DynamoDB::Client) && ::Aws::DynamoDB::Client.respond_to?(:add_plugin)
9
9
  end
10
10
 
11
11
  def instrument
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class AwsS3 < Activator
7
7
  def can_instrument?
8
- defined?(Aws::S3::Client)
8
+ defined?(::Aws::S3::Client) && ::Aws::S3::Client.respond_to?(:add_plugin)
9
9
  end
10
10
 
11
11
  def instrument
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class AwsSdkSns < Activator
7
7
  def can_instrument?
8
- defined?(Aws::SNS::Client)
8
+ defined?(::Aws::SNS::Client) && ::Aws::SNS::Client.respond_to?(:add_plugin)
9
9
  end
10
10
 
11
11
  def instrument
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class AwsSdkSqs < Activator
7
7
  def can_instrument?
8
- defined?(Aws::SQS::Client)
8
+ defined?(::Aws::SQS::Client) && ::Aws::SQS::Client.respond_to?(:add_plugin)
9
9
  end
10
10
 
11
11
  def instrument
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class Redis < Activator
7
7
  def can_instrument?
8
- defined?(::Redis) && ::Instana.config[:redis][:enabled]
8
+ defined?(::Redis) && defined?(::Redis::Client) && ::Instana.config[:redis][:enabled]
9
9
  end
10
10
 
11
11
  def instrument
@@ -16,8 +16,10 @@ module Instana
16
16
  ::Resque::Worker.prepend(::Instana::Instrumentation::ResqueWorker)
17
17
  ::Resque::Job.prepend(::Instana::Instrumentation::ResqueJob)
18
18
 
19
- ::Resque.after_fork do |_job|
20
- ::Instana.agent.after_fork
19
+ if ::Instana.config[:'resque-worker'][:'setup-fork']
20
+ ::Resque.after_fork do |_job|
21
+ ::Instana.agent.after_fork
22
+ end
21
23
  end
22
24
 
23
25
  # Set this so we assure that any remaining collected traces are reported at_exit
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class SidekiqClient < Activator
7
7
  def can_instrument?
8
- defined?(::Sidekiq) && ::Instana.config[:'sidekiq-client'][:enabled]
8
+ defined?(::Sidekiq) && ::Sidekiq.respond_to?(:configure_client) && ::Instana.config[:'sidekiq-client'][:enabled]
9
9
  end
10
10
 
11
11
  def instrument
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class SidekiqWorker < Activator
7
7
  def can_instrument?
8
- defined?(::Sidekiq) && ::Instana.config[:'sidekiq-worker'][:enabled]
8
+ defined?(::Sidekiq) && ::Sidekiq.respond_to?(:configure_server) && ::Instana.config[:'sidekiq-worker'][:enabled]
9
9
  end
10
10
 
11
11
  def instrument
@@ -5,12 +5,13 @@ module Instana
5
5
  module Backend
6
6
  # @since 1.197.0
7
7
  class HostAgent
8
- attr_reader :future
8
+ attr_reader :future, :client
9
9
 
10
10
  def initialize(discovery: Concurrent::Atom.new(nil), logger: ::Instana.logger)
11
11
  @discovery = discovery
12
12
  @logger = logger
13
13
  @future = nil
14
+ @client = nil
14
15
  end
15
16
 
16
17
  def setup; end
@@ -19,19 +20,24 @@ module Instana
19
20
  return if ENV.key?('INSTANA_TEST')
20
21
 
21
22
  @future = Concurrent::Promises.future do
22
- client = until_not_nil { HostAgentLookup.new.call }
23
- @discovery.delete_observers
24
- @discovery
25
- .with_observer(HostAgentActivationObserver.new(client, @discovery))
26
- .with_observer(HostAgentReportingObserver.new(client, @discovery))
27
-
28
- @discovery.swap { nil }
29
- client
23
+ announce
30
24
  end
31
25
  end
32
26
 
33
27
  alias start spawn_background_thread
34
- alias after_fork spawn_background_thread
28
+
29
+ def announce
30
+ @client = until_not_nil { HostAgentLookup.new.call }
31
+ @discovery.delete_observers
32
+ @discovery
33
+ .with_observer(HostAgentActivationObserver.new(@client, @discovery))
34
+ .with_observer(HostAgentReportingObserver.new(@client, @discovery))
35
+
36
+ @discovery.swap { nil }
37
+ @client
38
+ end
39
+
40
+ alias after_fork announce
35
41
 
36
42
  # @return [Boolean] true if the agent able to send spans to the backend
37
43
  def ready?
@@ -43,7 +49,7 @@ module Instana
43
49
  {
44
50
  e: discovery_value['pid'],
45
51
  h: discovery_value['agentUuid']
46
- }.compact
52
+ }.reject { |_, v| v.nil? }
47
53
  end
48
54
 
49
55
  # @return [Array] extra headers to include in the trace
@@ -12,7 +12,7 @@ module Instana
12
12
 
13
13
  # @param [RequestClient] client used to make requests to the backend
14
14
  # @param [Concurrent::Atom] discovery object used to store discovery response in
15
- def initialize(client, discovery, wait_time: 1, logger: ::Instana.logger, max_wait_tries: 60, proc_table: Sys::ProcTable, socket_proc: default_socket_proc) # rubocop:disable Metrics/ParameterLists
15
+ def initialize(client, discovery, wait_time: 30, logger: ::Instana.logger, max_wait_tries: 60, proc_table: Sys::ProcTable, socket_proc: default_socket_proc) # rubocop:disable Metrics/ParameterLists
16
16
  @client = client
17
17
  @discovery = discovery
18
18
  @wait_time = wait_time
@@ -82,7 +82,7 @@ module Instana
82
82
  def try_forever_with_backoff
83
83
  yield
84
84
  rescue DiscoveryError, Net::OpenTimeout => e
85
- @logger.warn(e)
85
+ @logger.debug(e)
86
86
  sleep(@wait_time)
87
87
  retry
88
88
  rescue StandardError => e
@@ -98,7 +98,7 @@ module Instana
98
98
  @logger.error(e.message)
99
99
  nil
100
100
  end
101
- end.compact
101
+ end.reject { |_, v| v.nil? }
102
102
  end
103
103
 
104
104
  def host_name
@@ -53,6 +53,8 @@ module Instana
53
53
  # W3 Trace Context Support
54
54
  @config[:w3_trace_correlation] = ENV['INSTANA_DISABLE_W3C_TRACE_CORRELATION'].nil?
55
55
 
56
+ @config[:post_fork_proc] = proc { ::Instana.agent.spawn_background_thread }
57
+
56
58
  @config[:action_controller] = { :enabled => true }
57
59
  @config[:action_view] = { :enabled => true }
58
60
  @config[:active_record] = { :enabled => true }
@@ -63,7 +65,7 @@ module Instana
63
65
  @config[:nethttp] = { :enabled => true }
64
66
  @config[:redis] = { :enabled => true }
65
67
  @config[:'resque-client'] = { :enabled => true }
66
- @config[:'resque-worker'] = { :enabled => true }
68
+ @config[:'resque-worker'] = { :enabled => true, :'setup-fork' => true }
67
69
  @config[:'rest-client'] = { :enabled => true }
68
70
  @config[:'sidekiq-client'] = { :enabled => true }
69
71
  @config[:'sidekiq-worker'] = { :enabled => true }
@@ -37,7 +37,7 @@ module Instana
37
37
  _, name = parameters.pop
38
38
  "{#{name}}"
39
39
  end
40
- end.compact
40
+ end.reject { |v| v.nil? }
41
41
  end
42
42
  end
43
43
  end
@@ -10,7 +10,7 @@ module Instana
10
10
  op: format_operation(context.operation_name),
11
11
  bucket: bucket_name_from(context),
12
12
  key: key_from_context(context)
13
- }.compact
13
+ }.reject { |_, v| v.nil? }
14
14
 
15
15
  ::Instana.tracer.trace(:s3, {s3: s3_tags}) { @handler.call(context) }
16
16
  end
@@ -11,7 +11,7 @@ module Instana
11
11
  target: context.params[:target_arn],
12
12
  phone: context.params[:phone_number],
13
13
  subject: context.params[:subject]
14
- }.compact
14
+ }.reject { |_, v| v.nil? }
15
15
 
16
16
  if context.operation_name == :publish
17
17
  ::Instana.tracer.trace(:sns, {sns: sns_tags}) { @handler.call(context) }
@@ -13,7 +13,7 @@ module Instana
13
13
  return @handler.call(context)
14
14
  end
15
15
 
16
- span_tags = tags_for(context.operation_name, context.params).compact
16
+ span_tags = tags_for(context.operation_name, context.params).reject { |_, v| v.nil? }
17
17
 
18
18
  ::Instana.tracer.trace(:sqs, {sqs: span_tags}) do |span|
19
19
  case context.operation_name
@@ -74,7 +74,7 @@ module Instana
74
74
  host: host_with_port,
75
75
  header: extra_header_tags,
76
76
  params: request_params
77
- }.compact
77
+ }.reject { |_, v| v.nil? }
78
78
  end
79
79
 
80
80
  def correlation_data
@@ -123,7 +123,7 @@ module Instana
123
123
  external_trace_id: external_trace_id,
124
124
  external_state: @env['HTTP_TRACESTATE'],
125
125
  from_w3: false
126
- }.compact
126
+ }.reject { |_, v| v.nil? }
127
127
  end
128
128
 
129
129
  def context_from_trace_parent
@@ -150,7 +150,7 @@ module Instana
150
150
  trace_id: state[:t],
151
151
  span_id: state[:p],
152
152
  from_w3: false
153
- }.compact
153
+ }.reject { |_, v| v.nil? }
154
154
  end
155
155
 
156
156
  def parse_trace_state
@@ -179,7 +179,7 @@ module Instana
179
179
  {
180
180
  type: data['correlationType'],
181
181
  id: data['correlationId']
182
- }.compact
182
+ }.reject { |_, v| v.nil? }
183
183
  end
184
184
  end
185
185
  end
@@ -15,7 +15,7 @@ module Instana
15
15
  kvs = {
16
16
  http: req.request_tags,
17
17
  service: ENV['INSTANA_SERVICE_NAME']
18
- }.compact
18
+ }.reject { |_, v| v.nil? }
19
19
 
20
20
  current_span = ::Instana.tracer.log_start_or_continue(:rack, {}, req.incoming_context)
21
21
 
@@ -29,7 +29,7 @@ module Instana
29
29
  trace_id: trace_id,
30
30
  span_id: span_id,
31
31
  level: level
32
- }.compact
32
+ }.reject { |_, v| v.nil? }
33
33
  end
34
34
 
35
35
  def try(attributes, *args)
data/lib/instana/setup.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # (c) Copyright IBM Corp. 2021
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
+ require 'concurrent'
5
+ require 'sys-proctable'
6
+
4
7
  require 'instana/logger_delegator'
5
8
 
6
9
  require "instana/base"
@@ -37,7 +40,6 @@ require 'instana/backend/agent'
37
40
 
38
41
  ::Instana.setup
39
42
  ::Instana.agent.setup
40
- ::Instana::Activator.start
41
43
 
42
44
  # Require supported OpenTracing interfaces
43
45
  require "opentracing"
@@ -56,7 +56,7 @@ module Instana
56
56
  blkio: blkio_stats(metrics),
57
57
  cpu: cpu_stats(metrics),
58
58
  network: network_stats(metrics)
59
- }.compact
59
+ }.reject { |_, v| v.nil? }
60
60
  end
61
61
 
62
62
  def memory_stats(metrics)
@@ -31,7 +31,7 @@ module Instana
31
31
  pullStoppedAt: task_metadata['PullStoppedAt'],
32
32
  instanaZone: instana_zone,
33
33
  tags: instana_tags
34
- }.compact
34
+ }.reject { |_, v| v.nil? }
35
35
  end
36
36
 
37
37
  def snapshot
@@ -27,7 +27,7 @@ module Instana
27
27
  port: ENV['PORT'],
28
28
  numericProjectId: lookup('/computeMetadata/v1/project/numeric-project-id'),
29
29
  projectId: lookup('/computeMetadata/v1/project/project-id')
30
- }.compact
30
+ }.reject { |_, v| v.nil? }
31
31
  end
32
32
 
33
33
  def snapshot
@@ -5,6 +5,9 @@ require 'thread'
5
5
 
6
6
  module Instana
7
7
  class Processor
8
+ extend Forwardable
9
+ def_delegators :@queue, :empty?
10
+
8
11
  def initialize(logger: ::Instana.logger)
9
12
  # The main queue before being reported to the
10
13
  # host agent. Spans in this queue are complete
@@ -15,7 +18,7 @@ module Instana
15
18
  # agent at once.
16
19
  @batch_size = 3000
17
20
  @logger = logger
18
- @pid = $PROCESS_ID
21
+ @pid = Process.pid
19
22
  end
20
23
 
21
24
  # Adds a span to the span queue
@@ -23,10 +26,10 @@ module Instana
23
26
  # @param [Trace] - the trace to be added to the queue
24
27
  def add_span(span)
25
28
  # :nocov:
26
- if @pid != $PROCESS_ID
27
- @logger.info("Proces `#{@pid}` has forked into #{$PROCESS_ID}. Resetting discovery.")
28
- ::Instana.agent.spawn_background_thread
29
- @pid = $PROCESS_ID
29
+ if @pid != Process.pid
30
+ @logger.info("Proces `#{@pid}` has forked into #{Process.pid}. Running post fork hook.")
31
+ ::Instana.config[:post_fork_proc].call
32
+ @pid = Process.pid
30
33
  end
31
34
  # :nocov:
32
35
 
@@ -47,7 +47,7 @@ module Instana
47
47
  state.unshift("in=#{trace_id_header};#{span_id_header}")
48
48
  end
49
49
 
50
- state.compact.join(',')
50
+ state.reject { |v| v.nil? }.join(',')
51
51
  end
52
52
 
53
53
  def to_hash
@@ -2,6 +2,6 @@
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
4
  module Instana
5
- VERSION = "1.199.3"
5
+ VERSION = "1.200.0"
6
6
  VERSION_FULL = "instana-#{VERSION}"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instana
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.199.3
4
+ version: 1.200.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Giacomo Lombardo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-13 00:00:00.000000000 Z
11
+ date: 2021-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -143,14 +143,6 @@ files:
143
143
  - LICENSE
144
144
  - README.md
145
145
  - Rakefile
146
- - benchmarks/10k-rack-traces.rb
147
- - benchmarks/Gemfile
148
- - benchmarks/Gemfile.lock
149
- - benchmarks/id_generation.rb
150
- - benchmarks/opentracing.rb
151
- - benchmarks/rack_vanilla_vs_traced.rb
152
- - benchmarks/stackprof_rack_tracing.rb
153
- - benchmarks/time_processing.rb
154
146
  - bin/console
155
147
  - bin/setup
156
148
  - docker-compose.yml
@@ -369,80 +361,80 @@ required_rubygems_version: !ruby/object:Gem::Requirement
369
361
  - !ruby/object:Gem::Version
370
362
  version: '0'
371
363
  requirements: []
372
- rubygems_version: 3.2.6
364
+ rubygems_version: 3.1.6
373
365
  signing_key:
374
366
  specification_version: 4
375
367
  summary: Ruby Distributed Tracing & Metrics Sensor for Instana
376
368
  test_files:
377
- - test/config_test.rb
378
- - test/serverless_test.rb
379
369
  - test/activator_test.rb
380
- - test/tracing/span_context_test.rb
381
- - test/tracing/span_test.rb
382
- - test/tracing/id_management_test.rb
383
- - test/tracing/tracer_test.rb
384
- - test/tracing/custom_test.rb
385
- - test/tracing/opentracing_test.rb
386
- - test/tracing/tracer_async_test.rb
387
- - test/tracing/processor_test.rb
388
- - test/snapshot/docker_container_test.rb
389
- - test/snapshot/fargate_process_test.rb
390
- - test/snapshot/deltable_test.rb
391
- - test/snapshot/fargate_task_test.rb
392
- - test/snapshot/ruby_process_test.rb
393
- - test/snapshot/google_cloud_run_process_test.rb
394
- - test/snapshot/lambda_function_test.rb
395
- - test/snapshot/fargate_container_test.rb
396
- - test/snapshot/google_cloud_run_instance_test.rb
397
- - test/backend/host_agent_activation_observer_test.rb
398
- - test/backend/host_agent_reporting_observer_test.rb
370
+ - test/backend/agent_test.rb
399
371
  - test/backend/gc_snapshot_test.rb
372
+ - test/backend/host_agent_activation_observer_test.rb
400
373
  - test/backend/host_agent_lookup_test.rb
401
- - test/backend/serverless_agent_test.rb
402
- - test/backend/process_info_test.rb
403
- - test/backend/agent_test.rb
374
+ - test/backend/host_agent_reporting_observer_test.rb
404
375
  - test/backend/host_agent_test.rb
376
+ - test/backend/process_info_test.rb
405
377
  - test/backend/request_client_test.rb
406
- - test/secrets_test.rb
378
+ - test/backend/serverless_agent_test.rb
379
+ - test/benchmarks/bench_id_generation.rb
380
+ - test/benchmarks/bench_opentracing.rb
381
+ - test/config_test.rb
382
+ - test/frameworks/cuba_test.rb
383
+ - test/frameworks/roda_test.rb
384
+ - test/frameworks/sinatra_test.rb
385
+ - test/instana_test.rb
386
+ - test/instrumentation/aws_test.rb
387
+ - test/instrumentation/dalli_test.rb
388
+ - test/instrumentation/excon_test.rb
407
389
  - test/instrumentation/graphql_test.rb
408
- - test/instrumentation/sidekiq-client_test.rb
409
- - test/instrumentation/rails_action_controller_test.rb
410
- - test/instrumentation/rest_client_test.rb
390
+ - test/instrumentation/grpc_test.rb
411
391
  - test/instrumentation/net_http_test.rb
412
- - test/instrumentation/resque_test.rb
413
- - test/instrumentation/sidekiq-worker_test.rb
414
- - test/instrumentation/rails_action_view_test.rb
415
- - test/instrumentation/rack_test.rb
416
392
  - test/instrumentation/rack_instrumented_request_test.rb
417
- - test/instrumentation/shoryuken_test.rb
393
+ - test/instrumentation/rack_test.rb
394
+ - test/instrumentation/rails_action_cable_test.rb
395
+ - test/instrumentation/rails_action_controller_test.rb
396
+ - test/instrumentation/rails_action_view_test.rb
418
397
  - test/instrumentation/rails_active_record_test.rb
419
398
  - test/instrumentation/redis_test.rb
420
- - test/instrumentation/dalli_test.rb
421
- - test/instrumentation/rails_action_cable_test.rb
422
- - test/instrumentation/excon_test.rb
423
- - test/instrumentation/grpc_test.rb
424
- - test/instrumentation/aws_test.rb
425
- - test/util_test.rb
426
- - test/support/helpers.rb
427
- - test/support/mock_timer.rb
428
- - test/support/apps/sidekiq/boot.rb
429
- - test/support/apps/sidekiq/jobs/sidekiq_job_2.rb
430
- - test/support/apps/sidekiq/jobs/sidekiq_job_1.rb
431
- - test/support/apps/sidekiq/worker.rb
399
+ - test/instrumentation/resque_test.rb
400
+ - test/instrumentation/rest_client_test.rb
401
+ - test/instrumentation/shoryuken_test.rb
402
+ - test/instrumentation/sidekiq-client_test.rb
403
+ - test/instrumentation/sidekiq-worker_test.rb
404
+ - test/secrets_test.rb
405
+ - test/serverless_test.rb
406
+ - test/snapshot/deltable_test.rb
407
+ - test/snapshot/docker_container_test.rb
408
+ - test/snapshot/fargate_container_test.rb
409
+ - test/snapshot/fargate_process_test.rb
410
+ - test/snapshot/fargate_task_test.rb
411
+ - test/snapshot/google_cloud_run_instance_test.rb
412
+ - test/snapshot/google_cloud_run_process_test.rb
413
+ - test/snapshot/lambda_function_test.rb
414
+ - test/snapshot/ruby_process_test.rb
415
+ - test/support/apps/active_record/active_record.rb
432
416
  - test/support/apps/grpc/boot.rb
433
417
  - test/support/apps/grpc/grpc_server.rb
434
- - test/support/apps/active_record/active_record.rb
435
- - test/support/apps/resque/boot.rb
436
- - test/support/apps/resque/jobs/resque_error_job.rb
437
- - test/support/apps/resque/jobs/resque_fast_job.rb
438
418
  - test/support/apps/http_endpoint/boot.rb
419
+ - test/support/apps/rails/boot.rb
439
420
  - test/support/apps/rails/models/block.rb
440
421
  - test/support/apps/rails/models/block6.rb
441
- - test/support/apps/rails/boot.rb
442
- - test/benchmarks/bench_opentracing.rb
443
- - test/benchmarks/bench_id_generation.rb
422
+ - test/support/apps/resque/boot.rb
423
+ - test/support/apps/resque/jobs/resque_error_job.rb
424
+ - test/support/apps/resque/jobs/resque_fast_job.rb
425
+ - test/support/apps/sidekiq/boot.rb
426
+ - test/support/apps/sidekiq/jobs/sidekiq_job_1.rb
427
+ - test/support/apps/sidekiq/jobs/sidekiq_job_2.rb
428
+ - test/support/apps/sidekiq/worker.rb
429
+ - test/support/helpers.rb
430
+ - test/support/mock_timer.rb
444
431
  - test/test_helper.rb
445
- - test/frameworks/cuba_test.rb
446
- - test/frameworks/roda_test.rb
447
- - test/frameworks/sinatra_test.rb
448
- - test/instana_test.rb
432
+ - test/tracing/custom_test.rb
433
+ - test/tracing/id_management_test.rb
434
+ - test/tracing/opentracing_test.rb
435
+ - test/tracing/processor_test.rb
436
+ - test/tracing/span_context_test.rb
437
+ - test/tracing/span_test.rb
438
+ - test/tracing/tracer_async_test.rb
439
+ - test/tracing/tracer_test.rb
440
+ - test/util_test.rb
@@ -1,95 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require "bundler"
5
-
6
- require 'rack'
7
- require 'rack/builder'
8
- require 'rack/handler/puma'
9
- require 'net/http'
10
- require "cgi"
11
- Bundler.require(:default)
12
- require "instana/rack"
13
- require 'ruby-prof'
14
-
15
- Thread.new do
16
- app = Rack::Builder.new {
17
- map "/" do
18
- run Proc.new {
19
- [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
20
- }
21
- end
22
- map "/error" do
23
- run Proc.new {
24
- [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
25
- }
26
- end
27
- }
28
-
29
- Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7011})
30
- end
31
-
32
- Thread.new do
33
- app = Rack::Builder.new {
34
- use ::Instana::Rack
35
- map "/" do
36
- run Proc.new {
37
- [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
38
- }
39
- end
40
- map "/error" do
41
- run Proc.new {
42
- [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
43
- }
44
- end
45
- }
46
-
47
- Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
48
- end
49
-
50
- puts ""
51
- puts "Vanilla Rack server started in background thread on localhost:7011"
52
- puts "Instrumented Rack server started in background thread on localhost:7012"
53
- puts ""
54
- puts "Waiting on successful announce to host agent..."
55
- puts ""
56
-
57
- #RubyProf.measure_mode = RubyProf::WALL_TIME
58
- #RubyProf.measure_mode = RubyProf::PROCESS_TIME
59
- RubyProf.measure_mode = RubyProf::ALLOCATIONS
60
- #RubyProf.measure_mode = RubyProf::MEMORY
61
-
62
- while !::Instana.agent.ready? do
63
- sleep 2
64
- end
65
-
66
- puts "Starting 10k Traces..."
67
-
68
- # uri = URI.parse("http://127.0.0.1:7011/")
69
- # ::Net::HTTP.start(uri.host, uri.port) do |hc|
70
- # x.report("vanilla") {
71
- # 10_000.times {
72
- # req = Net::HTTP::Get.new(uri.request_uri)
73
- # hc.request(req)
74
- # }
75
- # }
76
- # end
77
-
78
- uri = URI.parse("http://127.0.0.1:7012/")
79
- result = RubyProf.profile do
80
- 1.times {
81
- ::Instana.tracer.start_or_continue_trace(:job, {:kind => :entry}) do
82
- ::Net::HTTP.start(uri.host, uri.port) do |hc|
83
- ::Instana.tracer.start_or_continue_trace(:rack_call) do
84
- req = Net::HTTP::Get.new(uri.request_uri)
85
- hc.request(req)
86
- end
87
- end
88
- end
89
- }
90
- end
91
-
92
- puts "Done - displaying results..."
93
-
94
- printer = RubyProf::FlatPrinter.new(result)
95
- printer.print(STDOUT, {})
data/benchmarks/Gemfile DELETED
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # (c) Copyright IBM Corp. 2021
4
- # (c) Copyright Instana Inc. 2017
5
-
6
- source "https://rubygems.org"
7
-
8
- git_source(:github) {|repo_name| "https://github.com/instana/#{repo_name}" }
9
-
10
- gem "instana", :path => "~/Projects/instana/ruby-sensor"
11
-
@@ -1,38 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- instana (1.9.6)
5
- ffi (>= 1.0.11)
6
- get_process_mem (>= 0.2.1)
7
- oj (>= 3.0.11)
8
- sys-proctable (>= 0.9.2)
9
- timers (>= 4.0.0)
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- ffi (1.11.1)
15
- get_process_mem (0.2.4)
16
- ffi (~> 1.0)
17
- nio4r (2.4.0)
18
- oj (3.8.1)
19
- puma (4.1.0)
20
- nio4r (~> 2.0)
21
- rack (2.0.7)
22
- ruby-prof (1.0.0)
23
- sys-proctable (1.2.2)
24
- ffi
25
- timers (4.3.0)
26
-
27
- PLATFORMS
28
- ruby
29
- x86_64-darwin-18
30
-
31
- DEPENDENCIES
32
- instana!
33
- puma
34
- rack
35
- ruby-prof
36
-
37
- BUNDLED WITH
38
- 2.0.2
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # (c) Copyright IBM Corp. 2021
4
- # (c) Copyright Instana Inc. 2017
5
-
6
- require "bundler"
7
- Bundler.require(:default)
8
-
9
- require "benchmark"
10
-
11
- ID_RANGE = -2**63..2**63-1
12
-
13
- Benchmark.bm do |x|
14
- x.report("generate_id raw ") { 1_000_000.times { rand(-2**63..2**63-1) } }
15
- x.report("with fixed range ") { 1_000_000.times { rand(ID_RANGE) } }
16
- end
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # (c) Copyright IBM Corp. 2021
4
- # (c) Copyright Instana Inc. 2017
5
-
6
- require "bundler"
7
- Bundler.require(:default)
8
-
9
- require "benchmark"
10
-
11
- Benchmark.bm do |x|
12
- x.report("start_span, finish: ") {
13
- 50_000.times {
14
- ::Instana.tracer.start_span(:blah).finish
15
- }
16
- }
17
-
18
- x.report("start_span, set_tag(5x), finish:") {
19
- 50_000.times {
20
- span = ::Instana.tracer.start_span(:blah)
21
- span.set_tag(:blah, 1)
22
- span.set_tag(:dog, 1)
23
- span.set_tag(:moon, "ok")
24
- span.set_tag(:ape, 1)
25
- span.set_tag(:blah, 1)
26
- span.finish
27
- }
28
- }
29
-
30
- end
@@ -1,88 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require "bundler"
5
-
6
- require 'rack'
7
- require 'rack/builder'
8
- require 'rack/handler/puma'
9
- require 'net/http'
10
- require "benchmark"
11
- require "cgi"
12
- Bundler.require(:default)
13
- require "instana/rack"
14
-
15
- Thread.new do
16
- app = Rack::Builder.new {
17
- map "/" do
18
- run Proc.new {
19
- [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
20
- }
21
- end
22
- map "/error" do
23
- run Proc.new {
24
- [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
25
- }
26
- end
27
- }
28
-
29
- Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7011})
30
- end
31
-
32
- Thread.new do
33
- app = Rack::Builder.new {
34
- use ::Instana::Rack
35
- map "/" do
36
- run Proc.new {
37
- [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
38
- }
39
- end
40
- map "/error" do
41
- run Proc.new {
42
- [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
43
- }
44
- end
45
- }
46
-
47
- Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
48
- end
49
-
50
- puts ""
51
- puts "Vanilla Rack server started in background thread on localhost:7011"
52
- puts "Instrumented Rack server started in background thread on localhost:7012"
53
- puts ""
54
- puts "Waiting on successful announce to host agent..."
55
- puts ""
56
-
57
- while !::Instana.agent.ready? do
58
- sleep 2
59
- end
60
-
61
- puts "Starting benchmarks"
62
- Benchmark.bm do |x|
63
-
64
- uri = URI.parse("http://127.0.0.1:7011/")
65
- ::Net::HTTP.start(uri.host, uri.port) do |hc|
66
- x.report("vanilla") {
67
- 1_000.times {
68
- req = Net::HTTP::Get.new(uri.request_uri)
69
- hc.request(req)
70
- }
71
- }
72
- end
73
-
74
- uri = URI.parse("http://127.0.0.1:7012/")
75
- ::Net::HTTP.start(uri.host, uri.port) do |hc|
76
- x.report("traced ") {
77
- 1_000.times {
78
- ::Instana.tracer.start_or_continue_trace(:rack_call) do
79
- req = Net::HTTP::Get.new(uri.request_uri)
80
- hc.request(req)
81
- end
82
- }
83
- }
84
- end
85
- end
86
-
87
-
88
- sleep 10
@@ -1,80 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require "bundler"
5
- require "stackprof"
6
- require 'rack'
7
- require 'rack/builder'
8
- require 'rack/handler/puma'
9
- require 'net/http'
10
- require "benchmark"
11
- require "cgi"
12
- Bundler.require(:default)
13
- require "instana/rack"
14
-
15
- Thread.new do
16
- app = Rack::Builder.new {
17
- map "/" do
18
- run Proc.new {
19
- [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
20
- }
21
- end
22
- map "/error" do
23
- run Proc.new {
24
- [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
25
- }
26
- end
27
- }
28
-
29
- Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7011})
30
- end
31
-
32
- Thread.new do
33
- app = Rack::Builder.new {
34
- use ::Instana::Rack
35
- map "/" do
36
- run Proc.new {
37
- [200, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"scene!\"]"]]
38
- }
39
- end
40
- map "/error" do
41
- run Proc.new {
42
- [500, {"Content-Type" => "application/json"}, ["[\"Stan\",\"is\",\"on\",\"the\",\"error!\"]"]]
43
- }
44
- end
45
- }
46
-
47
- Rack::Handler::Puma.run(app, {:Host => '127.0.0.1', :Port => 7012})
48
- end
49
-
50
- sleep(2)
51
- puts "Rack server started in background thread on localhost:7011"
52
- puts "Sleeping for 10 to allow announce"
53
- sleep(10)
54
-
55
- puts "Starting profile"
56
- uri = URI.parse("http://127.0.0.1:7011/")
57
- StackProf.run(mode: :wall, out: 'tmp/stackprof-rack-vanilla.dump') do
58
- ::Net::HTTP.start(uri.host, uri.port) do |hc|
59
- 5_000.times {
60
- ::Instana.tracer.start_or_continue_trace(:rack_call) do
61
- req = Net::HTTP::Get.new(uri.request_uri)
62
- hc.request(req)
63
- end
64
- }
65
- end
66
- end
67
- puts "stackprof tmp/stackprof-rack-vanilla.dump --text"
68
-
69
- uri = URI.parse("http://127.0.0.1:7012/")
70
- StackProf.run(mode: :wall, out: 'tmp/stackprof-rack-instrumented.dump') do
71
- ::Net::HTTP.start(uri.host, uri.port) do |hc|
72
- 5_000.times {
73
- ::Instana.tracer.start_or_continue_trace(:rack_call) do
74
- req = Net::HTTP::Get.new(uri.request_uri)
75
- hc.request(req)
76
- end
77
- }
78
- end
79
- end
80
- puts "stackprof tmp/stackprof-rack-instrumented.dump --text"
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # (c) Copyright IBM Corp. 2021
4
- # (c) Copyright Instana Inc. 2017
5
-
6
- require "bundler"
7
- Bundler.require(:default)
8
-
9
- require "benchmark"
10
-
11
- # Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
12
-
13
- Benchmark.bm do |x|
14
- x.report("Time.now: ") { 1_000_000.times { (Time.now.to_f * 1000).floor } }
15
- x.report("get_clocktime:") { 1_000_000.times { Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond) } }
16
- end