stackify-ruby-apm 1.14.6 → 1.14.7

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: 207d50046b455753b802c84ef15314d336df3376b986e98f8fff5014aeed6370
4
- data.tar.gz: bfc2a15d2d26c9aea7263945b6a0f10c02da58f6c1ed0dfb6ea13fc2adcd6c38
3
+ metadata.gz: 881446a181c81d422cdd81f2de4b4ccef409989171d96a53833bbe425f8105c0
4
+ data.tar.gz: ed31e237779e881ab4a57d7db2c4dcc7936bbe01b6af256ac4f53d9ae4c96054
5
5
  SHA512:
6
- metadata.gz: bc2621fd6efa921753d1db81649e7cbff2f26b35350798c82a01a2326752ba2db8e42ccd5de1730a69a9516a849b48943415b9160ffeaa0b70b5baea54f3cb9e
7
- data.tar.gz: 7f6b9b487101dad81b0b29acfe7c1844d29a778ff48235a9180160c2724dd78a57a8d6eee515169a01e4e36f92156ee9f590aa2a88de4043f1c47de64666d061
6
+ metadata.gz: 293677dce94cf22be5e9a45fb1e7d9b7090fcbbe76a4a1bb679da719896d3ced92c5e34bc6ef0315ef8c05c3ee8621bcd51bac552e6f02bfce635aa13205f23e
7
+ data.tar.gz: 581165dd6ee9b10a02d206a7f985b6980ee1ddb46a9a2de05e194a6a9578596114823eff12cd4dab96277e82e533bb9c742c0ee72e109de2a8e819405fb5f4ce
@@ -19,6 +19,8 @@ module DatabaseHelper
19
19
  'db2'
20
20
  elsif driver.include? 'sqlite'
21
21
  'sqlite'
22
+ else
23
+ 'generic'
22
24
  end
23
25
  end
24
26
  # rubocop:enable Metrics/CyclomaticComplexity
@@ -14,7 +14,6 @@ module StackifyRubyAPM
14
14
 
15
15
  def initialize(*args)
16
16
  super(*args)
17
- @type = nil
18
17
  end
19
18
 
20
19
  def normalize(_transaction, _name, payload)
@@ -25,11 +24,8 @@ module StackifyRubyAPM
25
24
  name = payload[:sql] || payload[:name] || 'Default'
26
25
  context = Span::Context.new(statement)
27
26
 
28
- if (@type == nil)
29
- @type = format('db.%s.sql', lookup_adapter || 'unknown').freeze
30
- end
31
-
32
- [name, @type, context]
27
+ type = format('db.%s.sql', lookup_adapter(payload) || 'unknown').freeze
28
+ [name, type, context]
33
29
  end
34
30
 
35
31
  private
@@ -37,7 +33,7 @@ module StackifyRubyAPM
37
33
  def query_variables(payload)
38
34
  adapter_config = lookup_adapter_config
39
35
  props = get_common_db_properties
40
- props[:PROVIDER] = get_profiler(lookup_adapter)
36
+ props[:PROVIDER] = get_profiler(lookup_adapter(payload))
41
37
  props[:SQL] = payload[:sql]
42
38
  if adapter_config
43
39
  props[:URL] = "#{adapter_config[:host]}:#{adapter_config[:port]}"
@@ -60,8 +56,37 @@ module StackifyRubyAPM
60
56
  # Retrieve Connection: lib/active_record/connection_handling.rb#L309
61
57
  # Handler Retrieve Connection: lib/active_record/connection_adapters/abstract/connection_pool.rb#L1111
62
58
 
63
- def lookup_adapter
64
- ::ActiveRecord::Base.connection.adapter_name.downcase
59
+ def lookup_adapter(payload)
60
+ connection = nil
61
+ if (payload.key?(:connection))
62
+ connection = payload[:connection]
63
+ elsif ::ActiveRecord::Base.connection_pool.instance_variable_defined?(:@reserved_connections) and payload.key?(:connection_id)
64
+ connection_id = payload[:connection_id] # Connection ID here is the object_id of the connection object
65
+ connections = ::ActiveRecord::Base.connection_pool.instance_variable_get(:@reserved_connections) # Lets check the reserved connections
66
+
67
+ if (
68
+ (connections.class != nil and connections.respond_to?(:class) and
69
+ (connections.class.to_s == 'ThreadSafe::Cache' or connections.class.to_s == 'Hash')
70
+ ) and connections.size()
71
+ )
72
+ connections.each_value do |val|
73
+ if val.object_id == connection_id
74
+ connection = val
75
+ break
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ if (connection.nil?)
82
+ return 'generic'
83
+ end
84
+
85
+ if (connection.respond_to?(:adapter_name) && connection.adapter_name.nil?)
86
+ return 'generic'
87
+ end
88
+
89
+ connection.adapter_name.downcase
65
90
  rescue StandardError => error
66
91
  debug '[SqlNormalizer] lookup_adapter err: ' + error.inspect.to_s
67
92
  nil
@@ -80,7 +105,7 @@ module StackifyRubyAPM
80
105
 
81
106
  def check_prepared_stmt(statement, payload)
82
107
  if StackifyRubyAPM.agent.config.prefix_enabled
83
- case get_profiler(lookup_adapter)
108
+ case get_profiler(lookup_adapter(payload))
84
109
  when 'generic', 'mysql', 'sqlite', 'oracle', 'db2'
85
110
  check_prepared_stmt_by_placeholder(payload[:sql].include?('?'), statement, payload)
86
111
  when 'postgresql'
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Sets the version of the APM
4
4
  module StackifyRubyAPM
5
- VERSION = '1.14.6'.freeze
5
+ VERSION = '1.14.7'.freeze
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackify-ruby-apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.6
4
+ version: 1.14.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stackify
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-04 00:00:00.000000000 Z
11
+ date: 2021-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails