instana 1.213.2 → 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 +4 -4
- data/.circleci/config.yml +33 -76
- data/gemfiles/{rack_16.gemfile → redis_50.gemfile} +3 -5
- data/instana.gemspec +1 -1
- data/lib/instana/activators/redis.rb +7 -2
- data/lib/instana/instrumentation/redis.rb +57 -30
- data/lib/instana/util.rb +11 -2
- data/lib/instana/version.rb +1 -1
- data/test/instrumentation/rails_action_cable_test.rb +26 -22
- data/test/instrumentation/redis_test.rb +12 -12
- data/test/snapshot/ruby_process_test.rb +18 -0
- data/test/support/helpers.rb +0 -12
- metadata +5 -9
- data/gemfiles/rest_client_16.gemfile +0 -18
- data/gemfiles/sidekiq_42.gemfile +0 -16
- data/gemfiles/sidekiq_50.gemfile +0 -16
- data/gemfiles/sinatra_14.gemfile +0 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f17a988f6d3117cee6198d76f4d1d927c78170857122933700352905ddf06382
|
|
4
|
+
data.tar.gz: 852125ef23731dca4817a18999b9cb1af142d8c62ff8bc5c81c717e370b0a943
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ce8ce7e27297c544e50e7efa4a0ab79cdafacaa4faf7d0a860c7976a7d4bcf671996079f5f019af33215feabe024f1f495edf584f20cf940923883a65e9550dd
|
|
7
|
+
data.tar.gz: 3cc3695f26bdb194206e688996027366fed40adfd907c80f2d924209ac0d63a7f53155f277f7edd2180f4ab085d86c8a75c096f9891f83e7b1cc5ade1230de50
|
data/.circleci/config.yml
CHANGED
|
@@ -9,29 +9,24 @@ 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"
|
|
16
15
|
- "./gemfiles/graphql_20.gemfile"
|
|
17
16
|
- "./gemfiles/grpc_10.gemfile"
|
|
18
17
|
- "./gemfiles/net_http_01.gemfile"
|
|
19
|
-
- "./gemfiles/rack_16.gemfile"
|
|
20
18
|
- "./gemfiles/rack_20.gemfile"
|
|
21
19
|
- "./gemfiles/rack_30.gemfile"
|
|
22
20
|
- "./gemfiles/redis_40.gemfile"
|
|
23
|
-
- "./gemfiles/
|
|
21
|
+
- "./gemfiles/redis_50.gemfile"
|
|
24
22
|
- "./gemfiles/rest_client_20.gemfile"
|
|
25
23
|
- "./gemfiles/resque_122.gemfile"
|
|
26
24
|
- "./gemfiles/resque_20.gemfile"
|
|
27
25
|
- "./gemfiles/roda_20.gemfile"
|
|
28
26
|
- "./gemfiles/roda_30.gemfile"
|
|
29
|
-
- "./gemfiles/sidekiq_42.gemfile"
|
|
30
|
-
- "./gemfiles/sidekiq_50.gemfile"
|
|
31
27
|
- "./gemfiles/sidekiq_60.gemfile"
|
|
32
28
|
- "./gemfiles/sidekiq_65.gemfile"
|
|
33
29
|
- "./gemfiles/sidekiq_70.gemfile"
|
|
34
|
-
- "./gemfiles/sinatra_14.gemfile"
|
|
35
30
|
- "./gemfiles/sinatra_22.gemfile"
|
|
36
31
|
- "./gemfiles/sinatra_30.gemfile"
|
|
37
32
|
- "./gemfiles/sinatra_40.gemfile"
|
|
@@ -40,9 +35,9 @@ library_gemfile: &library_gemfile
|
|
|
40
35
|
- "./gemfiles/mongo_216.gemfile"
|
|
41
36
|
- "./gemfiles/mongo_219.gemfile"
|
|
42
37
|
executors:
|
|
43
|
-
|
|
38
|
+
ruby_30:
|
|
44
39
|
docker:
|
|
45
|
-
- image: cimg/ruby:
|
|
40
|
+
- image: cimg/ruby:3.0-node
|
|
46
41
|
environment:
|
|
47
42
|
MEMCACHED_HOST: '127.0.0.1:11211'
|
|
48
43
|
REDIS_URL: 'redis://127.0.0.1:6379'
|
|
@@ -55,9 +50,9 @@ executors:
|
|
|
55
50
|
- image: s12v/sns
|
|
56
51
|
- image: softwaremill/elasticmq-native
|
|
57
52
|
- image: mongo:5-focal
|
|
58
|
-
|
|
53
|
+
ruby_30_mysql2:
|
|
59
54
|
docker:
|
|
60
|
-
- image: cimg/ruby:
|
|
55
|
+
- image: cimg/ruby:3.0-node
|
|
61
56
|
environment:
|
|
62
57
|
DATABASE_URL: "mysql2://root@127.0.0.1:3306/ci_test"
|
|
63
58
|
- image: mariadb
|
|
@@ -68,18 +63,18 @@ executors:
|
|
|
68
63
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
|
|
69
64
|
MYSQL_ROOT_PASSWORD: ''
|
|
70
65
|
MYSQL_ROOT_HOST: '%'
|
|
71
|
-
|
|
66
|
+
ruby_30_postgres:
|
|
72
67
|
docker:
|
|
73
|
-
- image: cimg/ruby:
|
|
68
|
+
- image: cimg/ruby:3.0-node
|
|
74
69
|
environment:
|
|
75
70
|
DATABASE_URL: "postgres://postgres:test@127.0.0.1:5432/ci_test"
|
|
76
71
|
- image: postgres
|
|
77
72
|
environment:
|
|
78
73
|
POSTGRES_PASSWORD: 'test'
|
|
79
74
|
POSTGRES_DB: 'ci_test'
|
|
80
|
-
|
|
75
|
+
ruby_31:
|
|
81
76
|
docker:
|
|
82
|
-
- image: cimg/ruby:3.
|
|
77
|
+
- image: cimg/ruby:3.1-node
|
|
83
78
|
environment:
|
|
84
79
|
MEMCACHED_HOST: '127.0.0.1:11211'
|
|
85
80
|
REDIS_URL: 'redis://127.0.0.1:6379'
|
|
@@ -92,9 +87,9 @@ executors:
|
|
|
92
87
|
- image: s12v/sns
|
|
93
88
|
- image: softwaremill/elasticmq-native
|
|
94
89
|
- image: mongo:5-focal
|
|
95
|
-
|
|
90
|
+
ruby_31_mysql2:
|
|
96
91
|
docker:
|
|
97
|
-
- image: cimg/ruby:3.
|
|
92
|
+
- image: cimg/ruby:3.1-node
|
|
98
93
|
environment:
|
|
99
94
|
DATABASE_URL: "mysql2://root@127.0.0.1:3306/ci_test"
|
|
100
95
|
- image: mariadb
|
|
@@ -105,18 +100,18 @@ executors:
|
|
|
105
100
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
|
|
106
101
|
MYSQL_ROOT_PASSWORD: ''
|
|
107
102
|
MYSQL_ROOT_HOST: '%'
|
|
108
|
-
|
|
103
|
+
ruby_31_postgres:
|
|
109
104
|
docker:
|
|
110
|
-
- image: cimg/ruby:3.
|
|
105
|
+
- image: cimg/ruby:3.1-node
|
|
111
106
|
environment:
|
|
112
107
|
DATABASE_URL: "postgres://postgres:test@127.0.0.1:5432/ci_test"
|
|
113
108
|
- image: postgres
|
|
114
109
|
environment:
|
|
115
110
|
POSTGRES_PASSWORD: 'test'
|
|
116
111
|
POSTGRES_DB: 'ci_test'
|
|
117
|
-
|
|
112
|
+
ruby_32:
|
|
118
113
|
docker:
|
|
119
|
-
- image: cimg/ruby:3.
|
|
114
|
+
- image: cimg/ruby:3.2-node
|
|
120
115
|
environment:
|
|
121
116
|
MEMCACHED_HOST: '127.0.0.1:11211'
|
|
122
117
|
REDIS_URL: 'redis://127.0.0.1:6379'
|
|
@@ -129,9 +124,9 @@ executors:
|
|
|
129
124
|
- image: s12v/sns
|
|
130
125
|
- image: softwaremill/elasticmq-native
|
|
131
126
|
- image: mongo:5-focal
|
|
132
|
-
|
|
127
|
+
ruby_32_mysql2:
|
|
133
128
|
docker:
|
|
134
|
-
- image: cimg/ruby:3.
|
|
129
|
+
- image: cimg/ruby:3.2-node
|
|
135
130
|
environment:
|
|
136
131
|
DATABASE_URL: "mysql2://root@127.0.0.1:3306/ci_test"
|
|
137
132
|
- image: mariadb
|
|
@@ -142,18 +137,18 @@ executors:
|
|
|
142
137
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
|
|
143
138
|
MYSQL_ROOT_PASSWORD: ''
|
|
144
139
|
MYSQL_ROOT_HOST: '%'
|
|
145
|
-
|
|
140
|
+
ruby_32_postgres:
|
|
146
141
|
docker:
|
|
147
|
-
- image: cimg/ruby:3.
|
|
142
|
+
- image: cimg/ruby:3.2-node
|
|
148
143
|
environment:
|
|
149
144
|
DATABASE_URL: "postgres://postgres:test@127.0.0.1:5432/ci_test"
|
|
150
145
|
- image: postgres
|
|
151
146
|
environment:
|
|
152
147
|
POSTGRES_PASSWORD: 'test'
|
|
153
148
|
POSTGRES_DB: 'ci_test'
|
|
154
|
-
|
|
149
|
+
ruby_33:
|
|
155
150
|
docker:
|
|
156
|
-
- image: cimg/ruby:3.
|
|
151
|
+
- image: cimg/ruby:3.3-node
|
|
157
152
|
environment:
|
|
158
153
|
MEMCACHED_HOST: '127.0.0.1:11211'
|
|
159
154
|
REDIS_URL: 'redis://127.0.0.1:6379'
|
|
@@ -166,9 +161,9 @@ executors:
|
|
|
166
161
|
- image: s12v/sns
|
|
167
162
|
- image: softwaremill/elasticmq-native
|
|
168
163
|
- image: mongo:5-focal
|
|
169
|
-
|
|
164
|
+
ruby_33_mysql2:
|
|
170
165
|
docker:
|
|
171
|
-
- image: cimg/ruby:3.
|
|
166
|
+
- image: cimg/ruby:3.3-node
|
|
172
167
|
environment:
|
|
173
168
|
DATABASE_URL: "mysql2://root@127.0.0.1:3306/ci_test"
|
|
174
169
|
- image: mariadb
|
|
@@ -179,16 +174,15 @@ executors:
|
|
|
179
174
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
|
|
180
175
|
MYSQL_ROOT_PASSWORD: ''
|
|
181
176
|
MYSQL_ROOT_HOST: '%'
|
|
182
|
-
|
|
177
|
+
ruby_33_postgres:
|
|
183
178
|
docker:
|
|
184
|
-
- image: cimg/ruby:3.
|
|
179
|
+
- image: cimg/ruby:3.3-node
|
|
185
180
|
environment:
|
|
186
181
|
DATABASE_URL: "postgres://postgres:test@127.0.0.1:5432/ci_test"
|
|
187
182
|
- image: postgres
|
|
188
183
|
environment:
|
|
189
184
|
POSTGRES_PASSWORD: 'test'
|
|
190
185
|
POSTGRES_DB: 'ci_test'
|
|
191
|
-
|
|
192
186
|
commands:
|
|
193
187
|
setup:
|
|
194
188
|
steps:
|
|
@@ -297,7 +291,7 @@ jobs:
|
|
|
297
291
|
parameters:
|
|
298
292
|
stack:
|
|
299
293
|
type: executor
|
|
300
|
-
default:
|
|
294
|
+
default: ruby_30
|
|
301
295
|
executor: << parameters.stack >>
|
|
302
296
|
steps:
|
|
303
297
|
- checkout
|
|
@@ -307,7 +301,7 @@ jobs:
|
|
|
307
301
|
parameters:
|
|
308
302
|
stack:
|
|
309
303
|
type: executor
|
|
310
|
-
default:
|
|
304
|
+
default: ruby_30
|
|
311
305
|
gemfile:
|
|
312
306
|
type: string
|
|
313
307
|
default: "./gemfiles/aws_30.gemfile"
|
|
@@ -320,7 +314,7 @@ jobs:
|
|
|
320
314
|
- setup
|
|
321
315
|
- run_tests
|
|
322
316
|
lint:
|
|
323
|
-
executor:
|
|
317
|
+
executor: ruby_30
|
|
324
318
|
steps:
|
|
325
319
|
- checkout
|
|
326
320
|
- setup
|
|
@@ -331,7 +325,7 @@ jobs:
|
|
|
331
325
|
- checkout
|
|
332
326
|
- run_sonarqube
|
|
333
327
|
publish:
|
|
334
|
-
executor:
|
|
328
|
+
executor: ruby_30
|
|
335
329
|
steps:
|
|
336
330
|
- checkout
|
|
337
331
|
- setup
|
|
@@ -353,10 +347,10 @@ workflows:
|
|
|
353
347
|
matrix:
|
|
354
348
|
parameters:
|
|
355
349
|
stack:
|
|
356
|
-
- ruby_27
|
|
357
350
|
- ruby_30
|
|
358
351
|
- ruby_31
|
|
359
352
|
- ruby_32
|
|
353
|
+
- ruby_33
|
|
360
354
|
libraries_ruby_3:
|
|
361
355
|
jobs:
|
|
362
356
|
- test_apprisal:
|
|
@@ -366,47 +360,8 @@ workflows:
|
|
|
366
360
|
- ruby_30
|
|
367
361
|
- ruby_31
|
|
368
362
|
- ruby_32
|
|
363
|
+
- ruby_33
|
|
369
364
|
<<: *library_gemfile
|
|
370
|
-
exclude:
|
|
371
|
-
# Currently rest-client 1.6 gemfile pulls in mime-types 2.99.3
|
|
372
|
-
# and adaptation to mime-type 3.0 is only available in rest-client 2.0:
|
|
373
|
-
# https://github.com/rest-client/rest-client/issues/464
|
|
374
|
-
# But mime-types 2.99.3 is too old for Ruby 3.0 or newer:
|
|
375
|
-
# https://stackoverflow.com/a/68433864
|
|
376
|
-
# so we should exclude thiese scenarios
|
|
377
|
-
- stack: ruby_30
|
|
378
|
-
gemfile: "./gemfiles/rest_client_16.gemfile"
|
|
379
|
-
- stack: ruby_31
|
|
380
|
-
gemfile: "./gemfiles/rest_client_16.gemfile"
|
|
381
|
-
- stack: ruby_32
|
|
382
|
-
gemfile: "./gemfiles/rest_client_16.gemfile"
|
|
383
|
-
# Sinatra 1.4 relies on the Fixnum class
|
|
384
|
-
# which has been removed from Ruby 3.2, see:
|
|
385
|
-
# https://bugs.ruby-lang.org/issues/12005
|
|
386
|
-
# https://www.ruby-lang.org/en/news/2022/11/11/ruby-3-2-0-preview3-released/
|
|
387
|
-
- stack: ruby_32
|
|
388
|
-
gemfile: "./gemfiles/sinatra_14.gemfile"
|
|
389
|
-
libraries_ruby_2:
|
|
390
|
-
jobs:
|
|
391
|
-
- test_apprisal:
|
|
392
|
-
matrix:
|
|
393
|
-
parameters:
|
|
394
|
-
stack:
|
|
395
|
-
- ruby_27
|
|
396
|
-
<<: *library_gemfile
|
|
397
|
-
rails_ruby_2:
|
|
398
|
-
jobs:
|
|
399
|
-
- test_apprisal:
|
|
400
|
-
matrix:
|
|
401
|
-
parameters:
|
|
402
|
-
stack:
|
|
403
|
-
- ruby_27
|
|
404
|
-
- ruby_27_postgres
|
|
405
|
-
- ruby_27_mysql2
|
|
406
|
-
gemfile:
|
|
407
|
-
- "./gemfiles/rails_60.gemfile"
|
|
408
|
-
- "./gemfiles/rails_52.gemfile"
|
|
409
|
-
- "./gemfiles/rails_50.gemfile"
|
|
410
365
|
rails_ruby_3:
|
|
411
366
|
jobs:
|
|
412
367
|
- test_apprisal:
|
|
@@ -422,6 +377,8 @@ workflows:
|
|
|
422
377
|
- ruby_32
|
|
423
378
|
- ruby_32_postgres
|
|
424
379
|
- ruby_32_mysql2
|
|
380
|
+
- ruby_33_postgres
|
|
381
|
+
- ruby_33_mysql2
|
|
425
382
|
gemfile:
|
|
426
383
|
- "./gemfiles/rails_61.gemfile"
|
|
427
384
|
- "./gemfiles/rails_70.gemfile"
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
# (c) Copyright IBM Corp. 2021
|
|
4
|
-
# (c) Copyright Instana Inc. 2021
|
|
1
|
+
# (c) Copyright IBM Corp. 2024
|
|
5
2
|
|
|
6
3
|
source "https://rubygems.org"
|
|
7
4
|
|
|
@@ -11,6 +8,7 @@ gem "puma"
|
|
|
11
8
|
gem "rubocop", "~> 1.9"
|
|
12
9
|
gem "rack-test"
|
|
13
10
|
gem "simplecov", "~> 0.21.2"
|
|
14
|
-
gem "
|
|
11
|
+
gem "redis", ">= 5.0.0"
|
|
12
|
+
gem "debug"
|
|
15
13
|
|
|
16
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 = '>=
|
|
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
|
-
::
|
|
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.
|
|
1
|
+
# (c) Copyright IBM Corp. 2024
|
|
2
2
|
# (c) Copyright Instana Inc. 2017
|
|
3
3
|
|
|
4
4
|
module Instana
|
|
5
5
|
module RedisInstrumentation
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
::
|
|
28
|
-
::
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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] =
|
|
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)
|
data/lib/instana/util.rb
CHANGED
|
@@ -86,8 +86,17 @@ module Instana
|
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
-
if defined?(::RailsLts)
|
|
90
|
-
|
|
89
|
+
rails_module = if defined?(::RailsLts)
|
|
90
|
+
then ::RailsLts
|
|
91
|
+
elsif defined?(::Rails)
|
|
92
|
+
then ::Rails
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
if rails_module &&
|
|
96
|
+
rails_module.respond_to?(:application_name) &&
|
|
97
|
+
rails_module.instance_variables.include?(:@application) &&
|
|
98
|
+
rails_module.application
|
|
99
|
+
return rails_module.application_name
|
|
91
100
|
end
|
|
92
101
|
|
|
93
102
|
if $0.to_s.empty?
|
data/lib/instana/version.rb
CHANGED
|
@@ -28,11 +28,12 @@ class RailsActionCableTest < Minitest::Test
|
|
|
28
28
|
data = span[:data]
|
|
29
29
|
|
|
30
30
|
assert_nil rest
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
assert_equal :"rpc-server", span[:n]
|
|
32
|
+
assert_equal "rake_test_loader.rb", data[:service]
|
|
33
|
+
assert_equal :actioncable, data[:rpc][:flavor]
|
|
34
|
+
assert_equal channel_klass.to_s, data[:rpc][:call]
|
|
35
|
+
assert_equal :transmit, data[:rpc][:call_type]
|
|
36
|
+
assert_equal Socket.gethostname, data[:rpc][:host]
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
def test_transmit_parent
|
|
@@ -53,12 +54,13 @@ class RailsActionCableTest < Minitest::Test
|
|
|
53
54
|
data = span[:data]
|
|
54
55
|
|
|
55
56
|
assert_nil rest
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
assert_equal 'ABC', span[:t]
|
|
58
|
+
assert_equal :"rpc-server", span[:n]
|
|
59
|
+
assert_equal "rake_test_loader.rb", data[:service]
|
|
60
|
+
assert_equal :actioncable, data[:rpc][:flavor]
|
|
61
|
+
assert_equal channel_klass.to_s, data[:rpc][:call]
|
|
62
|
+
assert_equal :transmit, data[:rpc][:call_type]
|
|
63
|
+
assert_equal Socket.gethostname, data[:rpc][:host]
|
|
62
64
|
end
|
|
63
65
|
|
|
64
66
|
def test_action_no_parent
|
|
@@ -79,11 +81,12 @@ class RailsActionCableTest < Minitest::Test
|
|
|
79
81
|
data = span[:data]
|
|
80
82
|
|
|
81
83
|
assert_nil rest
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
assert_equal :"rpc-server", span[:n]
|
|
85
|
+
assert_equal "rake_test_loader.rb", data[:service]
|
|
86
|
+
assert_equal :actioncable, data[:rpc][:flavor]
|
|
87
|
+
assert_equal "#{channel_klass}#sample", data[:rpc][:call]
|
|
88
|
+
assert_equal :action, data[:rpc][:call_type]
|
|
89
|
+
assert_equal Socket.gethostname, data[:rpc][:host]
|
|
87
90
|
end
|
|
88
91
|
|
|
89
92
|
def test_action_parent
|
|
@@ -108,12 +111,13 @@ class RailsActionCableTest < Minitest::Test
|
|
|
108
111
|
data = span[:data]
|
|
109
112
|
|
|
110
113
|
assert_nil rest
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
assert_equal 'ABC', span[:t]
|
|
115
|
+
assert_equal :"rpc-server", span[:n]
|
|
116
|
+
assert_equal "rake_test_loader.rb", data[:service]
|
|
117
|
+
assert_equal :actioncable, data[:rpc][:flavor]
|
|
118
|
+
assert_equal "#{channel_klass}#sample", data[:rpc][:call]
|
|
119
|
+
assert_equal :action, data[:rpc][:call_type]
|
|
120
|
+
assert_equal Socket.gethostname, data[:rpc][:host]
|
|
117
121
|
end
|
|
118
122
|
|
|
119
123
|
private
|
|
@@ -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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
-
|
|
96
|
-
|
|
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
|
|
@@ -10,5 +10,23 @@ class RubyProcessTest < Minitest::Test
|
|
|
10
10
|
|
|
11
11
|
assert_equal Instana::Snapshot::RubyProcess::ID, snapshot[:name]
|
|
12
12
|
assert_equal Process.pid.to_s, snapshot[:entityId]
|
|
13
|
+
assert_equal File.basename($PROGRAM_NAME), snapshot[:data][:name]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_snapshot_with_rails_defined_but_no_rails_application
|
|
17
|
+
Object.send(:const_set, :Rails,
|
|
18
|
+
Module.new do
|
|
19
|
+
def respond_to?
|
|
20
|
+
false
|
|
21
|
+
end
|
|
22
|
+
end)
|
|
23
|
+
subject = Instana::Snapshot::RubyProcess.new
|
|
24
|
+
snapshot = subject.snapshot
|
|
25
|
+
|
|
26
|
+
assert_equal Instana::Snapshot::RubyProcess::ID, snapshot[:name]
|
|
27
|
+
assert_equal Process.pid.to_s, snapshot[:entityId]
|
|
28
|
+
assert_equal File.basename($PROGRAM_NAME), snapshot[:data][:name]
|
|
29
|
+
ensure
|
|
30
|
+
Object.send(:remove_const, :Rails)
|
|
13
31
|
end
|
|
14
32
|
end
|
data/test/support/helpers.rb
CHANGED
|
@@ -81,17 +81,5 @@ module Instana
|
|
|
81
81
|
end
|
|
82
82
|
raise StandardError, 'Span with qualifier not found'
|
|
83
83
|
end
|
|
84
|
-
|
|
85
|
-
def has_postgres_database?
|
|
86
|
-
URI(ENV.fetch('DATABASE_URL', '')).scheme == 'postgres'
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def has_mysql2_database?
|
|
90
|
-
URI(ENV.fetch('DATABASE_URL', '')).scheme == 'mysql2'
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def has_mysql_database?
|
|
94
|
-
URI(ENV.fetch('DATABASE_URL', '')).scheme == 'mysql'
|
|
95
|
-
end
|
|
96
84
|
end
|
|
97
85
|
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.
|
|
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-
|
|
11
|
+
date: 2024-03-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -175,7 +175,6 @@ files:
|
|
|
175
175
|
- gemfiles/mongo_216.gemfile
|
|
176
176
|
- gemfiles/mongo_219.gemfile
|
|
177
177
|
- gemfiles/net_http_01.gemfile
|
|
178
|
-
- gemfiles/rack_16.gemfile
|
|
179
178
|
- gemfiles/rack_20.gemfile
|
|
180
179
|
- gemfiles/rack_30.gemfile
|
|
181
180
|
- gemfiles/rails_42.gemfile
|
|
@@ -186,20 +185,17 @@ files:
|
|
|
186
185
|
- gemfiles/rails_70.gemfile
|
|
187
186
|
- gemfiles/rails_71.gemfile
|
|
188
187
|
- gemfiles/redis_40.gemfile
|
|
188
|
+
- gemfiles/redis_50.gemfile
|
|
189
189
|
- gemfiles/resque_122.gemfile
|
|
190
190
|
- gemfiles/resque_20.gemfile
|
|
191
|
-
- gemfiles/rest_client_16.gemfile
|
|
192
191
|
- gemfiles/rest_client_20.gemfile
|
|
193
192
|
- gemfiles/roda_20.gemfile
|
|
194
193
|
- gemfiles/roda_30.gemfile
|
|
195
194
|
- gemfiles/shoryuken_50.gemfile
|
|
196
195
|
- gemfiles/shoryuken_60.gemfile
|
|
197
|
-
- gemfiles/sidekiq_42.gemfile
|
|
198
|
-
- gemfiles/sidekiq_50.gemfile
|
|
199
196
|
- gemfiles/sidekiq_60.gemfile
|
|
200
197
|
- gemfiles/sidekiq_65.gemfile
|
|
201
198
|
- gemfiles/sidekiq_70.gemfile
|
|
202
|
-
- gemfiles/sinatra_14.gemfile
|
|
203
199
|
- gemfiles/sinatra_22.gemfile
|
|
204
200
|
- gemfiles/sinatra_30.gemfile
|
|
205
201
|
- gemfiles/sinatra_40.gemfile
|
|
@@ -396,14 +392,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
396
392
|
requirements:
|
|
397
393
|
- - ">="
|
|
398
394
|
- !ruby/object:Gem::Version
|
|
399
|
-
version: '
|
|
395
|
+
version: '3.0'
|
|
400
396
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
401
397
|
requirements:
|
|
402
398
|
- - ">="
|
|
403
399
|
- !ruby/object:Gem::Version
|
|
404
400
|
version: '0'
|
|
405
401
|
requirements: []
|
|
406
|
-
rubygems_version: 3.4.
|
|
402
|
+
rubygems_version: 3.4.19
|
|
407
403
|
signing_key:
|
|
408
404
|
specification_version: 4
|
|
409
405
|
summary: Ruby Distributed Tracing & Metrics Sensor for Instana
|
|
@@ -1,18 +0,0 @@
|
|
|
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 "rack"
|
|
9
|
-
gem "rackup"
|
|
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 "rest-client", ">= 1.6", "< 2.0"
|
|
17
|
-
|
|
18
|
-
gemspec path: "../"
|
data/gemfiles/sidekiq_42.gemfile
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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 "minitest-reporters"
|
|
9
|
-
gem "webmock"
|
|
10
|
-
gem "puma"
|
|
11
|
-
gem "rubocop", "~> 1.9"
|
|
12
|
-
gem "rack-test"
|
|
13
|
-
gem "simplecov", "~> 0.21.2"
|
|
14
|
-
gem "sidekiq", "~> 4.2.10"
|
|
15
|
-
|
|
16
|
-
gemspec path: "../"
|
data/gemfiles/sidekiq_50.gemfile
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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 "minitest-reporters"
|
|
9
|
-
gem "webmock"
|
|
10
|
-
gem "puma"
|
|
11
|
-
gem "rubocop", "~> 1.9"
|
|
12
|
-
gem "rack-test"
|
|
13
|
-
gem "simplecov", "~> 0.21.2"
|
|
14
|
-
gem "sidekiq", "< 6.0"
|
|
15
|
-
|
|
16
|
-
gemspec path: "../"
|
data/gemfiles/sinatra_14.gemfile
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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 "minitest-reporters"
|
|
9
|
-
gem "webmock"
|
|
10
|
-
gem "puma"
|
|
11
|
-
gem "rubocop", "~> 1.9"
|
|
12
|
-
gem "rack-test"
|
|
13
|
-
gem "simplecov", "~> 0.21.2"
|
|
14
|
-
gem "sinatra", ">= 1.4.8", "< 2.0"
|
|
15
|
-
|
|
16
|
-
gemspec path: "../"
|