instana 1.213.3 → 1.214.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d41daf6f68e3738199d8b2fca28811cc70f521eb25b25379bd8c185aef0621c
4
- data.tar.gz: bd2cc50d91fbaa639f170150c049b9ffd801b9e1ef2953d1ebd4d1c7c8f95434
3
+ metadata.gz: f17a988f6d3117cee6198d76f4d1d927c78170857122933700352905ddf06382
4
+ data.tar.gz: 852125ef23731dca4817a18999b9cb1af142d8c62ff8bc5c81c717e370b0a943
5
5
  SHA512:
6
- metadata.gz: 032ef7a9dc62ead3c64e7ab86420c1f28b093b0ce4f27ccbc4ecd8d6f05f4ccdcd34079c2b5d09f88b4a786977eaa7f3944ea4a97074e96f363f7671baf1b3d1
7
- data.tar.gz: c9c2c346dc945b697a65add442e3fbb09c0f9983c7a0ee4601903a961142bbcc55539ee5cc2ba6b71e607d5d86eb8c60d49f3d25c35c17ae1cee4cd077c9e3e4
6
+ metadata.gz: ce8ce7e27297c544e50e7efa4a0ab79cdafacaa4faf7d0a860c7976a7d4bcf671996079f5f019af33215feabe024f1f495edf584f20cf940923883a65e9550dd
7
+ data.tar.gz: 3cc3695f26bdb194206e688996027366fed40adfd907c80f2d924209ac0d63a7f53155f277f7edd2180f4ab085d86c8a75c096f9891f83e7b1cc5ade1230de50
data/.circleci/config.yml CHANGED
@@ -9,7 +9,6 @@ library_gemfile: &library_gemfile
9
9
  - "./gemfiles/dalli_20.gemfile"
10
10
  - "./gemfiles/dalli_30.gemfile"
11
11
  - "./gemfiles/dalli_32.gemfile"
12
- - "./gemfiles/excon_02.gemfile"
13
12
  - "./gemfiles/excon_079.gemfile"
14
13
  - "./gemfiles/excon_100.gemfile"
15
14
  - "./gemfiles/graphql_10.gemfile"
@@ -19,6 +18,7 @@ library_gemfile: &library_gemfile
19
18
  - "./gemfiles/rack_20.gemfile"
20
19
  - "./gemfiles/rack_30.gemfile"
21
20
  - "./gemfiles/redis_40.gemfile"
21
+ - "./gemfiles/redis_50.gemfile"
22
22
  - "./gemfiles/rest_client_20.gemfile"
23
23
  - "./gemfiles/resque_122.gemfile"
24
24
  - "./gemfiles/resque_20.gemfile"
@@ -35,42 +35,6 @@ library_gemfile: &library_gemfile
35
35
  - "./gemfiles/mongo_216.gemfile"
36
36
  - "./gemfiles/mongo_219.gemfile"
37
37
  executors:
38
- ruby_27:
39
- docker:
40
- - image: cimg/ruby:2.7-node
41
- environment:
42
- MEMCACHED_HOST: '127.0.0.1:11211'
43
- REDIS_URL: 'redis://127.0.0.1:6379'
44
- DATABASE_URL: 'sqlite3::memory:'
45
- - image: memcached
46
- - image: redis
47
- - image: amazon/dynamodb-local
48
- - image: minio/minio:latest
49
- command: ["server", "/data"]
50
- - image: s12v/sns
51
- - image: softwaremill/elasticmq-native
52
- - image: mongo:5-focal
53
- ruby_27_mysql2:
54
- docker:
55
- - image: cimg/ruby:2.7-node
56
- environment:
57
- DATABASE_URL: "mysql2://root:passw0rd@127.0.0.1:3306/ci_test"
58
- - image: mariadb
59
- environment:
60
- MYSQL_DATABASE: 'ci_test'
61
- MYSQL_USER: 'root'
62
- MYSQL_ROOT_PASSWORD: 'passw0rd'
63
- MYSQL_ROOT_HOST: '%'
64
- ruby_27_postgres:
65
- docker:
66
- - image: cimg/ruby:2.7-node
67
- environment:
68
- DATABASE_URL: "postgres://root:passw0rd@127.0.0.1:5432/ci_test"
69
- - image: postgres
70
- environment:
71
- POSTGRES_DB: 'ci_test'
72
- POSTGRES_USER: 'root'
73
- POSTGRES_PASSWORD: 'passw0rd'
74
38
  ruby_30:
75
39
  docker:
76
40
  - image: cimg/ruby:3.0-node
@@ -327,7 +291,7 @@ jobs:
327
291
  parameters:
328
292
  stack:
329
293
  type: executor
330
- default: ruby_27
294
+ default: ruby_30
331
295
  executor: << parameters.stack >>
332
296
  steps:
333
297
  - checkout
@@ -337,7 +301,7 @@ jobs:
337
301
  parameters:
338
302
  stack:
339
303
  type: executor
340
- default: ruby_27
304
+ default: ruby_30
341
305
  gemfile:
342
306
  type: string
343
307
  default: "./gemfiles/aws_30.gemfile"
@@ -350,7 +314,7 @@ jobs:
350
314
  - setup
351
315
  - run_tests
352
316
  lint:
353
- executor: ruby_27
317
+ executor: ruby_30
354
318
  steps:
355
319
  - checkout
356
320
  - setup
@@ -361,7 +325,7 @@ jobs:
361
325
  - checkout
362
326
  - run_sonarqube
363
327
  publish:
364
- executor: ruby_27
328
+ executor: ruby_30
365
329
  steps:
366
330
  - checkout
367
331
  - setup
@@ -383,7 +347,6 @@ workflows:
383
347
  matrix:
384
348
  parameters:
385
349
  stack:
386
- - ruby_27
387
350
  - ruby_30
388
351
  - ruby_31
389
352
  - ruby_32
@@ -399,27 +362,6 @@ workflows:
399
362
  - ruby_32
400
363
  - ruby_33
401
364
  <<: *library_gemfile
402
- libraries_ruby_2:
403
- jobs:
404
- - test_apprisal:
405
- matrix:
406
- parameters:
407
- stack:
408
- - ruby_27
409
- <<: *library_gemfile
410
- rails_ruby_2:
411
- jobs:
412
- - test_apprisal:
413
- matrix:
414
- parameters:
415
- stack:
416
- - ruby_27
417
- - ruby_27_postgres
418
- - ruby_27_mysql2
419
- gemfile:
420
- - "./gemfiles/rails_60.gemfile"
421
- - "./gemfiles/rails_52.gemfile"
422
- - "./gemfiles/rails_50.gemfile"
423
365
  rails_ruby_3:
424
366
  jobs:
425
367
  - test_apprisal:
@@ -0,0 +1,14 @@
1
+ # (c) Copyright IBM Corp. 2024
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "minitest-reporters"
6
+ gem "webmock"
7
+ gem "puma"
8
+ gem "rubocop", "~> 1.9"
9
+ gem "rack-test"
10
+ gem "simplecov", "~> 0.21.2"
11
+ gem "redis", ">= 5.0.0"
12
+ gem "debug"
13
+
14
+ gemspec path: "../"
data/instana.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ["lib"]
32
32
  spec.test_files = Dir.glob("{test}/**/*.rb")
33
33
 
34
- spec.required_ruby_version = '>= 2.7'
34
+ spec.required_ruby_version = '>= 3.0'
35
35
  spec.platform = defined?(JRUBY_VERSION) ? 'java' : Gem::Platform::RUBY
36
36
 
37
37
  spec.add_development_dependency "bundler", "~> 2.0"
@@ -5,13 +5,18 @@ module Instana
5
5
  module Activators
6
6
  class Redis < Activator
7
7
  def can_instrument?
8
- defined?(::Redis) && defined?(::Redis::Client) && ::Instana.config[:redis][:enabled]
8
+ defined?(::Redis) && defined?(::Redis::Client) && ::Instana.config[:redis][:enabled] &&
9
+ (Gem::Specification.find_by_name('redis').version < Gem::Version.new('5.0') || defined?(::RedisClient))
9
10
  end
10
11
 
11
12
  def instrument
12
13
  require 'instana/instrumentation/redis'
13
14
 
14
- ::Redis::Client.prepend(::Instana::RedisInstrumentation)
15
+ if Gem::Specification.find_by_name('redis').version >= Gem::Version.new('5.0')
16
+ ::RedisClient.prepend(::Instana::RedisInstrumentation)
17
+ else
18
+ ::Redis::Client.prepend(::Instana::RedisInstrumentation)
19
+ end
15
20
 
