instana 1.195.0 → 1.197.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +16 -2
  3. data/.rubocop.yml +6 -2
  4. data/Appraisals +13 -1
  5. data/Rakefile +1 -1
  6. data/docker-compose.yml +20 -0
  7. data/gemfiles/aws_30.gemfile +3 -0
  8. data/gemfiles/excon_021.gemfile +18 -0
  9. data/gemfiles/excon_079.gemfile +18 -0
  10. data/gemfiles/shoryuken_50.gemfile +19 -0
  11. data/instana.gemspec +3 -7
  12. data/lib/instana.rb +3 -0
  13. data/lib/instana/activator.rb +2 -0
  14. data/lib/instana/activators/aws_sdk_s3.rb +20 -0
  15. data/lib/instana/activators/aws_sdk_sns.rb +20 -0
  16. data/lib/instana/activators/aws_sdk_sqs.rb +20 -0
  17. data/lib/instana/activators/excon.rb +1 -1
  18. data/lib/instana/activators/shoryuken.rb +24 -0
  19. data/lib/instana/backend/agent.rb +60 -0
  20. data/lib/instana/backend/gc_snapshot.rb +41 -0
  21. data/lib/instana/backend/host_agent.rb +57 -0
  22. data/lib/instana/backend/host_agent_activation_observer.rb +87 -0
  23. data/lib/instana/backend/host_agent_lookup.rb +57 -0
  24. data/lib/instana/backend/host_agent_reporting_observer.rb +106 -0
  25. data/lib/instana/backend/process_info.rb +64 -0
  26. data/lib/instana/backend/request_client.rb +84 -0
  27. data/lib/instana/backend/serverless_agent.rb +118 -0
  28. data/lib/instana/base.rb +8 -27
  29. data/lib/instana/config.rb +7 -21
  30. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +21 -2
  31. data/lib/instana/instrumentation/aws_sdk_s3.rb +55 -0
  32. data/lib/instana/instrumentation/aws_sdk_sns.rb +29 -0
  33. data/lib/instana/instrumentation/aws_sdk_sqs.rb +98 -0
  34. data/lib/instana/instrumentation/excon.rb +12 -4
  35. data/lib/instana/instrumentation/instrumented_request.rb +7 -2
  36. data/lib/instana/instrumentation/net-http.rb +4 -2
  37. data/lib/instana/instrumentation/shoryuken.rb +44 -0
  38. data/lib/instana/logger_delegator.rb +31 -0
  39. data/lib/instana/{opentracing → open_tracing}/carrier.rb +0 -0
  40. data/lib/instana/open_tracing/instana_tracer.rb +99 -0
  41. data/lib/instana/secrets.rb +8 -4
  42. data/lib/instana/setup.rb +20 -11
  43. data/lib/instana/snapshot/deltable.rb +25 -0
  44. data/lib/instana/snapshot/docker_container.rb +151 -0
  45. data/lib/instana/snapshot/fargate_container.rb +88 -0
  46. data/lib/instana/snapshot/fargate_process.rb +67 -0
  47. data/lib/instana/snapshot/fargate_task.rb +72 -0
  48. data/lib/instana/snapshot/ruby_process.rb +48 -0
  49. data/lib/instana/tracer.rb +29 -147
  50. data/lib/instana/tracing/processor.rb +4 -22
  51. data/lib/instana/tracing/span.rb +29 -38
  52. data/lib/instana/tracing/span_context.rb +3 -2
  53. data/lib/instana/util.rb +4 -67
  54. data/lib/instana/version.rb +1 -1
  55. data/lib/opentracing.rb +26 -3
  56. data/test/backend/agent_test.rb +54 -0
  57. data/test/backend/gc_snapshot_test.rb +11 -0
  58. data/test/backend/host_agent_activation_observer_test.rb +65 -0
  59. data/test/backend/host_agent_lookup_test.rb +78 -0
  60. data/test/backend/host_agent_reporting_observer_test.rb +192 -0
  61. data/test/backend/host_agent_test.rb +32 -0
  62. data/test/backend/process_info_test.rb +63 -0
  63. data/test/backend/request_client_test.rb +61 -0
  64. data/test/backend/serverless_agent_test.rb +73 -0
  65. data/test/config_test.rb +10 -0
  66. data/test/instana_test.rb +11 -4
  67. data/test/instrumentation/aws_test.rb +130 -2
  68. data/test/instrumentation/excon_test.rb +16 -1
  69. data/test/instrumentation/net_http_test.rb +18 -0
  70. data/test/instrumentation/rack_instrumented_request_test.rb +7 -4
  71. data/test/instrumentation/rack_test.rb +2 -14
  72. data/test/instrumentation/shoryuken_test.rb +47 -0
  73. data/test/secrets_test.rb +41 -22
  74. data/test/snapshot/deltable_test.rb +17 -0
  75. data/test/snapshot/docker_container_test.rb +82 -0
  76. data/test/snapshot/fargate_container_test.rb +82 -0
  77. data/test/snapshot/fargate_process_test.rb +35 -0
  78. data/test/snapshot/fargate_task_test.rb +49 -0
  79. data/test/snapshot/ruby_process_test.rb +14 -0
  80. data/test/support/mock_timer.rb +20 -0
  81. data/test/test_helper.rb +15 -3
  82. data/test/tracing/custom_test.rb +1 -3
  83. data/test/tracing/id_management_test.rb +4 -0
  84. data/test/tracing/opentracing_test.rb +15 -2
  85. data/test/tracing/processor_test.rb +58 -0
  86. data/test/tracing/span_context_test.rb +22 -0
  87. data/test/tracing/span_test.rb +127 -0
  88. data/test/tracing/tracer_async_test.rb +29 -0
  89. data/test/tracing/tracer_test.rb +82 -16
  90. data/test/util_test.rb +10 -0
  91. metadata +86 -46
  92. data/Dockerfile +0 -16
  93. data/lib/instana/agent.rb +0 -508
  94. data/lib/instana/agent/helpers.rb +0 -87
  95. data/lib/instana/agent/hooks.rb +0 -44
  96. data/lib/instana/agent/tasks.rb +0 -51
  97. data/lib/instana/collector.rb +0 -119
  98. data/lib/instana/collectors/gc.rb +0 -60
  99. data/lib/instana/collectors/memory.rb +0 -37
  100. data/lib/instana/collectors/thread.rb +0 -33
  101. data/lib/instana/eum/eum-test.js.erb +0 -17
  102. data/lib/instana/eum/eum.js.erb +0 -17
  103. data/lib/instana/helpers.rb +0 -47
  104. data/lib/instana/opentracing/tracer.rb +0 -21
  105. data/lib/instana/thread_local.rb +0 -18
  106. data/lib/oj_check.rb +0 -19
  107. data/test/agent/agent_test.rb +0 -151
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2d6ab5606ce437d1b56cac7e9db7170085b5ba5603c4c0056b5c9529264c24e
4
- data.tar.gz: dd0c1163a6f6c8ccb66025d83a18b0f89a02208b423ee17ab771c0e30db45f6d
3
+ metadata.gz: 58219b994af0387dcc4c672577b19c9570e487998be17d315a92902d6e1d86e6
4
+ data.tar.gz: 60e586b644f60545ebe6c7690d3ba673354d2133937b3b2bf95db04fbe8f58c4
5
5
  SHA512:
