instana 1.192.1 → 1.193.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1671f39523faeeea826d7892820992a88ffbb3f923fb20b3c19c082dc281480a
4
- data.tar.gz: a6f70177f02c753830fea6075556a70cd4c3ccd30e083d0e316f638396ea6c44
3
+ metadata.gz: 26ea11d0efe2f26610441700b71bc9c2abd4192566a86d00089d1e889d8457d3
4
+ data.tar.gz: 5dde944418b1f34391c08114692b4f34d27acc8328e0d7bd47c7b14834e21d61
5
5
  SHA512:
6
- metadata.gz: be7333bc5dab3edff9342fd0f6a311b45df11a2fd58c9f61153e32fa3f638ac359a750365204655b6933dac90259e991fb1bddd9b9214f1d7f3fe62159c0d69b
7
- data.tar.gz: bdc9a0ee62692ff327a849732508cf6656b76d24206528d8120830b764b2968bf040a1d93f9735f7004c1e2104c8e394f8c68834a91e1e3eaf3a2861247b295c
6
+ metadata.gz: 11c700d01ab267b978d527dd9fcc993b5ae19bb659074690ced25b12f34d1b58c850c241776b3c8932a274138170d885e7f9a0c28b430bc382a81c0df3b99451
7
+ data.tar.gz: 8e4dd40a1d9f87e00905eca337189870f3e8237ce33b3be80853d85e7b11667243fe1e5ca7c6e126b492e0c2ba5d404257bfa908e50984f40d184a65f1067239
@@ -6,10 +6,8 @@ module Instana
6
6
 
7
7
  # This module supports instrumenting ActiveRecord with the mysql2 adapter.
8
8
  #
9
- def self.included(klass)
9
+ def self.prepended(klass)
10
10
  if ActiveRecord::VERSION::STRING >= '3.2'
11
- Instana::Util.method_alias(klass, :execute)
12
-
13
11
  @@sanitize_regexp = Regexp.new('(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)', Regexp::IGNORECASE)
14
12
  end
15
13
  end
@@ -40,17 +38,17 @@ module Instana
40
38
  IGNORED_PAYLOADS.include?(name) || sql !~ EXPLAINED_SQLS
41
39
  end
42
40
 
43
- def execute_with_instana(sql, name = nil)
41
+ def execute(sql, name = nil)
44
42
  tracing = ::Instana.tracer.tracing?
45
43
  if !tracing || ignore_payload?(name, sql)
46
- return execute_without_instana(sql, name)
44
+ return super(sql, name)
47
45
  elsif ::Instana.tracer.current_span[:n] == :activerecord
48
- return execute_without_instana(sql, name)
46
+ return super(sql, name)
49
47
  end
50
48
 
51
49
  kv_payload = collect(sql)
52
50
  ::Instana.tracer.trace(:activerecord, kv_payload) do
53
- execute_without_instana(sql, name)
51
+ super(sql, name)
54
52
  end
55
53
  end
56
54
  end
@@ -1,18 +1,13 @@
1
1
  module Instana
2
2
  module Instrumentation
3
3
  module ActionViewRenderer
4
- def self.included(klass)
5
- ::Instana::Util.method_alias(klass, :render_partial)
6
- ::Instana::Util.method_alias(klass, :render_collection)
7
- end
8
-
9
- def render_partial_with_instana(*args)
4
+ def render_partial(*args)
10
5
  kv_payload = { :render => {} }
11
6
  kv_payload[:render][:type] = :partial
12
7
  kv_payload[:render][:name] = @options[:partial].to_s if @options.is_a?(Hash)
13
8
 
14
9
  ::Instana.tracer.log_entry(:render, kv_payload)
15
- render_partial_without_instana(*args)
10
+ super(*args)
16
11
  rescue Exception => e
17
12
  ::Instana.tracer.log_error(e)
18
13
  raise
@@ -20,13 +15,14 @@ module Instana
20
15
  ::Instana.tracer.log_exit(:render)
21
16
  end
22
17
 
23
- def render_collection_with_instana(*args)
18
+ def render_collection(*args)
19
+ puts 'called'
24
20
  kv_payload = { :render => {} }
25
21
  kv_payload[:render][:type] = :collection
26
22
  kv_payload[:render][:name] = @path.to_s
27
23
 
28
24
  ::Instana.tracer.log_entry(:render, kv_payload)
29
- render_collection_without_instana(*args)
25
+ super(*args)
30
26
  rescue Exception => e
31
27
  ::Instana.tracer.log_error(e)
32
28
  raise
@@ -39,5 +35,5 @@ end
39
35
 
40
36
  if defined?(::ActionView) && ::Instana.config[:action_view][:enabled] && ::ActionPack::VERSION::STRING >= '3.1'
41
37
  ::Instana.logger.debug "Instrumenting ActionView"
42
- ::ActionView::PartialRenderer.send(:include, ::Instana::Instrumentation::ActionViewRenderer)
38
+ ::ActionView::PartialRenderer.send(:prepend, ::Instana::Instrumentation::ActionViewRenderer)
43
39
  end
@@ -9,19 +9,19 @@ if defined?(::ActiveRecord) && ::Instana.config[:active_record][:enabled]
9
9
  # Mysql
10
10
  if defined?(ActiveRecord::ConnectionAdapters::MysqlAdapter)