16
21
  true
17
22
  end
@@ -1,58 +1,85 @@
1
- # (c) Copyright IBM Corp. 2021
1
+ # (c) Copyright IBM Corp. 2024
2
2
  # (c) Copyright Instana Inc. 2017
3
3
 
4
4
  module Instana
5
5
  module RedisInstrumentation
6
- def call(*args, &block)
7
- kv_payload = { redis: {} }
8
- dnt_spans = [:redis, :'resque-client', :'sidekiq-client']
6
+ if Gem::Specification.find_by_name('redis').version >= Gem::Version.new('5.0') && defined?(::RedisClient)
7
+ ORIGINAL_METHODS = {
8
+ :call_v => ::RedisClient.instance_method(:call_v),
9
+ :pipelined => ::RedisClient.instance_method(:pipelined),
10
+ :multi => ::RedisClient.instance_method(:multi)
11
+ }.freeze
9
12
 
10
- if !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name) || !Instana.config[:redis][:enabled]
11
- return super(*args, &block)
13
+ def call_v(*args, &block)
14
+ if skip_instrumentation?
15
+ super(*args, &block)
16
+ else
17
+ call_with_instana(args[0][0].to_s.upcase, ORIGINAL_METHODS[:call_v], *args, &block)
18
+ end
12
19
  end
13
20
 
14
- begin
15
- ::Instana.tracer.log_entry(:redis)
21
+ def pipelined(*args, &block)
22
+ if skip_instrumentation?
23
+ super(*args, &block)
24
+ else
25
+ call_with_instana('PIPELINE', ORIGINAL_METHODS[:pipelined], *args, &block)
26
+ end
27
+ end
16
28
 
17
- begin
18
- kv_payload[:redis][:connection] = "#{self.host}:#{self.port}"
19
- kv_payload[:redis][:db] = db.to_s
20
- kv_payload[:redis][:command] = args[0][0].to_s.upcase
21
- rescue
22
- nil
29
+ # Since, starting with 5.1 redis/client.rb:114:multi takes an unused default argument `watch: nil`
30
+ # but calls redis_client.rb:442:multi, which doesn't take any argument,
31
+ # here we have to take arguments but we should not use it.
32
+ def multi(*_, &block)
33
+ if skip_instrumentation?
34
+ super(&block)
35
+ else
36
+ call_with_instana('MULTI', ORIGINAL_METHODS[:multi], &block)
23
37
  end
38
+ end
24
39
 
25
- super(*args, &block)
26
- rescue => e
27
- ::Instana.tracer.log_info({ redis: {error: true} })
28
- ::Instana.tracer.log_error(e)
29
- raise
30
- ensure
31
- ::Instana.tracer.log_exit(:redis, kv_payload)
40
+ else
41
+ ORIGINAL_METHODS = {
42
+ :call => ::Redis::Client.instance_method(:call),
43
+ :call_pipeline => ::Redis::Client.instance_method(:call_pipeline)
44
+ }.freeze
45
+
46
+ def call(*args, &block)
47
+ if skip_instrumentation?
48
+ super(*args, &block)
49
+ else
50
+ call_with_instana(args[0][0].to_s.upcase, ORIGINAL_METHODS[:call], *args, &block)
51
+ end
52
+ end
53
+
54
+ def call_pipeline(*args, &block)
55
+ if skip_instrumentation?
56
+ super(*args, &block)
57
+ else
58
+ call_with_instana(args.first.is_a?(::Redis::Pipeline::Multi) ? 'MULTI' : 'PIPELINE', ORIGINAL_METHODS[:call_pipeline], *args, &block)
59
+ end
32
60
  end
33
61
  end
34
62
 
35
- def call_pipeline(*args, &block)
36
- kv_payload = { redis: {} }
63
+ def skip_instrumentation?
37
64
  dnt_spans = [:redis, :'resque-client', :'sidekiq-client']
65
+ !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name) || !Instana.config[:redis][:enabled]
66
+ end
38
67
 
39
- if !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name) || !Instana.config[:redis][:enabled]
40
- return super(*args, &block)
41
- end
68
+ def call_with_instana(*args, &block)
69
+ command, original_super, *original_args = *args
70
+ kv_payload = { redis: {} }
42
71
 
43
72
  begin
44
73
  ::Instana.tracer.log_entry(:redis)