6
- metadata.gz: '0792a8df1fb233c29f99f0004cba3551ec08720eab3128b8f956fb3c161a2469b970b2ec9272799a8fb2f65114be4fae252cf81fa48ef3eb1f5e31c596f9a73c'
7
- data.tar.gz: 2856142ade217e7ccd90301d2f90d1127f005e290ca4fa6924b4604c91d11983353089e4862935e1a0be107ee45ecb240608cbc7abc33c08bf6df1a4f9f72db9
6
+ metadata.gz: 4d4ca8c71a1613c05e5f1fec02e5857c544013f0043d4b95e31fc900b81903ba5f3c08abd075afc4643e7761cd54a7595939ad9149575589b44b8e43722ea89a
7
+ data.tar.gz: 737447ad9f8ed3c6aef72bead3e66128b83ac1d346bc35f00ad1bd3e0b485f4cd8080faabf8817da23a788f229d32db1739e98484637fd8e70b852b415447d97
data/.circleci/config.yml CHANGED
@@ -11,6 +11,10 @@ executors:
11
11
  - image: memcached
12
12
  - image: redis
13
13
  - image: circleci/dynamodb
14
+ - image: minio/minio:latest
15
+ command: ["server", "/data"]
16
+ - image: s12v/sns
17
+ - image: softwaremill/elasticmq-native
14
18
  ruby_26:
15
19
  docker:
16
20
  - image: circleci/ruby:2.6-node
@@ -21,6 +25,10 @@ executors:
21
25
  - image: memcached
22
26
  - image: redis
23
27
  - image: circleci/dynamodb
28
+ - image: minio/minio:latest
29
+ command: ["server", "/data"]
30
+ - image: s12v/sns
31
+ - image: softwaremill/elasticmq-native
24
32
  ruby_27:
