activerecord-honeycomb 0.2.4 → 0.3.0

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: 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
  - - ">="