instana 1.11.4-java → 1.11.5-java
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/README.md +1 -1
- data/lib/instana/instrumentation/redis.rb +24 -42
- data/lib/instana/tracer.rb +26 -5
- data/lib/instana/version.rb +1 -1
- data/test/instrumentation/redis_test.rb +25 -28
- data/test/instrumentation/sidekiq-client_test.rb +7 -0
- data/test/instrumentation/sidekiq-worker_test.rb +6 -0
- data/test/test_helper.rb +0 -5
- data/test/tracing/opentracing_test.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d68942800f8784f7d97e3c87e097147d939a244189d8761afc94eccbbf3f3142
|
|
4
|
+
data.tar.gz: 04f9cf75863a58351685f034a874d486aa730d013b967f455c2ed60828746c81
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0c2a64684bec1fc80d1f1c1f80ac3cb4ba97b3d4abee0d462436dc4fba5f6165bdc2090c2958c700ae591f4a4707e48ff26d2224c46e4d50ec850f6c0d0b7f11
|
|
7
|
+
data.tar.gz: e5704b2b7d33e93a6b4654b2c7152525b8d988cd70e6e8374b7e7774b9fcef63a4012ecfa20808827d846445fae75ac7a4b2c0f4f974ee13d484e77124ecd4f8
|
data/README.md
CHANGED
|
@@ -1,47 +1,29 @@
|
|
|
1
|
-
module Instana
|
|
2
|
-
module Instrumentation
|
|
3
|
-
class Redis
|
|
4
|
-
def self.get_host(client)
|
|
5
|
-
client.host
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def self.get_port(client)
|
|
9
|
-
client.port
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.pipeline_command(pipeline)
|
|
13
|
-
pipeline.is_a?(::Redis::Pipeline::Multi) ? 'MULTI' : 'PIPELINE'
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
1
|
if defined?(::Redis) && ::Instana.config[:redis][:enabled]
|
|
20
2
|
::Redis::Client.class_eval do
|
|
21
3
|
def call_with_instana(*args, &block)
|
|
22
4
|
kv_payload = { redis: {} }
|
|
23
5
|
|
|
24
|
-
if !Instana.tracer.tracing?
|
|
6
|
+
if !Instana.tracer.tracing? || ::Instana.tracer.tracing_span?(:redis)
|
|
25
7
|
return call_without_instana(*args, &block)
|
|
26
8
|
end
|
|
27
9
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
connection
|
|
32
|
-
db
|
|
33
|
-
command
|
|
34
|
-
|
|
35
|
-
|
|
10
|
+
::Instana.tracer.log_entry(:redis)
|
|
11
|
+
|
|
12
|
+
begin
|
|
13
|
+
kv_payload[:redis][:connection] = "#{self.host}:#{self.port}"
|
|
14
|
+
kv_payload[:redis][:db] = db.to_s
|
|
15
|
+
kv_payload[:redis][:command] = args[0][0].to_s.upcase
|
|
16
|
+
rescue
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
36
19
|
|
|
37
20
|
call_without_instana(*args, &block)
|
|
38
21
|
rescue => e
|
|
39
|
-
|
|
40
|
-
::Instana.tracer.log_info(kv_payload)
|
|
22
|
+
::Instana.tracer.log_info({ redis: {error: true} })
|
|
41
23
|
::Instana.tracer.log_error(e)
|
|
42
24
|
raise
|
|
43
25
|
ensure
|
|
44
|
-
::Instana.tracer.log_exit(:redis,
|
|
26
|
+
::Instana.tracer.log_exit(:redis, kv_payload)
|
|
45
27
|
end
|
|
46
28
|
|
|
47
29
|
::Instana.logger.debug "Instrumenting Redis"
|
|
@@ -52,28 +34,28 @@ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
|
|
|
52
34
|
def call_pipeline_with_instana(*args, &block)
|
|
53
35
|
kv_payload = { redis: {} }
|
|
54
36
|
|
|
55
|
-
if !Instana.tracer.tracing?
|
|
37
|
+
if !Instana.tracer.tracing? || ::Instana.tracer.tracing_span?(:redis)
|
|
56
38
|
return call_pipeline_without_instana(*args, &block)
|
|
57
39
|
end
|
|
58
40
|
|
|
41
|
+
::Instana.tracer.log_entry(:redis)
|
|
42
|
+
|
|
59
43
|
pipeline = args.first
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
::Instana.tracer.log_entry(:redis, kv_payload)
|
|
44
|
+
begin
|
|
45
|
+
kv_payload[:redis][:connection] = "#{self.host}:#{self.port}"
|
|
46
|
+
kv_payload[:redis][:db] = db.to_s
|
|
47
|
+
kv_payload[:redis][:command] = pipeline.is_a?(::Redis::Pipeline::Multi) ? 'MULTI' : 'PIPELINE'
|
|
48
|
+
rescue
|
|
49
|
+
nil
|
|
50
|
+
end
|
|
68
51
|
|
|
69
52
|
call_pipeline_without_instana(*args, &block)
|
|
70
53
|
rescue => e
|
|
71
|
-
|
|
72
|
-
::Instana.tracer.log_info(kv_payload)
|
|
54
|
+
::Instana.tracer.log_info({ redis: {error: true} })
|
|
73
55
|
::Instana.tracer.log_error(e)
|
|
74
56
|
raise
|
|
75
57
|
ensure
|
|
76
|
-
::Instana.tracer.log_exit(:redis,
|
|
58
|
+
::Instana.tracer.log_exit(:redis, kv_payload)
|
|
77
59
|
end
|
|
78
60
|
|
|
79
61
|
alias call_pipeline_without_instana call_pipeline
|
data/lib/instana/tracer.rb
CHANGED
|
@@ -26,7 +26,7 @@ module Instana
|
|
|
26
26
|
# Will start a new trace or continue an on-going one (such as
|
|
27
27
|
# from incoming remote requests with context headers).
|
|
28
28
|
#
|
|
29
|
-
# @param name [String] the name of the span to start
|
|
29
|
+
# @param name [String, Symbol] the name of the span to start
|
|
30
30
|
# @param kvs [Hash] list of key values to be reported in the span
|
|
31
31
|
# @param incoming_context [Hash] specifies the incoming context. At a
|
|
32
32
|
# minimum, it should specify :trace_id and :span_id from the following:
|
|
@@ -52,7 +52,7 @@ module Instana
|
|
|
52
52
|
# @db.select(1)
|
|
53
53
|
# end
|
|
54
54
|
#
|
|
55
|
-
# @param name [String] the name of the span to start
|
|
55
|
+
# @param name [String, Symbol] the name of the span to start
|
|
56
56
|
# @param kvs [Hash] list of key values to be reported in this new span
|
|
57
57
|
#
|
|
58
58
|
def trace(name, kvs = {}, &block)
|
|
@@ -72,7 +72,7 @@ module Instana
|
|
|
72
72
|
# Will start a new trace or continue an on-going one (such as
|
|
73
73
|
# from incoming remote requests with context headers).
|
|
74
74
|
#
|
|
75
|
-
# @param name [String] the name of the span to start
|
|
75
|
+
# @param name [String, Symbol] the name of the span to start
|
|
76
76
|
# @param kvs [Hash] list of key values to be reported in the span
|
|
77
77
|
# @param incoming_context [SpanContext or Hash] specifies the incoming context. At a
|
|
78
78
|
# minimum, it should specify :trace_id and :span_id from the following:
|
|
@@ -107,7 +107,7 @@ module Instana
|
|
|
107
107
|
# Will establish a new span as a child of the current span
|
|
108
108
|
# in an existing trace
|
|
109
109
|
#
|
|
110
|
-
# @param name [String] the name of the span to create
|
|
110
|
+
# @param name [String, Symbol] the name of the span to create
|
|
111
111
|
# @param kvs [Hash] list of key values to be reported in the span
|
|
112
112
|
#
|
|
113
113
|
def log_entry(name, kvs = nil, start_time = ::Instana::Util.now_in_ms, child_of = nil)
|
|
@@ -145,7 +145,7 @@ module Instana
|
|
|
145
145
|
# @note `name` isn't really required but helps keep sanity that
|
|
146
146
|
# we're closing out the span that we really want to close out.
|
|
147
147
|
#
|
|
148
|
-
# @param name [String] the name of the span to exit (close out)
|
|
148
|
+
# @param name [String, Symbol] the name of the span to exit (close out)
|
|
149
149
|
# @param kvs [Hash] list of key values to be reported in the span
|
|
150
150
|
#
|
|
151
151
|
def log_exit(name, kvs = {})
|
|
@@ -263,6 +263,27 @@ module Instana
|
|
|
263
263
|
new_span
|
|
264
264
|
end
|
|
265
265
|
|
|
266
|
+
# Start a new span which is the child of the current span
|
|
267
|
+
#
|
|
268
|
+
# @param operation_name [String] The name of the operation represented by the span
|
|
269
|
+
# @param child_of [Span] A span to be used as the ChildOf reference
|
|
270
|
+
# @param start_time [Time] the start time of the span
|
|
271
|
+
# @param tags [Hash] Starting tags for the span
|
|
272
|
+
#
|
|
273
|
+
# @return [Span]
|
|
274
|
+
#
|
|
275
|
+
def start_active_span(operation_name, child_of: self.current_span, start_time: ::Instana::Util.now_in_ms, tags: nil)
|
|
276
|
+
self.current_span = start_span(operation_name, child_of: child_of, start_time: start_time, tags: tags)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# Returns the currently active span
|
|
280
|
+
#
|
|
281
|
+
# @return [Span]
|
|
282
|
+
#
|
|
283
|
+
def active_span
|
|
284
|
+
self.current_span
|
|
285
|
+
end
|
|
286
|
+
|
|
266
287
|
# Inject a span into the given carrier
|
|
267
288
|
#
|
|
268
289
|
# @param span_context [SpanContext]
|
data/lib/instana/version.rb
CHANGED
|
@@ -1,40 +1,44 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
3
|
class RedisTest < Minitest::Test
|
|
4
|
+
def setup
|
|
5
|
+
if ENV.key?('REDIS_URL')
|
|
6
|
+
@redis_url = ENV['REDIS_URL']
|
|
7
|
+
else
|
|
8
|
+
@redis_url = "redis://localhost:6379"
|
|
9
|
+
end
|
|
10
|
+
@redis_client = Redis.new(url: @redis_url)
|
|
11
|
+
end
|
|
12
|
+
|
|
4
13
|
def test_normal_call
|
|
5
14
|
clear_all!
|
|
6
|
-
redis_client = create_redis_client
|
|
7
15
|
|
|
8
16
|
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
9
|
-
redis_client.set('hello', 'world')
|
|
17
|
+
@redis_client.set('hello', 'world')
|
|
10
18
|
end
|
|
11
|
-
redis_client.disconnect!
|
|
12
19
|
|
|
13
20
|
assert_redis_trace('SET')
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
def test_normal_call_with_error
|
|
17
24
|
clear_all!
|
|
18
|
-
redis_client = create_redis_client
|
|
19
25
|
|
|
20
26
|
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
21
27
|
begin
|
|
22
|
-
redis_client.zadd('hello', 'invalid', 'value')
|
|
28
|
+
@redis_client.zadd('hello', 'invalid', 'value')
|
|
23
29
|
rescue; end
|
|
24
30
|
end
|
|
25
|
-
redis_client.disconnect!
|
|
26
31
|
|
|
27
32
|
assert_redis_trace('ZADD', with_error: 'ERR value is not a valid float')
|
|
28
33
|
end
|
|
29
34
|
|
|
30
35
|
def test_pipeline_call
|
|
31
36
|
clear_all!
|
|
32
|
-
redis_client = create_redis_client
|
|
33
37
|
|
|
34
38
|
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
35
|
-
redis_client.pipelined do
|
|
36
|
-
redis_client.set('hello', 'world')
|
|
37
|
-
redis_client.set('other', 'world')
|
|
39
|
+
@redis_client.pipelined do
|
|
40
|
+
@redis_client.set('hello', 'world')
|
|
41
|
+
@redis_client.set('other', 'world')
|
|
38
42
|
end
|
|
39
43
|
end
|
|
40
44
|
|
|
@@ -43,13 +47,12 @@ class RedisTest < Minitest::Test
|
|
|
43
47
|
|
|
44
48
|
def test_pipeline_call_with_error
|
|
45
49
|
clear_all!
|
|
46
|
-
redis_client = create_redis_client
|
|
47
50
|
|
|
48
51
|
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
49
52
|
begin
|
|
50
|
-
redis_client.pipelined do
|
|
51
|
-
redis_client.set('other', 'world')
|
|
52
|
-
redis_client.call('invalid')
|
|
53
|
+
@redis_client.pipelined do
|
|
54
|
+
@redis_client.set('other', 'world')
|
|
55
|
+
@redis_client.call('invalid')
|
|
53
56
|
end
|
|
54
57
|
rescue; end
|
|
55
58
|
end
|
|
@@ -59,12 +62,11 @@ class RedisTest < Minitest::Test
|
|
|
59
62
|
|
|
60
63
|
def test_multi_call
|
|
61
64
|
clear_all!
|
|
62
|
-
redis_client = create_redis_client
|
|
63
65
|
|
|
64
66
|
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
65
|
-
redis_client.multi do
|
|
66
|
-
redis_client.set('hello', 'world')
|
|
67
|
-
redis_client.set('other', 'world')
|
|
67
|
+
@redis_client.multi do
|
|
68
|
+
@redis_client.set('hello', 'world')
|
|
69
|
+
@redis_client.set('other', 'world')
|
|
68
70
|
end
|
|
69
71
|
end
|
|
70
72
|
|
|
@@ -73,13 +75,12 @@ class RedisTest < Minitest::Test
|
|
|
73
75
|
|
|
74
76
|
def test_multi_call_with_error
|
|
75
77
|
clear_all!
|
|
76
|
-
redis_client = create_redis_client
|
|
77
78
|
|
|
78
79
|
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
79
80
|
begin
|
|
80
|
-
redis_client.multi do
|
|
81
|
-
redis_client.set('other', 'world')
|
|
82
|
-
redis_client.call('invalid')
|
|
81
|
+
@redis_client.multi do
|
|
82
|
+
@redis_client.set('other', 'world')
|
|
83
|
+
@redis_client.call('invalid')
|
|
83
84
|
end
|
|
84
85
|
rescue; end
|
|
85
86
|
end
|
|
@@ -89,10 +90,6 @@ class RedisTest < Minitest::Test
|
|
|
89
90
|
|
|
90
91
|
private
|
|
91
92
|
|
|
92
|
-
def create_redis_client
|
|
93
|
-
Redis.new(url: ENV['I_REDIS_URL'])
|
|
94
|
-
end
|
|
95
|
-
|
|
96
93
|
def assert_redis_trace(command, with_error: nil)
|
|
97
94
|
spans = ::Instana.processor.queued_spans
|
|
98
95
|
assert_equal 2, spans.length
|
|
@@ -105,10 +102,10 @@ class RedisTest < Minitest::Test
|
|
|
105
102
|
|
|
106
103
|
data = second_span[:data]
|
|
107
104
|
|
|
108
|
-
uri = URI.parse(
|
|
105
|
+
uri = URI.parse(@redis_url)
|
|
109
106
|
assert_equal "#{uri.host}:#{uri.port}", data[:redis][:connection]
|
|
110
107
|
|
|
111
|
-
assert_equal 0, data[:redis][:db]
|
|
108
|
+
assert_equal "0", data[:redis][:db]
|
|
112
109
|
assert_equal command, data[:redis][:command]
|
|
113
110
|
|
|
114
111
|
if with_error
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
3
|
class SidekiqClientTest < Minitest::Test
|
|
4
|
+
def setup
|
|
5
|
+
Sidekiq.configure_client do |config|
|
|
6
|
+
config.redis = { url: ENV["REDIS_URL"] }
|
|
7
|
+
end
|
|
8
|
+
::Sidekiq::Queue.new('some_random_queue').clear
|
|
9
|
+
end
|
|
10
|
+
|
|
4
11
|
def test_config_defaults
|
|
5
12
|
assert ::Instana.config[:'sidekiq-client'].is_a?(Hash)
|
|
6
13
|
assert ::Instana.config[:'sidekiq-client'].key?(:enabled)
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
3
|
class SidekiqServerTest < Minitest::Test
|
|
4
|
+
def setup
|
|
5
|
+
Sidekiq.configure_client do |config|
|
|
6
|
+
config.redis = { url: ENV["REDIS_URL"] }
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
4
10
|
def test_config_defaults
|
|
5
11
|
assert ::Instana.config[:'sidekiq-worker'].is_a?(Hash)
|
|
6
12
|
assert ::Instana.config[:'sidekiq-worker'].key?(:enabled)
|
data/test/test_helper.rb
CHANGED
|
@@ -56,10 +56,6 @@ when /libraries/
|
|
|
56
56
|
require './test/servers/sidekiq/worker'
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
if defined?(::Redis)
|
|
60
|
-
$redis = Redis.new(url: ENV['I_REDIS_URL'])
|
|
61
|
-
end
|
|
62
|
-
|
|
63
59
|
Minitest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
|
64
60
|
|
|
65
61
|
# Used to reset the gem to boot state. It clears out any queued and/or staged
|
|
@@ -68,7 +64,6 @@ Minitest::Reporters.use! MiniTest::Reporters::SpecReporter.new
|
|
|
68
64
|
def clear_all!
|
|
69
65
|
::Instana.processor.clear!
|
|
70
66
|
::Instana.tracer.clear!
|
|
71
|
-
$redis.flushall if $redis
|
|
72
67
|
nil
|
|
73
68
|
end
|
|
74
69
|
|
|
@@ -332,4 +332,25 @@ class OpenTracerTest < Minitest::Test
|
|
|
332
332
|
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
|
333
333
|
assert_equal(nil, av_span.context.baggage)
|
|
334
334
|
end
|
|
335
|
+
|
|
336
|
+
def test_start_active_span
|
|
337
|
+
clear_all!
|
|
338
|
+
|
|
339
|
+
span = OpenTracing.start_active_span(:rack)
|
|
340
|
+
assert_equal ::Instana::Tracer.current_span, span
|
|
341
|
+
|
|
342
|
+
sleep 0.1
|
|
343
|
+
|
|
344
|
+
span.finish
|
|
345
|
+
|
|
346
|
+
spans = ::Instana.processor.queued_spans
|
|
347
|
+
assert_equal 1, spans.length
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def test_active_span
|
|
351
|
+
clear_all!
|
|
352
|
+
|
|
353
|
+
span = OpenTracing.start_active_span(:rack)
|
|
354
|
+
assert_equal OpenTracing.active_span, span
|
|
355
|
+
end
|
|
335
356
|
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.11.
|
|
4
|
+
version: 1.11.5
|
|
5
5
|
platform: java
|
|
6
6
|
authors:
|
|
7
7
|
- Peter Giacomo Lombardo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-03-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|