11
11
  ::Instana.logger.debug "Instrumenting ActiveRecord (mysql)"
12
- ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:include, ::Instana::Instrumentation::MysqlAdapter)
13
- ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.send(:include, ::Instana::Instrumentation::AbstractMysqlAdapter)
12
+ ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:prepend, ::Instana::Instrumentation::MysqlAdapter)
13
+ ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.send(:prepend, ::Instana::Instrumentation::AbstractMysqlAdapter)
14
14
  end
15
15
 
16
16
  # Mysql2
17
17
  if defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
18
18
  ::Instana.logger.debug "Instrumenting ActiveRecord (mysql2)"
19
- ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:include, ::Instana::Instrumentation::Mysql2Adapter)
19
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:prepend, ::Instana::Instrumentation::Mysql2Adapter)
20
20
  end
21
21
 
22
22
  # Postgres
23
23
  if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
24
24
  ::Instana.logger.debug "Instrumenting ActiveRecord (postgresql)"
25
- ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send(:include, ::Instana::Instrumentation::PostgreSQLAdapter)
25
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send(:prepend, ::Instana::Instrumentation::PostgreSQLAdapter)
26
26
  end
27
27
  end
@@ -6,13 +6,9 @@ module Instana
6
6
 
7
7
  # This module supports instrumenting ActiveRecord with the mysql2 adapter.
8
8
  #
9
- def self.included(klass)
9
+ def self.prepended(klass)
10
10
  # ActiveRecord 3.1 and up only (for now possibly)
11
11
  if ActiveRecord::VERSION::STRING > '3.0'
12
- Instana::Util.method_alias(klass, :exec_delete)
13
- Instana::Util.method_alias(klass, :exec_insert)
14
- Instana::Util.method_alias(klass, :exec_query)
15
-
16
12
  @@sanitize_regexp = Regexp.new('(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)', Regexp::IGNORECASE)
17
13
  end
18
14
  end
@@ -49,37 +45,37 @@ module Instana
49
45
  IGNORED_PAYLOADS.include?(name) || sql !~ EXPLAINED_SQLS
50
46
  end
51
47
 
52
- def exec_delete_with_instana(sql, name = nil, binds = [])
48
+ def exec_delete(sql, name = nil, binds = [])
53
49
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql)
54
- return exec_delete_without_instana(sql, name, binds)
50
+ return super(sql, name, binds)
55
51
  end
56
52
 
57
53
  kv_payload = collect(sql)
58
54
  ::Instana.tracer.trace(:activerecord, kv_payload) do
59
- exec_delete_without_instana(sql, name, binds)
55
+ super(sql, name, binds)
60
56
  end
61
57
  end
62
58
 
63
- def exec_insert_with_instana(sql, name = 'SQL', binds = [], *args)
59
+ def exec_insert(sql, name = 'SQL', binds = [], *args)
64
60
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql)
65
- return exec_insert_without_instana(sql, name, binds, *args)
61
+ return super(sql, name, binds, *args)
66
62
  end
67
63
 
68
64
  kv_payload = collect(sql)
69
65
  ::Instana.tracer.trace(:activerecord, kv_payload) do
70
- exec_insert_without_instana(sql, name, binds, *args)
66
+ super(sql, name, binds, *args)
71
67
  end
72
68
  end
73
69
 
74
- def exec_query_with_instana(sql, name = 'SQL', binds = [], *args)
70
+ def exec_query(sql, name = 'SQL', binds = [], *args)
75
71
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql) ||
76
72
  ::Instana.tracer.current_span[:n] == :activerecord
77
- return exec_query_without_instana(sql, name, binds, *args)
73
+ return super(sql, name, binds, *args)
78
74
  end
79
75
 
80
76
  kv_payload = collect(sql)
81
77
  ::Instana.tracer.trace(:activerecord, kv_payload) do
82
- exec_query_without_instana(sql, name, binds, *args)
78
+ super(sql, name, binds, *args)
83
79
  end
84
80
  end
85
81
  end
@@ -6,10 +6,8 @@ module Instana
6
6
 
7
7
  # This module supports instrumenting ActiveRecord with the mysql2 adapter.
8
8
  #
9
- def self.included(klass)
9
+ def self.prepended(klass)
10
10
  if ActiveRecord::VERSION::STRING >= '3.2'
11
- Instana::Util.method_alias(klass, :exec_query)
12
-
13
11
  @@sanitize_regexp = Regexp.new('(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)', Regexp::IGNORECASE)
14
12
  end
15
13
  end
@@ -46,15 +44,15 @@ module Instana
46
44
  IGNORED_PAYLOADS.include?(name) || sql !~ EXPLAINED_SQLS
47
45
  end
48
46
 
49
- def exec_query_with_instana(sql, name = 'SQL', binds = [], *args)
47
+ def exec_query(sql, name = 'SQL', binds = [], *args)
50
48
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql) ||
51
49
  ::Instana.tracer.current_span[:n] == :activerecord
52
- return exec_query_without_instana(sql, name, binds, *args)
50
+ return super(sql, name, binds, *args)
53
51
  end
54
52
 
55
53
  kv_payload = collect(sql)
56
54
  ::Instana.tracer.trace(:activerecord, kv_payload) do
57
- exec_query_without_instana(sql, name, binds, *args)
55
+ super(sql, name, binds, *args)
58
56
  end