45
74
 
46
- pipeline = args.first
47
75
  begin
48
76
  kv_payload[:redis][:connection] = "#{self.host}:#{self.port}"
49
77
  kv_payload[:redis][:db] = db.to_s
50
- kv_payload[:redis][:command] = pipeline.is_a?(::Redis::Pipeline::Multi) ? 'MULTI' : 'PIPELINE'
78
+ kv_payload[:redis][:command] = command
51
79
  rescue
52
80
  nil
53
81
  end
54
-
55
- super(*args, &block)
82
+ original_super.bind(self).call(*original_args, &block)
56
83
  rescue => e
57
84
  ::Instana.tracer.log_info({ redis: {error: true} })
58
85
  ::Instana.tracer.log_error(e)
@@ -2,6 +2,6 @@
2
2
  # (c) Copyright Instana Inc. 2016
3
3
 
4
4
  module Instana
5
- VERSION = "1.213.3"
5
+ VERSION = "1.214.0"
6
6
  VERSION_FULL = "instana-#{VERSION}"
7
7
  end
@@ -49,9 +49,9 @@ class RedisTest < Minitest::Test
49
49
  clear_all!
50
50
 
51
51
  Instana.tracer.start_or_continue_trace(:redis_test) do
52
- @redis_client.pipelined do
53
- @redis_client.set('hello', 'world')
54
- @redis_client.set('other', 'world')
52
+ @redis_client.pipelined do |pipeline|
53
+ pipeline.set('hello', 'world')
54
+ pipeline.set('other', 'world')
55
55
  end
56
56
  end
57
57
 
@@ -63,9 +63,9 @@ class RedisTest < Minitest::Test
63
63
 
64
64
  Instana.tracer.start_or_continue_trace(:redis_test) do
65
65
  begin
66
- @redis_client.pipelined do
67
- @redis_client.set('other', 'world')
68
- @redis_client.call('invalid')
66
+ @redis_client.pipelined do |pipeline|
67
+ pipeline.set('other', 'world')
68
+ pipeline.call('invalid')
69
69
  end
70
70
  rescue; end
71
71
  end
@@ -77,9 +77,9 @@ class RedisTest < Minitest::Test
77
77
  clear_all!
78
78
 
79
79
  Instana.tracer.start_or_continue_trace(:redis_test) do
80
- @redis_client.multi do
81
- @redis_client.set('hello', 'world')
82
- @redis_client.set('other', 'world')
80
+ @redis_client.multi do |multi|
81
+ multi.set('hello', 'world')
82
+ multi.set('other', 'world')
83
83
  end
84
84
  end
85
85
 
@@ -91,9 +91,9 @@ class RedisTest < Minitest::Test
91
91
 
92
92
  Instana.tracer.start_or_continue_trace(:redis_test) do
93
93
  begin
94
- @redis_client.multi do
95
- @redis_client.set('other', 'world')
96
- @redis_client.call('invalid')
94
+ @redis_client.multi do |multi|
95
+ multi.set('other', 'world')
96
+ multi.call('invalid')
97
97
  end
98
98
  rescue; end
99
99
  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.213.3
4
+ version: 1.214.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: 2024-03-22 00:00:00.000000000 Z
11
+ date: 2024-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -185,6 +185,7 @@ files:
185
185
  - gemfiles/rails_70.gemfile
186
186
  - gemfiles/rails_71.gemfile
187
187
  - gemfiles/redis_40.gemfile
188
+ - gemfiles/redis_50.gemfile
188
189
  - gemfiles/resque_122.gemfile
189
190
  - gemfiles/resque_20.gemfile
190
191
  - gemfiles/rest_client_20.gemfile
@@ -391,14 +392,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
391
392
  requirements:
392
393
  - - ">="
393
394
  - !ruby/object:Gem::Version
394
- version: '2.7'
395
+ version: '3.0'
395
396
  required_rubygems_version: !ruby/object:Gem::Requirement
396
397
  requirements:
397
398
  - - ">="
398
399
  - !ruby/object:Gem::Version
399
400
  version: '0'
400
401
  requirements: []
401
- rubygems_version: 3.4.10
402
+ rubygems_version: 3.4.19
402
403
  signing_key:
403
404
  specification_version: 4
404
405
  summary: Ruby Distributed Tracing & Metrics Sensor for Instana