25
33
  docker:
26
34
  - image: circleci/ruby:2.7-node
@@ -31,6 +39,10 @@ executors:
31
39
  - image: memcached
32
40
  - image: redis
33
41
  - image: circleci/dynamodb
42
+ - image: minio/minio:latest
43
+ command: ["server", "/data"]
44
+ - image: s12v/sns
45
+ - image: softwaremill/elasticmq-native
34
46
  ruby_25_mysql2:
35
47
  docker:
36
48
  - image: circleci/ruby:2.5-node
@@ -159,10 +171,10 @@ jobs:
159
171
  parameters:
160
172
  stack:
161
173
  type: executor
162
- default: ruby_27_postgres
174
+ default: ruby_27
163
175
  gemfile:
164
176
  type: string
165
- default: "./gemfiles/rails_60.gemfile"
177
+ default: "./gemfiles/aws_30.gemfile"
166
178
  executor: << parameters.stack >>
167
179
  environment:
168
180
  APPRAISAL_INITIALIZED: "1"
@@ -203,6 +215,7 @@ workflows:
203
215
  - "./gemfiles/cuba_30.gemfile"
204
216
  - "./gemfiles/dalli_20.gemfile"
205
217
  - "./gemfiles/excon_02.gemfile"
218
+ - "./gemfiles/excon_079.gemfile"
206
219
  - "./gemfiles/graphql_10.gemfile"
207
220
  - "./gemfiles/grpc_10.gemfile"
208
221
  - "./gemfiles/net_http_01.gemfile"
@@ -218,6 +231,7 @@ workflows:
218
231
  - "./gemfiles/sidekiq_42.gemfile"
219
232
  - "./gemfiles/sidekiq_50.gemfile"
220
233
  - "./gemfiles/sinatra_14.gemfile"
234
+ - "./gemfiles/shoryuken_50.gemfile"
221
235
  rails:
222
236
  jobs:
223
237
  - test_apprisal:
data/.rubocop.yml CHANGED
@@ -2,7 +2,7 @@ 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
@@ -18,4 +18,8 @@ Style/NilComparison:
18
18
  Enabled: false
19
19
 
20
20
  Style/SoleNestedConditional:
21
- Enabled: false
21
+ Enabled: false
22
+
23
+ # Ruby 2.1 compatibility
24
+ Style/SafeNavigation:
25
+ Enabled: false
data/Appraisals CHANGED
@@ -3,6 +3,9 @@
3
3
 
4
4
  appraise 'aws-30' do
5
5
  gem 'aws-sdk-dynamodb', '~> 1.59'
6
+ gem 'aws-sdk-s3', '~> 1.59'
7
+ gem 'aws-sdk-sns', '~> 1.38'
8
+ gem 'aws-sdk-sqs', '~> 1.36'
6
9
  end
7
10
 
8
11
  appraise 'cuba-30' do
@@ -13,10 +16,14 @@ appraise 'dalli-20' do
13
16
  gem 'dalli', '>= 2.0', '< 3.0'
14
17
  end
15
18
 
16
- appraise 'excon-02' do
19
+ appraise 'excon-021' do
17
20
  gem 'excon', '>= 0.21.0', '< 1.0'
18
21
  end
19
22
 
23
+ appraise 'excon-079' do
24
+ gem 'excon', '>= 0.79.0', '< 1.0'
25
+ end
26
+
20
27
  appraise 'grpc-10' do
21
28
  gem 'grpc', '>= 1.0', '< 2.0'
22
29
  end
@@ -98,6 +105,11 @@ appraise 'sinatra-14' do
98
105
  gem 'sinatra', '1.4.7'
99
106
  end
100
107
 
108
+ appraise 'shoryuken-50' do
109
+ gem 'shoryuken', '~> 5.2'
110
+ gem 'aws-sdk-sqs', '~> 1.36'
111
+ end
112
+
101
113
  appraise 'sidekiq-42' do
102
114
  gem 'sidekiq', '~> 4.2.10'
103
115
  end
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ Rake::TestTask.new(:test) do |t|
22
22
  else
23
23
  t.test_files = Dir[
24
24
  'test/*_test.rb',
25
- 'test/{agent,tracing}/*_test.rb'
25
+ 'test/{agent,tracing,backend,snapshot}/*_test.rb'
26
26
  ]
27
27
  end
28
28
  end