59
57
  end
60
58
  end
@@ -8,15 +8,11 @@ module Instana
8
8
  # This module supports instrumenting ActiveRecord with the postgresql adapter. Only
9
9
  # versions >= 3.1 are supported.
10
10
  #
11
- def self.included(klass)
11
+ def self.prepended(klass)
12
12
  if (::ActiveRecord::VERSION::MAJOR == 3 && ::ActiveRecord::VERSION::MINOR > 0) ||
13
13
  ::ActiveRecord::VERSION::MAJOR >= 4
14
14
 
15
15
  # ActiveRecord 3.1 and up
16
- Instana::Util.method_alias(klass, :exec_query)
17
- Instana::Util.method_alias(klass, :exec_delete)
18
- Instana::Util.method_alias(klass, :execute)
19
-
20
16
  @@sanitize_regexp = Regexp.new('(\'[\s\S][^\']*\'|\d*\.\d+|\d+|NULL)', Regexp::IGNORECASE)
21
17
  end
22
18
  end
@@ -66,36 +62,36 @@ module Instana
66
62
  IGNORED_PAYLOADS.include?(name) || IGNORED_SQL.include?(sql)
67
63
  end
68
64
 
69
- def exec_query_with_instana(sql, name = 'SQL', binds = [], *args)
65
+ def exec_query(sql, name = 'SQL', binds = [], *args)
70
66
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql)
71
- return exec_query_without_instana(sql, name, binds, *args)
67
+ return super(sql, name, binds, *args)
72
68
  end
73
69
 
74
70
  kv_payload = collect(sql, binds)
75
71
  ::Instana.tracer.trace(:activerecord, kv_payload) do
76
- exec_query_without_instana(sql, name, binds, *args)
72
+ super(sql, name, binds, *args)
77
73
  end
78
74
  end
79
75
 
80
- def exec_delete_with_instana(sql, name = nil, binds = [])
76
+ def exec_delete(sql, name = nil, binds = [])
81
77
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql)
82
- return exec_delete_without_instana(sql, name, binds)
78
+ return super(sql, name, binds)
83
79
  end
84
80
 
85
81
  kv_payload = collect(sql, binds)
86
82
  ::Instana.tracer.trace(:activerecord, kv_payload) do
87
- exec_delete_without_instana(sql, name, binds)
83
+ super(sql, name, binds)
88
84
  end
89
85
  end
90
86
 
91
- def execute_with_instana(sql, name = nil)
87
+ def execute(sql, name = nil)
92
88
  if !::Instana.tracer.tracing? || ignore_payload?(name, sql)
93
- return execute_without_instana(sql, name)
89
+ return super(sql, name)
94
90
  end
95
91
 
96
92
  kv_payload = collect(sql)
97
93
  ::Instana.tracer.trace(:activerecord, kv_payload) do
98
- execute_without_instana(sql, name)
94
+ super(sql, name)
99
95
  end
100
96
  end
101
97
  end
@@ -1,15 +1,10 @@
1
1
  module Instana
2
2
  module Instrumentation
3
3
  module Dalli
4
- def self.included(klass)
5
- ::Instana::Util.method_alias(klass, :perform)
6
- ::Instana::Util.method_alias(klass, :get_multi)
7
- end
8
-
9
- def perform_with_instana(*args, &blk)
4
+ def perform(*args, &blk)
10
5
  if !::Instana.tracer.tracing? || ::Instana.tracer.tracing_span?(:memcache)
11
6
  do_skip = true
12
- return perform_without_instana(*args, &blk)
7
+ return super(*args, &blk)
13
8
  end
14
9
 
15
10
  op, key, *_opts = args
@@ -22,7 +17,7 @@ module Instana
22
17
  ::Instana.tracer.log_entry(:memcache, entry_payload)
23
18
  exit_payload = { :memcache => {} }
24
19
 
25
- result = perform_without_instana(*args, &blk)
20
+ result = super(*args, &blk)
26
21
 
27
22
  if op == :get
28
23
  exit_payload[:memcache][:hit] = result ? 1 : 0
@@ -36,7 +31,7 @@ module Instana
36
31
  ::Instana.tracer.log_exit(:memcache, exit_payload) unless do_skip
37
32
  end
38
33
 
39
- def get_multi_with_instana(*keys)
34
+ def get_multi(*keys)
40
35
  entry_payload = { :memcache => {} }
41
36
  entry_payload[:memcache][:namespace] = @options[:namespace] if @options.key?(:namespace)
42
37
  entry_payload[:memcache][:command] = :get_multi
@@ -45,7 +40,7 @@ module Instana
45
40
  ::Instana.tracer.log_entry(:memcache, entry_payload)
46
41
  exit_payload = { :memcache => {} }
47
42
 
48
- result = get_multi_without_instana(*keys)
43
+ result = super(*keys)
49
44
 
50
45
  exit_payload[:memcache][:hits] = result.length
51
46
  result
@@ -63,13 +58,13 @@ module Instana
63
58
  ::Instana::Util.method_alias(klass, :request)
64
59
  end
65
60
 
66
- def request_with_instana(op, *args)
61
+ def request(op, *args)
67
62
  if ::Instana.tracer.tracing? || ::Instana.tracer.tracing_span?(:memcache)
