activerecord-honeycomb 0.2.4 → 0.3.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: 88cec16f3ac4ed61cc371132a4152e9e320a64f2c7b18a57534868ca73ff2e62
4
- data.tar.gz: 751e758dfdf184c1e635f800ff276a3933290307ae7e5d08460a9e8b714498c7
3
+ metadata.gz: 5513e1bf298b293e26b56aeaeb4d01d1f30f1f886523af3d7207c94c3649b191
4
+ data.tar.gz: 44d8d740273a31a1c0474f5225ee6879a43afa903fbfdf7854e6a6c5372eb1e8
5
5
  SHA512:
6
- metadata.gz: d210ccbcafdb3ac139e7c02f390d67cf1341d9dc4ca4d5bb15072712a7797b2cdf572a2e1dcb6d95e137deb17387d51bf5037724d69a4dd2bd71a62a64411e48
7
- data.tar.gz: 14854ef17ddca719d5e5771ff127062fd0659e9dc74b06dadb5a586c019e0047fa48026533b440975344e79d2c00588eea59d48366032ba35e5297fdb91050e7
6
+ metadata.gz: d4c0dc2140357e734883e1da31c64d13917b1d8e8cb45f7438b524ebfd6fd7918874e2324b7b8296c0222e02a21465981f3c0114acada918f3c62daae1e1b9e0
7
+ data.tar.gz: 8f0bfed8173a460fe3fe505191aeb7b1236b55a26e127b7b911675e94d19493347f65bf2381f1964ad9a0312b3882a082eec191555199057176050ac5fc41ce4
@@ -21,8 +21,10 @@ module ActiveRecord
21
21
  real_connection = ::ActiveRecord::Base.send(spec.adapter_method, spec.config)
22
22
  logger.debug "#{log_prefix} obtained real database connection: #{real_connection.class.name}" if logger
23
23
 
24
- unless real_connection.class.ancestors.include? ConnectionAdapters::HoneycombAdapter
25
- real_connection.class.include ConnectionAdapters::HoneycombAdapter
24
+ if real_connection.class.ancestors.include? ConnectionAdapters::HoneycombAdapter
25
+ logger.debug "#{log_prefix} found #{real_connection.class} with #{ConnectionAdapters::HoneycombAdapter} already included"
26
+ else
27
+ real_connection.class.prepend ConnectionAdapters::HoneycombAdapter
26
28
  end
27
29
 
28
30
  real_connection
@@ -36,7 +38,7 @@ module ActiveRecord
36
38
  attr_reader :builder
37
39
  attr_accessor :logger
38
40
 
39
- def included(klazz)
41
+ def prepended(klazz)
40
42
  debug "included into #{klazz.name}"
41
43
 
42
44
  if @client
@@ -65,32 +67,77 @@ module ActiveRecord
65
67
 
66
68
  delegate :builder, to: self
67
69
 
68
- def execute(sql, *args)
69
- sending_honeycomb_event do |event|
70
- event.add_field 'db.sql', sql
70
+ def execute(sql, name = nil, *args)
71
+ sending_honeycomb_event(sql, name, []) do |event|
72
+ adding_span_metadata_if_available(event) do
73
+ super
74
+ end
75
+ end
76
+ end
71
77
 
72
- adding_span_metadata_if_available(event, :statement) do
78
+ def exec_query(sql, name = 'SQL', binds = [], *args)
79
+ sending_honeycomb_event(sql, name, binds) do |event|
80
+ adding_span_metadata_if_available(event) do
73
81
  super
74
82
  end
75
83
  end
76
84
  end
77
85
 
78
- def exec_query(sql, *args)
79
- sending_honeycomb_event do |event|
80
- event.add_field 'db.sql', sql
81
- event.add_field 'name', query_name(sql)
86
+ def exec_insert(sql, name, binds, *args)
87
+ sending_honeycomb_event(sql, name, binds) do |event|
88
+ adding_span_metadata_if_available(event) do
89
+ super
90
+ end
91
+ end
92
+ end
82
93
 