@@ -0,0 +1,20 @@
1
+ version: '3'
2
+ services:
3
+ sns:
4
+ image: s12v/sns
5
+ ports:
6
+ - "9911:9911"
7
+ s3:
8
+ image: minio/minio:latest
9
+ command: ["server", "/data"]
10
+ ports:
11
+ - "9000:9000"
12
+ dynamodb:
13
+ image: circleci/dynamodb
14
+ ports:
15
+ - "8000:8000"
16
+ sqs:
17
+ image: softwaremill/elasticmq-native
18
+ ports:
19
+ - "9324:9324"
20
+ - "9325:9325"
@@ -14,5 +14,8 @@ gem "rubocop", "~> 1.9"
14
14
  gem "rack-test"
15
15
  gem "simplecov", "~> 0.21.2"
16
16
  gem "aws-sdk-dynamodb", "~> 1.59"
17
+ gem "aws-sdk-s3", "~> 1.59"
18
+ gem "aws-sdk-sns", "~> 1.38"
19
+ gem "aws-sdk-sqs", "~> 1.36"
17
20
 
18
21
  gemspec path: "../"
@@ -0,0 +1,18 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2021
4
+ # (c) Copyright Instana Inc. 2021
5
+
6
+ source "https://rubygems.org"
7
+
8
+ gem "rake"
9
+ gem "minitest", "5.9.1"
10
+ gem "minitest-reporters"
11
+ gem "webmock"
12
+ gem "puma"
13
+ gem "rubocop", "~> 1.9"
14
+ gem "rack-test"
15
+ gem "simplecov", "~> 0.21.2"
16
+ gem "excon", ">= 0.21.0", "< 1.0"
17
+
18
+ gemspec path: "../"
@@ -0,0 +1,18 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2021
4
+ # (c) Copyright Instana Inc. 2021
5
+
6
+ source "https://rubygems.org"
7
+
8
+ gem "rake"
9
+ gem "minitest", "5.9.1"
10
+ gem "minitest-reporters"
11
+ gem "webmock"
12
+ gem "puma"
13
+ gem "rubocop", "~> 1.9"
14
+ gem "rack-test"
15
+ gem "simplecov", "~> 0.21.2"
16
+ gem "excon", ">= 0.79.0", "< 1.0"
17
+
18
+ gemspec path: "../"
@@ -0,0 +1,19 @@
1
+ # This file was generated by Appraisal
2
+
3
+ # (c) Copyright IBM Corp. 2021
4
+ # (c) Copyright Instana Inc. 2021
5
+
6
+ source "https://rubygems.org"
7
+
8
+ gem "rake"
9
+ gem "minitest", "5.9.1"
10
+ gem "minitest-reporters"
11
+ gem "webmock"
12
+ gem "puma"
13
+ gem "rubocop", "~> 1.9"
14
+ gem "rack-test"
15
+ gem "simplecov", "~> 0.21.2"
16
+ gem "shoryuken", "~> 5.2"
17
+ gem "aws-sdk-sqs", "~> 1.36"
18
+
19
+ gemspec path: "../"
data/instana.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  }
26
26
 
27
27
  spec.licenses = ['MIT']
28
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
29
29
  spec.bindir = "exe"
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
@@ -38,13 +38,9 @@ Gem::Specification.new do |spec|
38
38
  spec.add_development_dependency "rake", "~> 10.0"
39
39
  spec.add_development_dependency "minitest", "~> 5.0"
40
40
  spec.add_development_dependency "appraisal"
41
+ spec.add_development_dependency "fakefs"
41
42
 
43
+ spec.add_runtime_dependency('concurrent-ruby', '>= 1.1')
42
44
  spec.add_runtime_dependency('sys-proctable', '>= 1.2.2')
43
- spec.add_runtime_dependency('get_process_mem', '>= 0.2.1')
44
- spec.add_runtime_dependency('timers', '>= 4.0.4')
45
45
  spec.add_runtime_dependency('oj', '>=3.0.11') unless RUBY_PLATFORM =~ /java/i
46
-
47
- # Indirect dependency
48
- # https://github.com/instana/ruby-sensor/issues/10
49
- spec.add_runtime_dependency('ffi', '>=1.0.11')
50
46
  end
data/lib/instana.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/setup"
5
8
 
6
9
  # Boot the instana agent background thread. If you wish to have greater
@@ -7,12 +7,14 @@ module Instana
7
7
  attr_reader :trace_point, :activators
8
8
 
9
9
  def start
10
+ # :nocov:
10
11
  @trace_point = TracePoint.new(:end) do
11
12
  activated = ::Instana::Activator.call
12
13
  ::Instana.logger.debug { "Activated #{activated.join(', ')}" } unless activated.empty?
13
14
  end
14
15
 