68
63
  info_payload = { :memcache => {} }
69
64
  info_payload[:memcache][:server] = "#{@hostname}:#{@port}"
70
65
  ::Instana.tracer.log_info(info_payload)
71
66
  end
72
- request_without_instana(op, *args)
67
+ super(op, *args)
73
68
  end
74
69
  end
75
70
  end
@@ -77,6 +72,6 @@ end
77
72
 
78
73
  if defined?(::Dalli) && ::Instana.config[:dalli][:enabled]
79
74
  ::Instana.logger.debug "Instrumenting Dalli"
80
- ::Dalli::Client.send(:include, ::Instana::Instrumentation::Dalli)
81
- ::Dalli::Server.send(:include, ::Instana::Instrumentation::DalliServer)
75
+ ::Dalli::Client.send(:prepend, ::Instana::Instrumentation::Dalli)
76
+ ::Dalli::Server.send(:prepend, ::Instana::Instrumentation::DalliServer)
82
77
  end
@@ -1,84 +1,94 @@
1
1
  call_types = [:request_response, :client_streamer, :server_streamer, :bidi_streamer]
2
2
 
3
3
  if defined?(GRPC::ActiveCall) && ::Instana.config[:grpc][:enabled]
4
- call_types.each do |call_type|
5
- GRPC::ClientStub.class_eval <<-RUBY, __FILE__, __LINE__ + 1
6
- def #{call_type}_with_instana(method, *others, **options)
7
- kvs = { rpc: {} }
4
+ module Instana
5
+ module GRPCCientInstrumentation
6
+ CALL_TYPES = [:request_response, :client_streamer, :server_streamer, :bidi_streamer]
8
7
 
9
- unless ::Instana.tracer.tracing?
10
- return #{call_type}_without_instana(method, *others, **options)
11
- end
8
+ CALL_TYPES.each do |call_type|
9
+ define_method(call_type) do |method, *others, **options|
10
+ begin
11
+ kvs = { rpc: {} }
12
12
 
13
- kvs[:rpc][:flavor] = :grpc
14
- kvs[:rpc][:host] = @host
15
- kvs[:rpc][:call] = method
16
- kvs[:rpc][:call_type] = :#{call_type}
13
+ unless ::Instana.tracer.tracing?
14
+ return super(method, *others, **options)
15
+ end
17
16
 
18
- ::Instana.tracer.log_entry(:'rpc-client', kvs)
17
+ kvs[:rpc][:flavor] = :grpc
18
+ kvs[:rpc][:host] = @host
19
+ kvs[:rpc][:call] = method
20
+ kvs[:rpc][:call_type] = call_type
19
21
 
20
- context = ::Instana.tracer.context
21
- if context
22
- options[:metadata] = (options[:metadata] || {}).merge(
23
- 'x-instana-t' => context.trace_id_header,
24
- 'x-instana-s' => context.span_id_header
25
- )
26
- end
22
+ ::Instana.tracer.log_entry(:'rpc-client', kvs)
27
23
 
28
- #{call_type}_without_instana(method, *others, **options)
29
- rescue => e
30
- kvs[:rpc][:error] = true
31
- ::Instana.tracer.log_info(kvs)
32
- ::Instana.tracer.log_error(e)
33
- raise
34
- ensure
35
- ::Instana.tracer.log_exit(:'rpc-client', {})
36
- end
24
+ context = ::Instana.tracer.context
25
+ if context
26
+ options[:metadata] = (options[:metadata] || {}).merge(
27
+ 'x-instana-t' => context.trace_id_header,
28
+ 'x-instana-s' => context.span_id_header
29
+ )
30
+ end
37
31
 
38
- alias #{call_type}_without_instana #{call_type}
39
- alias #{call_type} #{call_type}_with_instana
40
- RUBY
32
+ super(method, *others, **options)
33
+ rescue => e
34
+ kvs[:rpc][:error] = true
35
+ ::Instana.tracer.log_info(kvs)
36
+ ::Instana.tracer.log_error(e)
37
+ raise
38
+ ensure
39
+ ::Instana.tracer.log_exit(:'rpc-client', {})
40
+ end
41
+ end
42
+ end
43
+ end
41
44
  end
45
+
42
46
  ::Instana.logger.debug 'Instrumenting GRPC client'
47
+ ::GRPC::ClientStub.prepend(::Instana::GRPCCientInstrumentation)
43
48
  end
44
49
 
45
50
  if defined?(GRPC::RpcDesc) && ::Instana.config[:grpc][:enabled]
46
- call_types.each do |call_type|
47
- GRPC::RpcDesc.class_eval <<-RUBY, __FILE__, __LINE__ + 1
48
- def handle_#{call_type}_with_instana(active_call, mth, *others)
49
- kvs = { rpc: {} }
50
- metadata = active_call.metadata
51
+ module Instana
52
+ module GRPCServerInstrumentation
53
+ CALL_TYPES = [:request_response, :client_streamer, :server_streamer, :bidi_streamer]
51
54
 
52
- incoming_context = {}
53
- if metadata.key?('x-instana-t')
54
- incoming_context[:trace_id] = ::Instana::Util.header_to_id(metadata['x-instana-t'])
55
- incoming_context[:span_id] = ::Instana::Util.header_to_id(metadata['x-instana-s']) if metadata.key?('x-instana-s')
56
- incoming_context[:level] = metadata['x-instana-l'] if metadata.key?('x-instana-l')
57
- end
55
+ CALL_TYPES.each do |call_type|
56
+ define_method(:"handle_#{call_type}") do |active_call, mth, *others|
57
+ begin
58
+ kvs = { rpc: {} }
59
+ metadata = active_call.metadata
58
60
 
59
- kvs[:rpc][:flavor] = :grpc
60
- kvs[:rpc][:host] = Socket.gethostname
61
- kvs[:rpc][:call] = "/\#{mth.owner.service_name}/\#{name}"
62
- kvs[:rpc][:call_type] = :#{call_type}
63
- kvs[:rpc][:peer] = { address: active_call.peer }
61
+ incoming_context = {}
62
+ if metadata.key?('x-instana-t')
63
+ incoming_context[:trace_id] = ::Instana::Util.header_to_id(metadata['x-instana-t'])
64
+ incoming_context[:span_id] = ::Instana::Util.header_to_id(metadata['x-instana-s']) if metadata.key?('x-instana-s')
65
+ incoming_context[:level] = metadata['x-instana-l'] if metadata.key?('x-instana-l')
66
+ end
64
67
 
65
- ::Instana.tracer.log_start_or_continue(
66
- :'rpc-server', kvs, incoming_context
67
- )
68
+ kvs[:rpc][:flavor] = :grpc
69
+ kvs[:rpc][:host] = Socket.gethostname
70
+ kvs[:rpc][:call] = "/#{mth.owner.service_name}/#{name}"
71
+ kvs[:rpc][:call_type] = call_type
72
+ kvs[:rpc][:peer] = { address: active_call.peer }
68
73
 
69
- handle_#{call_type}_without_instana(active_call, mth, *others)
70
- rescue => e
71
- kvs[:rpc][:error] = true
72
- ::Instana.tracer.log_info(kvs)
73
- ::Instana.tracer.log_error(e)
74
- raise
75
- ensure
76
- ::Instana.tracer.log_end(:'rpc-server', {}) if ::Instana.tracer.tracing?
77
- end
74
+ ::Instana.tracer.log_start_or_continue(
75
+ :'rpc-server', kvs, incoming_context
76
+ )
78
77
 
79
- alias handle_#{call_type}_without_instana handle_#{call_type}
80
- alias handle_#{call_type} handle_#{call_type}_with_instana
81
- RUBY
78
+ super(active_call, mth, *others)
79
+ rescue => e
80
+ kvs[:rpc][:error] = true
81
+ ::Instana.tracer.log_info(kvs)
82
+ ::Instana.tracer.log_error(e)
83
+ raise
84
+ ensure
85
+ ::Instana.tracer.log_end(:'rpc-server', {}) if ::Instana.tracer.tracing?
86
+ end
87
+ end
88
+ end
89
+ end
82
90
  end
91
+
83
92
  ::Instana.logger.debug 'Instrumenting GRPC server'
93
+ ::GRPC::RpcDesc.prepend(::Instana::GRPCServerInstrumentation)
84
94
  end
@@ -1,61 +1,60 @@
1
1
  require 'net/http'
2
2
 
3
3
  if defined?(::Net::HTTP) && ::Instana.config[:nethttp][:enabled]
4
- Net::HTTP.class_eval {
5
-
6
- def request_with_instana(*args, &block)
7
- if !Instana.tracer.tracing? || !started?
8
- do_skip = true
9
- return request_without_instana(*args, &block)
10
- end
4
+ module Instana
5
+ module NetHTTPInstrumentation
6
+ def request(*args, &block)
7
+ if !Instana.tracer.tracing? || !started?
8
+ do_skip = true
9
+ return super(*args, &block)
10
+ end
11
11
 
12
- ::Instana.tracer.log_entry(:'net-http')
12
+ ::Instana.tracer.log_entry(:'net-http')
13
13
 
14
- # Send out the tracing context with the request
15
- request = args[0]
14
+ # Send out the tracing context with the request
15
+ request = args[0]
16
16
 
17
- # Set request headers; encode IDs as hexadecimal strings
18
- t_context = ::Instana.tracer.context
19
- request['X-Instana-T'] = t_context.trace_id_header
20
- request['X-Instana-S'] = t_context.span_id_header
17
+ # Set request headers; encode IDs as hexadecimal strings
18
+ t_context = ::Instana.tracer.context
19
+ request['X-Instana-T'] = t_context.trace_id_header
20
+ request['X-Instana-S'] = t_context.span_id_header
21
21
 
22
- # Collect up KV info now in case any exception is raised
23
- kv_payload = { :http => {} }
24
- kv_payload[:http][:method] = request.method
22
+ # Collect up KV info now in case any exception is raised
23
+ kv_payload = { :http => {} }
24
+ kv_payload[:http][:method] = request.method
25
25
 
26
- if request.uri
27
- kv_payload[:http][:url] = request.uri.to_s
28
- else
29
- if use_ssl?
30
- kv_payload[:http][:url] = "https://#{@address}:#{@port}#{request.path}"
26
+ if request.uri
27
+ kv_payload[:http][:url] = request.uri.to_s
31
28
  else
32
- kv_payload[:http][:url] = "http://#{@address}:#{@port}#{request.path}"
29
+ if use_ssl?
30
+ kv_payload[:http][:url] = "https://#{@address}:#{@port}#{request.path}"
31
+ else
32
+ kv_payload[:http][:url] = "http://#{@address}:#{@port}#{request.path}"
33
+ end
33
34
  end
34
- end
35
-
36
- kv_payload[:http][:url] = ::Instana.secrets.remove_from_query(kv_payload[:http][:url])
37
35
 
38
- # The core call
39
- response = request_without_instana(*args, &block)
36
+ kv_payload[:http][:url] = ::Instana.secrets.remove_from_query(kv_payload[:http][:url])
40
37
 
41
- kv_payload[:http][:status] = response.code
42
- if response.code.to_i.between?(500, 511)
43
- # Because of the 5xx response, we flag this span as errored but
44
- # without a backtrace (no exception)
45
- ::Instana.tracer.log_error(nil)
46
- end
38
+ # The core call
39
+ response = super(*args, &block)
47
40
 
48
- response
49
- rescue => e
50
- ::Instana.tracer.log_error(e)
51
- raise
52
- ensure
53
- ::Instana.tracer.log_exit(:'net-http', kv_payload) unless do_skip
54
- end
41
+ kv_payload[:http][:status] = response.code
42
+ if response.code.to_i.between?(500, 511)
43
+ # Because of the 5xx response, we flag this span as errored but
44
+ # without a backtrace (no exception)
45
+ ::Instana.tracer.log_error(nil)
46
+ end
55
47
 
56
- ::Instana.logger.debug "Instrumenting Net::HTTP"
48
+ response
49
+ rescue => e
50
+ ::Instana.tracer.log_error(e)
51
+ raise
52
+ ensure
53
+ ::Instana.tracer.log_exit(:'net-http', kv_payload) unless do_skip
54
+ end
55
+ end
56
+ end
57
57
 
58
- alias request_without_instana request
59
- alias request request_with_instana
60
- }
58
+ ::Instana.logger.debug "Instrumenting Net::HTTP"
59
+ Net::HTTP.prepend(::Instana::NetHTTPInstrumentation)
61
60
  end
@@ -1,11 +1,11 @@
1
- if defined?(::Redis) && ::Instana.config[:redis][:enabled]
2
- ::Redis::Client.class_eval do
3
- def call_with_instana(*args, &block)
1
+ module Instana
2
+ module RedisInstrumentation
3
+ def call(*args, &block)
4
4
  kv_payload = { redis: {} }
5
5
  dnt_spans = [:redis, :'resque-client', :'sidekiq-client']
6
6
 
7
- if !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name)
8
- return call_without_instana(*args, &block)
7
+ if !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name) || !Instana.config[:redis][:enabled]
8
+ return super(*args, &block)
9
9
  end
10
10
 
11
11
  begin
@@ -19,7 +19,7 @@ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
19
19
  nil
20
20
  end
21
21
 
22
- call_without_instana(*args, &block)
22
+ super(*args, &block)
23
23
  rescue => e
24
24
  ::Instana.tracer.log_info({ redis: {error: true} })
25
25
  ::Instana.tracer.log_error(e)
@@ -29,17 +29,12 @@ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
29
29
  end
30
30
  end
31
31
 
32
- ::Instana.logger.debug "Instrumenting Redis"
33
-
34
- alias call_without_instana call
35
- alias call call_with_instana
36
-
37
- def call_pipeline_with_instana(*args, &block)
32
+ def call_pipeline(*args, &block)
38
33
  kv_payload = { redis: {} }
39
34
  dnt_spans = [:redis, :'resque-client', :'sidekiq-client']
40
35
 
41
- if !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name)
42
- return call_pipeline_without_instana(*args, &block)
36
+ if !Instana.tracer.tracing? || dnt_spans.include?(::Instana.tracer.current_span.name) || !Instana.config[:redis][:enabled]
37
+ return super(*args, &block)
43
38
  end
44
39
 
45
40
  begin
@@ -54,7 +49,7 @@ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
54
49
  nil
55
50
  end
56
51
 
57
- call_pipeline_without_instana(*args, &block)
52
+ super(*args, &block)
58
53
  rescue => e
59
54
  ::Instana.tracer.log_info({ redis: {error: true} })
60
55
  ::Instana.tracer.log_error(e)
@@ -63,8 +58,10 @@ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
63
58
  ::Instana.tracer.log_exit(:redis, kv_payload)
64
59
  end
65
60
  end
66
-
67
- alias call_pipeline_without_instana call_pipeline
68
- alias call_pipeline call_pipeline_with_instana
69
61
  end
70
62
  end
63
+
64
+ if defined?(::Redis) && ::Instana.config[:redis][:enabled]
65
+ ::Instana.logger.debug "Instrumenting Redis"
66
+ Redis::Client.prepend(::Instana::RedisInstrumentation)
67
+ end
@@ -3,11 +3,8 @@ require 'socket'
3
3
  module Instana
4
4
  module Instrumentation
5
5
  module ResqueClient
6
- def self.included(klass)
6
+ def self.prepended(klass)
7
7
  klass.send :extend, ::Resque
8
- ::Instana::Util.method_alias(klass, :enqueue)
9
- ::Instana::Util.method_alias(klass, :enqueue_to)
10
- ::Instana::Util.method_alias(klass, :dequeue)
11
8
  end
12
9
 
13
10
  def collect_kvs(op, klass, args)
@@ -23,50 +20,46 @@ module Instana
23
20
  { :'resque-client' => kvs }
24
21
  end
25
22
 
26
- def enqueue_with_instana(klass, *args)
23
+ def enqueue(klass, *args)
27
24
  if Instana.tracer.tracing?
28
25
  kvs = collect_kvs(:enqueue, klass, args)
29
26
 
30
27
  Instana.tracer.trace(:'resque-client', kvs) do
31
- enqueue_without_instana(klass, *args)
28
+ super(klass, *args)
32
29
  end
33
30
  else
34
- enqueue_without_instana(klass, *args)
31
+ super(klass, *args)
35
32
  end
36
33
  end
37
34
 
38
- def enqueue_to_with_instana(queue, klass, *args)
35
+ def enqueue_to(queue, klass, *args)
39
36
  if Instana.tracer.tracing? && !Instana.tracer.tracing_span?(:'resque-client')
40
37
  kvs = collect_kvs(:enqueue_to, klass, args)
41
38
  kvs[:Queue] = queue.to_s if queue
42
39
 
43
40
  Instana.tracer.trace(:'resque-client', kvs) do
44
- enqueue_to_without_instana(queue, klass, *args)
41
+ super(queue, klass, *args)
45
42
  end
46
43
  else
47
- enqueue_to_without_instana(queue, klass, *args)
44
+ super(queue, klass, *args)
48
45
  end
49
46
  end
50
47
 
51
- def dequeue_with_instana(klass, *args)
48
+ def dequeue(klass, *args)
52
49
  if Instana.tracer.tracing?
53
50
  kvs = collect_kvs(:dequeue, klass, args)
54
51
 
55
52
  Instana.tracer.trace(:'resque-client', kvs) do
56
- dequeue_without_instana(klass, *args)
53
+ super(klass, *args)
57
54
  end
58
55
  else
59
- dequeue_without_instana(klass, *args)
56
+ super(klass, *args)
60
57
  end
61
58
  end
62
59
  end
63
60
 
64
61
  module ResqueWorker
65
- def self.included(klass)
66
- ::Instana::Util.method_alias(klass, :perform)
67
- end
68
-
69
- def perform_with_instana(job)
62
+ def perform(job)
70
63
  kvs = {}
71
64
  kvs[:'resque-worker'] = {}
72
65
 
@@ -81,17 +74,13 @@ module Instana
81
74
  end
82
75
 
83
76
  Instana.tracer.start_or_continue_trace(:'resque-worker', kvs) do
84
- perform_without_instana(job)
77
+ super(job)
85
78
  end
86
79
  end
87
80
  end
88
81
 
89
82
  module ResqueJob
90
- def self.included(klass)
91
- ::Instana::Util.method_alias(klass, :fail)
92
- end
93
-
94
- def fail_with_instana(exception)
83
+ def fail(exception)
95
84
  if Instana.tracer.tracing?
96
85
  ::Instana.tracer.log_info(:'resque-worker' => { :error => "#{exception.class}: #{exception}"})
97
86
  ::Instana.tracer.log_error(exception)
@@ -99,7 +88,7 @@ module Instana
99
88
  rescue Exception => e
100
89
  ::Instana.logger.debug { "#{__method__}:#{File.basename(__FILE__)}:#{__LINE__}: #{e.message}" } if Instana::Config[:verbose]
101
90
  ensure
102
- fail_without_instana(exception)
91
+ super(exception)
103
92
  end
104
93
  end
105
94
  end
@@ -109,14 +98,14 @@ if defined?(::Resque) && RUBY_VERSION >= '1.9.3'
109
98
 
110
99
  if ::Instana.config[:'resque-client'][:enabled]
111
100
  ::Instana.logger.debug 'Instrumenting Resque Client'
112
- ::Instana::Util.send_include(::Resque, ::Instana::Instrumentation::ResqueClient)
101
+ ::Resque.prepend(::Instana::Instrumentation::ResqueClient)
113
102
  end
114
103
 
115
104
  if ::Instana.config[:'resque-worker'][:enabled]
116
105
  ::Instana.logger.debug 'Instrumenting Resque Worker'
117
106
 
118
- ::Instana::Util.send_include(::Resque::Worker, ::Instana::Instrumentation::ResqueWorker)
119
- ::Instana::Util.send_include(::Resque::Job, ::Instana::Instrumentation::ResqueJob)
107
+ ::Resque::Worker.prepend(::Instana::Instrumentation::ResqueWorker)
108
+ ::Resque::Job.prepend(::Instana::Instrumentation::ResqueJob)
120
109
 
121
110
  ::Resque.before_fork do |job|
122
111
  ::Instana.agent.before_resque_fork
@@ -1,34 +1,24 @@
1
1
  module Instana
2
2
  module Instrumentation
3
3
  module RestClientRequest
4
- def self.included(klass)
5
- if klass.method_defined?(:execute)
6
- klass.class_eval do
7
- alias execute_without_instana execute
8
- alias execute execute_with_instana
9
- end
10
- end
11
- end
12
-
13
- def execute_with_instana & block
4
+ def execute(&block)
14
5
  # Since RestClient uses net/http under the covers, we just