83
- adding_span_metadata_if_available(event, :query) do
94
+ def exec_delete(sql, name, binds = [], *args)
95
+ sending_honeycomb_event(sql, name, binds) do |event|
96
+ adding_span_metadata_if_available(event) do
97
+ super
98
+ end
99
+ end
100
+ end
101
+
102
+ def exec_update(sql, name, binds = [], *args)
103
+ sending_honeycomb_event(sql, name, binds) do |event|
104
+ adding_span_metadata_if_available(event) do
84
105
  super
85
106
  end
86
107
  end
87
108
  end
88
109
 
89
110
  private
90
- def sending_honeycomb_event
91
- event = builder.event
111
+ def sending_honeycomb_event(sql, name, binds)
112
+ # Some adapters have some of their exec* methods call each other,
113
+ # e.g mysql2 has exec_query call execute (via execute_and_free).
114
+ # We don't want to send two events for the same query, so we screen out
115
+ # multiple invocations of this wrapper method in the same call tree.
116
+ if !defined?(@honeycomb_event_depth)
117
+ @honeycomb_event_depth = 0
118
+ end
119
+ if @honeycomb_event_depth < 1
120
+ @honeycomb_event_depth = 1
121
+ event = builder.event
122
+
123
+ event.add_field 'db.sql', sql
124
+ event.add_field 'name', name || query_name(sql)
125
+
126
+ binds.each do |bind|
127
+ # ActiveRecord 5
128
+ if bind.respond_to?(:value) && bind.respond_to?(:name)
129
+ event.add_field "db.params.#{bind.name}", bind.value
130
+ else # ActiveRecord 4
131
+ column, value = bind
132
+ event.add_field "db.params.#{column.name}", value
133
+ end
134
+ end
135
+
136
+ start = Time.now
137
+ else
138
+ @honeycomb_event_depth += 1
139
+ end
92
140
 
93
- start = Time.now
94
141
  yield event
95
142
  rescue Exception => e
96
143
  if event
@@ -99,6 +146,7 @@ module ActiveRecord
99
146
  end
100
147
  raise
101
148
  ensure
149
+ @honeycomb_event_depth -= 1
102
150
  if start && event
103
151
  finish = Time.now
104
152
  duration = finish - start
@@ -111,8 +159,8 @@ module ActiveRecord
111
159
  sql.sub(/\s+.*/, '').upcase
112
160
  end
113
161
 
114
- def adding_span_metadata_if_available(event, name)
115
- return yield unless defined?(::Honeycomb.trace_id)
162
+ def adding_span_metadata_if_available(event)
163
+ return yield unless event && defined?(::Honeycomb.trace_id)
116
164
 
117
165
  trace_id = ::Honeycomb.trace_id
118
166
 
@@ -1,6 +1,6 @@
1
1
  module ActiveRecord
2
2
  module Honeycomb
3
3
  GEM_NAME = 'activerecord-honeycomb'
4
- VERSION = '0.2.4'
4
+ VERSION = '0.3.0'
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-honeycomb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Stokes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-11 00:00:00.000000000 Z
11
+ date: 2018-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libhoney
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '4'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bump
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mysql2
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: pg
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: yard
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -108,8 +136,7 @@ dependencies:
108
136
  - - ">="
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
111
- description: |2
112
- TO DO *is* a description
139
+ description: " TO DO *is* a description\n"
113
140
  email:
114
141
  - support@honeycomb.io
115
142
  executables: []
@@ -124,7 +151,7 @@ files:
124
151
  - lib/activerecord/honeycomb.rb
125
152
  homepage: https://github.com/honeycombio/activerecord-honeycomb
126
153
  licenses:
127
- - MIT
154
+ - Apache-2.0
128
155
  metadata: {}
129
156
  post_install_message:
130
157
  rdoc_options: []
@@ -134,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
161
  requirements:
135
162
  - - ">="
136
163
  - !ruby/object:Gem::Version
137
- version: '0'
164
+ version: 2.2.0
138
165
  required_rubygems_version: !ruby/object:Gem::Requirement
139
166
  requirements:
140
167
  - - ">="