15
16
  @trace_point.enable if enabled?
17
+ # :nocov:
16
18
  end
17
19
 
18
20
  def call
@@ -0,0 +1,20 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ module Activators
6
+ class AwsS3 < Activator
7
+ def can_instrument?
8
+ defined?(Aws::S3::Client)
9
+ end
10
+
11
+ def instrument
12
+ require 'instana/instrumentation/aws_sdk_s3'
13
+
14
+ ::Aws::S3::Client.add_plugin(Instana::Instrumentation::S3)
15
+
16
+ true
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ module Activators
6
+ class AwsSdkSns < Activator
7
+ def can_instrument?
8
+ defined?(Aws::SNS::Client)
9
+ end
10
+
11
+ def instrument
12
+ require 'instana/instrumentation/aws_sdk_sns'
13
+
14
+ ::Aws::SNS::Client.add_plugin(Instana::Instrumentation::SNS)
15
+
16
+ true
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ module Activators
6
+ class AwsSdkSqs < Activator
7
+ def can_instrument?
8
+ defined?(Aws::SQS::Client)
9
+ end
10
+
11
+ def instrument
12
+ require 'instana/instrumentation/aws_sdk_sqs'
13
+
14
+ ::Aws::SQS::Client.add_plugin(Instana::Instrumentation::SQS)
15
+
16
+ true
17
+ end
18
+ end
19
+ end
20
+ end
@@ -5,7 +5,7 @@ module Instana
5
5
  module Activators
6
6
  class Excon < Activator
7
7
  def can_instrument?
8
- defined?(::Excon) && Instana.config[:excon][:enabled]
8
+ defined?(::Excon) && defined?(::Excon::Middleware::Base) && ::Excon.respond_to?(:defaults) && Instana.config[:excon][:enabled]
9
9
  end
10
10
 
11
11
  def instrument
@@ -0,0 +1,24 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ module Activators
6
+ class Shoryuken < Activator
7
+ def can_instrument?
8
+ defined?(::Shoryuken) && ::Shoryuken.respond_to?(:configure_server)
9
+ end
10
+
11
+ def instrument
12
+ require 'instana/instrumentation/shoryuken'
13
+
14
+ ::Shoryuken.configure_server do |config|
15
+ config.server_middleware do |chain|
16
+ chain.add ::Instana::Instrumentation::Shoryuken
17
+ end
18
+ end
19
+
20
+ true
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,60 @@
1
+ # (c) Copyright IBM Corp. 2021
2
+ # (c) Copyright Instana Inc. 2021
3
+
4
+ module Instana
5
+ module Backend
6
+ # Wrapper class around the various transport backends
7
+ # @since 1.197.0
8
+ class Agent
9
+ attr_reader :delegate
10
+
11
+ def initialize(fargate_metadata_uri: ENV['ECS_CONTAINER_METADATA_URI'], logger: ::Instana.logger)
12
+ @delegate = nil
13
+ @logger = logger
14
+ @fargate_metadata_uri = fargate_metadata_uri
15
+ end
16
+
17
+ def setup
18
+ @delegate = if @fargate_metadata_uri && ENV.key?('INSTANA_ENDPOINT_URL')
19
+ ServerlessAgent.new(fargate_snapshots)
20
+ else
21
+ HostAgent.new
22
+ end
23
+
24
+ @delegate.setup
25
+ end
26
+
27
+ def method_missing(mth, *args, &block)
28
+ if @delegate.respond_to?(mth)
29
+ @delegate.public_send(mth, *args, &block)
30
+ else
31
+ super(mth, *args, &block)
32
+ end
33
+ end
34
+
35
+ def respond_to_missing?(mth, include_all = false)
36
+ @delegate.respond_to?(mth, include_all)
37
+ end
38
+
39
+ private
40
+
41
+ def fargate_snapshots
42
+ metadata_uri = URI(@fargate_metadata_uri)
43
+ client = Backend::RequestClient.new(metadata_uri.host, metadata_uri.port, use_ssl: metadata_uri.scheme == "https")
44
+ response = client.send_request('GET', "#{metadata_uri.path}/task")
45
+
46
+ if response.ok?
47
+ docker = response
48
+ .json['Containers']
49
+ .map { |c| [Snapshot::DockerContainer.new(c), Snapshot::FargateContainer.new(c)] }
50
+ .flatten
51
+
52
+ docker + [Snapshot::FargateProcess.new, Snapshot::RubyProcess.new, Snapshot::FargateTask.new]
53
+ else
54
+ @logger.warn("Received #{response.code} when requesting containers.")
55
+ []
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end