15
6
  # provide span visibility here. HTTP related KVs are reported
16
7
  # in the Net::HTTP instrumentation
17
8
  ::Instana.tracer.log_entry(:'rest-client')
18
9
 
19
- execute_without_instana(&block)
10
+ super(&block)
20
11
  rescue => e
21
12
  ::Instana.tracer.log_error(e)
22
13
  raise
23
14
  ensure
24
15
  ::Instana.tracer.log_exit(:'rest-client')
25
16
  end
26
-
27
17
  end
28
18
  end
29
19
  end
30
20
 
31
21
  if defined?(::RestClient::Request) && ::Instana.config[:'rest-client'][:enabled]
32
22
  ::Instana.logger.debug "Instrumenting RestClient"
33
- ::RestClient::Request.send(:include, ::Instana::Instrumentation::RestClientRequest)
23
+ ::RestClient::Request.send(:prepend, ::Instana::Instrumentation::RestClientRequest)
34
24
  end
@@ -2,25 +2,25 @@ require 'uri'
2
2
  require 'cgi'
3
3
 
4
4
  module Instana
5
- class Secrets
5
+ class Secrets
6
6
  def remove_from_query(str, secret_values = Instana.agent.secret_values)
7
7
  return str unless secret_values
8
-
8
+
9
9
  url = URI(str)
10
- params = CGI.parse(url.query)
11
-
10
+ params = CGI.parse(url.query || '')
11
+
12
12
  redacted = params.map do |k, v|
13
13
  needs_redaction = secret_values['list']
14
14
  .any? { |t| matcher(secret_values['matcher']).(t,k) }
15
15
  [k, needs_redaction ? '<redacted>' : v]
16
16
  end
17
-
17
+
18
18
  url.query = URI.encode_www_form(redacted)
19
19
  CGI.unescape(url.to_s)
20
20
  end
21
-
21
+
22
22
  private
23
-
23
+
24
24
  def matcher(name)
25
25
  case name
26
26
  when 'equals-ignore-case'
@@ -2,46 +2,6 @@ module Instana
2
2
  module Util
3
3
  class << self
4
4
  ID_RANGE = -2**63..2**63-1
5
-
6
- # An agnostic approach to method aliasing.
7
- #
8
- # @param klass [Object] The class or module that holds the method to be alias'd.
9
- # @param method [Symbol] The name of the method to be aliased.
10
- #
11
- def method_alias(klass, method)
12
- if klass.method_defined?(method.to_sym) ||
13
- klass.private_method_defined?(method.to_sym)
14
-
15
- with = "#{method}_with_instana"
16
- without = "#{method}_without_instana"
17
-
18
- klass.class_eval do
19
- alias_method without, method.to_s
20
- alias_method method.to_s, with
21
- end
22
- else
23
- ::Instana.logger.debug "No such method (#{method}) to alias on #{klass}"
24
- end
25
- end
26
-
27
- # Calls on target_class to 'extend' cls
28
- #
29
- # @param target_cls [Object] the class/module to do the 'extending'
30
- # @param cls [Object] the class/module to be 'extended'
31
- #
32
- def send_extend(target_cls, cls)
33
- target_cls.send(:extend, cls) if defined?(target_cls)
34
- end
35
-
36
- # Calls on <target_cls> to include <cls> into itself.
37
- #
38
- # @param target_cls [Object] the class/module to do the 'including'
39
- # @param cls [Object] the class/module to be 'included'
40
- #
41
- def send_include(target_cls, cls)
42
- target_cls.send(:include, cls) if defined?(target_cls)
43
- end
44
-
45
5
  # Debugging helper method
46
6
  #
47
7
  def pry!
@@ -246,7 +206,7 @@ module Instana
246
206
  #
247
207
  def id_to_header(id)
248
208
  return '' unless id.is_a?(String)
249
- # Only send 64bit IDs downstream for now
209
+ # Only send 64bit IDs downstream for now
250
210
  id.length == 32 ? id[16..-1] : id
251
211
  end
252
212
 
@@ -1,4 +1,4 @@
1
1
  module Instana
2
- VERSION = "1.192.1"
2
+ VERSION = "1.193.2"
3
3
  VERSION_FULL = "instana-#{VERSION}"
4
4
  end
@@ -68,17 +68,11 @@ def clear_all!
68
68
  end
69
69
 
70
70
  def disable_redis_instrumentation
71
- ::Redis::Client.class_eval do
72
- alias call call_without_instana
73
- alias call_pipeline call_pipeline_without_instana
74
- end
71
+ ::Instana.config[:redis][:enabled] = false
75
72
  end
76
73
 
77
74
  def enable_redis_instrumentation
78
- ::Redis::Client.class_eval do
79
- alias call call_with_instana
80
- alias call_pipeline call_pipeline_with_instana
81
- end
75
+ ::Instana.config[:redis][:enabled] = true
82
76
  end
83
77
 
84
78
  def validate_sdk_span(json_span, sdk_hash = {}, errored = false, ec = 1)
@@ -156,4 +150,4 @@ def find_first_span_by_qualifier(spans, &block)
156
150
  end
157
151
  end
158
152
  raise Exception.new("Span with qualifier not found")
159
- end
153
+ 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.192.1
4
+ version: 1.193.2
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-01-22 00:00:00.000000000 Z
11
+ date: 2021-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler