oboe 2.1.4 → 2.2.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.
@@ -0,0 +1,54 @@
1
+ # Copyright (c) 2013 by Tracelytics, Inc.
2
+ # All rights reserved.
3
+
4
+ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
5
+
6
+ if Rails::VERSION::MAJOR == 2
7
+
8
+ Oboe.logger.info "[oboe/loading] Instrumenting actionview" if Oboe::Config[:verbose]
9
+
10
+ ActionView::Partials.module_eval do
11
+ alias :render_partial_without_oboe :render_partial
12
+ def render_partial(options = {})
13
+ if options.has_key?(:partial) and options[:partial].is_a?(String)
14
+ entry_kvs = {}
15
+ begin
16
+ name = options[:partial].to_s if options.is_a?(Hash)
17
+ entry_kvs[:FunctionName] = :render_partial
18
+ entry_kvs[:Class] = :Partials
19
+ entry_kvs[:Module] = :ActionView
20
+ entry_kvs[:File] = __FILE__
21
+ entry_kvs[:LineNumber] = __LINE__
22
+ rescue
23
+ end
24
+
25
+ Oboe::API.profile(name, entry_kvs) do
26
+ render_partial_without_oboe(options)
27
+ end
28
+ else
29
+ render_partial_without_oboe(options)
30
+ end
31
+ end
32
+
33
+ alias :render_partial_collection_without_oboe :render_partial_collection
34
+ def render_partial_collection(options = {})
35
+ entry_kvs = {}
36
+ begin
37
+ name = "partial_collection"
38
+ entry_kvs[:FunctionName] = :render_partial_collection
39
+ entry_kvs[:Class] = :Partials
40
+ entry_kvs[:Module] = :ActionView
41
+ entry_kvs[:File] = __FILE__
42
+ entry_kvs[:LineNumber] = __LINE__
43
+ rescue
44
+ end
45
+
46
+ Oboe::API.profile(name, entry_kvs) do
47
+ render_partial_collection_without_oboe(options)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ # vim:set expandtab:tabstop=2
@@ -0,0 +1,48 @@
1
+ # Copyright (c) 2012 by Tracelytics, Inc.
2
+ # All rights reserved.
3
+
4
+ if defined?(ActionView::Base) and Oboe::Config[:action_view][:enabled]
5
+
6
+ if Rails::VERSION::MAJOR == 3 and Rails::VERSION::MINOR == 0
7
+
8
+ ActionView::Partials::PartialRenderer.class_eval do
9
+ alias :render_partial_without_oboe :render_partial
10
+ def render_partial(object = @object)
11
+ entry_kvs = {}
12
+ begin
13
+ name = @options[:partial].to_s if @options.is_a?(Hash)
14
+ entry_kvs[:FunctionName] = :render_partial
15
+ entry_kvs[:Class] = :PartialRenderer
16
+ entry_kvs[:Module] = 'ActionView::Partials'
17
+ entry_kvs[:File] = __FILE__
18
+ entry_kvs[:LineNumber] = __LINE__
19
+ rescue
20
+ end
21
+
22
+ Oboe::API.profile(name, entry_kvs) do
23
+ render_partial_without_oboe(object)
24
+ end
25
+ end
26
+
27
+ alias :render_collection_without_oboe :render_collection
28
+ def render_collection
29
+ entry_kvs = {}
30
+ begin
31
+ name = @path
32
+ entry_kvs[:FunctionName] = :render_collection
33
+ entry_kvs[:Class] = :PartialRenderer
34
+ entry_kvs[:Module] = 'ActionView::Partials'
35
+ entry_kvs[:File] = __FILE__
36
+ entry_kvs[:LineNumber] = __LINE__
37
+ rescue
38
+ end
39
+
40
+ Oboe::API.profile(name, entry_kvs) do
41
+ render_collection_without_oboe
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ # vim:set expandtab:tabstop=2
@@ -1,285 +1,11 @@
1
1
  # Copyright (c) 2012 by Tracelytics, Inc.
2
2
  # All rights reserved.
3
3
 
4
- module Oboe
5
- module Inst
6
- module ConnectionAdapters
7
- module Utils
8
- def extract_trace_details(sql, name = nil)
9
- opts = {}
10
-
11
- begin
12
- opts[:Query] = sql.to_s
13
- opts[:Name] = name.to_s if name
14
- opts[:Backtrace] = Oboe::API.backtrace
15
-
16
- if ::Rails::VERSION::MAJOR == 2
17
- config = ::Rails.configuration.database_configuration[::Rails.env]
18
- else
19
- config = ::Rails.application.config.database_configuration[::Rails.env]
20
- end
21
-
22
- opts[:Database] = config["database"] if config.has_key?("database")
23
- opts[:RemoteHost] = config["host"] if config.has_key?("host")
24
- opts[:Flavor] = config["adapter"] if config.has_key?("adapter")
25
- rescue Exception => e
26
- end
27
-
28
- return opts || {}
29
- end
30
-
31
- # We don't want to trace framework caches. Only instrument SQL that
32
- # directly hits the database.
33
- def ignore_payload?(name)
34
- %w(SCHEMA EXPLAIN CACHE).include? name.to_s or (name and name.to_sym == :skip_logging)
35
- end
36
-
37
- def cfg
38
- @config
39
- end
40
-
41
- def execute_with_oboe(sql, name = nil)
42
- if Oboe.tracing? and !ignore_payload?(name)
43
-
44
- opts = extract_trace_details(sql, name)
45
- Oboe::API.trace('activerecord', opts || {}) do
46
- execute_without_oboe(sql, name)
47
- end
48
- else
49
- execute_without_oboe(sql, name)
50
- end
51
- end
52
-
53
- def exec_query_with_oboe(sql, name = nil, binds = [])
54
- if Oboe.tracing? and !ignore_payload?(name)
55
-
56
- opts = extract_trace_details(sql, name)
57
- Oboe::API.trace('activerecord', opts || {}) do
58
- exec_query_without_oboe(sql, name, binds)
59
- end
60
- else
61
- exec_query_without_oboe(sql, name, binds)
62
- end
63
- end
64
-
65
- def exec_delete_with_oboe(sql, name = nil, binds = [])
66
- if Oboe.tracing? and !ignore_payload?(name)
67
-
68
- opts = extract_trace_details(sql, name)
69
- Oboe::API.trace('activerecord', opts || {}) do
70
- exec_delete_without_oboe(sql, name, binds)
71
- end
72
- else
73
- exec_delete_without_oboe(sql, name, binds)
74
- end
75
- end
76
-
77
- def exec_insert_with_oboe(sql, name = nil, binds = [])
78
- if Oboe.tracing? and !ignore_payload?(name)
79
-
80
- opts = extract_trace_details(sql, name)
81
- Oboe::API.trace('activerecord', opts || {}) do
82
- exec_insert_without_oboe(sql, name, binds)
83
- end
84
- else
85
- exec_insert_without_oboe(sql, name, binds)
86
- end
87
- end
88
-
89
- def begin_db_transaction_with_oboe()
90
- if Oboe.tracing?
91
- opts = {}
92
-
93
- opts[:Query] = "BEGIN"
94
- Oboe::API.trace('activerecord', opts || {}) do
95
- begin_db_transaction_without_oboe()
96
- end
97
- else
98
- begin_db_transaction_without_oboe()
99
- end
100
- end
101
- end # Utils
102
-
103
- module PostgreSQLAdapter
104
- include Oboe::Inst::ConnectionAdapters::Utils
105
-
106
- def self.included(cls)
107
- cls.class_eval do
108
- if ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::method_defined? :exec_query
109
- alias exec_query_without_oboe exec_query
110
- alias exec_query exec_query_with_oboe
111
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
112
- end
113
-
114
- if ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::method_defined? :exec_delete
115
- alias exec_delete_without_oboe exec_delete
116
- alias exec_delete exec_delete_with_oboe
117
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
118
- end
119
- end
120
- end
121
- end # PostgreSQLAdapter
122
-
123
- module LegacyPostgreSQLAdapter
124
- include Oboe::Inst::ConnectionAdapters::Utils
125
-
126
- def self.included(cls)
127
- cls.class_eval do
128
- if ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::method_defined? :execute
129
- alias execute_without_oboe execute
130
- alias execute execute_with_oboe
131
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
132
- end
133
- end
134
- end
135
- end # LegacyPostgreSQLAdapter
136
-
137
- module AbstractMysqlAdapter
138
- include Oboe::Inst::ConnectionAdapters::Utils
139
-
140
- def self.included(cls)
141
- cls.class_eval do
142
- if ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::method_defined? :execute
143
- alias execute_without_oboe execute
144
- alias execute execute_with_oboe
145
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
146
- end
147
- end
148
- end
149
- end # AbstractMysqlAdapter
150
-
151
- module MysqlAdapter
152
- include Oboe::Inst::ConnectionAdapters::Utils
153
-
154
- def self.included(cls)
155
- cls.class_eval do
156
- if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :exec_query
157
- alias exec_query_without_oboe exec_query
158
- alias exec_query exec_query_with_oboe
159
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
160
- end
161
- end
162
- end
163
- end # MysqlAdapter
164
-
165
- module LegacyMysqlAdapter
166
- include Oboe::Inst::ConnectionAdapters::Utils
167
-
168
- def self.included(cls)
169
- cls.class_eval do
170
- if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :execute
171
- alias execute_without_oboe execute
172
- alias execute execute_with_oboe
173
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
174
- end
175
-
176
- if ::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR == 1
177
- if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :begin_db_transaction
178
- alias begin_db_transaction_without_oboe begin_db_transaction
179
- alias begin_db_transaction begin_db_transaction_with_oboe
180
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
181
- end
182
- end
183
-
184
- if ::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR > 0
185
- if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :exec_query
186
- alias exec_query_without_oboe exec_query
187
- alias exec_query exec_query_with_oboe
188
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
189
- end
190
-
191
- if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :exec_delete
192
- alias exec_delete_without_oboe exec_delete
193
- alias exec_delete exec_delete_with_oboe
194
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
195
- end
196
- end
197
- end
198
- end
199
- end # LegacyMysqlAdapter
200
-
201
- module Mysql2Adapter
202
- include Oboe::Inst::ConnectionAdapters::Utils
203
-
204
- def self.included(cls)
205
- cls.class_eval do
206
- if ::Rails::VERSION::MAJOR == 2 or (::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR == 0)
207
- if ActiveRecord::ConnectionAdapters::Mysql2Adapter::method_defined? :execute
208
- alias execute_without_oboe execute
209
- alias execute execute_with_oboe
210
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
211
- end
212
- else
213
- if ActiveRecord::ConnectionAdapters::Mysql2Adapter::method_defined? :exec_insert
214
- alias exec_insert_without_oboe exec_insert
215
- alias exec_insert exec_insert_with_oboe
216
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
217
- end
218
-
219
- # In Rails 3.1, exec_query was defined as a private method
220
- if ActiveRecord::ConnectionAdapters::Mysql2Adapter::method_defined? :exec_query or
221
- ActiveRecord::ConnectionAdapters::Mysql2Adapter::private_method_defined? :exec_query
222
- alias exec_query_without_oboe exec_query
223
- alias exec_query exec_query_with_oboe
224
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
225
- end
226
-
227
- if ActiveRecord::ConnectionAdapters::Mysql2Adapter::method_defined? :exec_delete
228
- alias exec_delete_without_oboe exec_delete
229
- alias exec_delete exec_delete_with_oboe
230
- else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
231
- end
232
- end
233
- end
234
- end
235
- end # Mysql2Adapter
236
-
237
- module FlavorInitializers
238
- def self.mysql
239
- Oboe.logger.info "[oboe/loading] Instrumenting activerecord mysqladapter" if Oboe::Config[:verbose]
240
- if ::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR > 1
241
- ::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.module_eval do
242
- include Oboe::Inst::ConnectionAdapters::AbstractMysqlAdapter
243
- end if defined?(::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter)
244
-
245
- ::ActiveRecord::ConnectionAdapters::MysqlAdapter.module_eval do
246
- include Oboe::Inst::ConnectionAdapters::MysqlAdapter
247
- end if defined?(::ActiveRecord::ConnectionAdapters::MysqlAdapter)
248
- else
249
- ::ActiveRecord::ConnectionAdapters::MysqlAdapter.module_eval do
250
- include Oboe::Inst::ConnectionAdapters::LegacyMysqlAdapter
251
- end if defined?(::ActiveRecord::ConnectionAdapters::MysqlAdapter)
252
- end
253
- end
254
-
255
- def self.mysql2
256
- Oboe.logger.info "[oboe/loading] Instrumenting activerecord mysql2adapter" if Oboe::Config[:verbose]
257
- ::ActiveRecord::ConnectionAdapters::Mysql2Adapter.module_eval do
258
- include Oboe::Inst::ConnectionAdapters::Mysql2Adapter
259
- end if defined?(::ActiveRecord::ConnectionAdapters::Mysql2Adapter)
260
- end
261
-
262
- def self.postgresql
263
- Oboe.logger.info "[oboe/loading] Instrumenting activerecord postgresqladapter" if Oboe::Config[:verbose]
264
- ::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.module_eval do
265
- if ::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR > 0
266
- include Oboe::Inst::ConnectionAdapters::PostgreSQLAdapter
267
- else
268
- include Oboe::Inst::ConnectionAdapters::LegacyPostgreSQLAdapter
269
- end
270
- end if defined?(::ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
271
- end
272
-
273
- def self.oracle
274
- Oboe.logger.info "[oboe/loading] Instrumenting activerecord oracleenhancedadapter" if Oboe::Config[:verbose]
275
- ::ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.module_eval do
276
- include Oboe::Inst::ConnectionAdapters
277
- end if defined?(::ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter)
278
- end
279
- end
280
- end
281
- end
282
- end
4
+ require 'oboe/frameworks/rails/inst/connection_adapters/utils'
5
+ require 'oboe/frameworks/rails/inst/connection_adapters/mysql'
6
+ require 'oboe/frameworks/rails/inst/connection_adapters/mysql2'
7
+ require 'oboe/frameworks/rails/inst/connection_adapters/postgresql'
8
+ require 'oboe/frameworks/rails/inst/connection_adapters/oracle'
283
9
 
284
10
  if Oboe::Config[:active_record][:enabled]
285
11
  begin
@@ -0,0 +1,92 @@
1
+ # Copyright (c) 2013 by AppNeta
2
+ # All rights reserved.
3
+
4
+ module Oboe
5
+ module Inst
6
+ module ConnectionAdapters
7
+
8
+ module AbstractMysqlAdapter
9
+ include Oboe::Inst::ConnectionAdapters::Utils
10
+
11
+ def self.included(cls)
12
+ cls.class_eval do
13
+ if ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::method_defined? :execute
14
+ alias execute_without_oboe execute
15
+ alias execute execute_with_oboe
16
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
17
+ end
18
+ end
19
+ end
20
+ end # AbstractMysqlAdapter
21
+
22
+ module MysqlAdapter
23
+ include Oboe::Inst::ConnectionAdapters::Utils
24
+
25
+ def self.included(cls)
26
+ cls.class_eval do
27
+ if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :exec_query
28
+ alias exec_query_without_oboe exec_query
29
+ alias exec_query exec_query_with_oboe
30
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
31
+ end
32
+ end
33
+ end
34
+ end # MysqlAdapter
35
+
36
+ module LegacyMysqlAdapter
37
+ include Oboe::Inst::ConnectionAdapters::Utils
38
+
39
+ def self.included(cls)
40
+ cls.class_eval do
41
+ if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :execute
42
+ alias execute_without_oboe execute
43
+ alias execute execute_with_oboe
44
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
45
+ end
46
+
47
+ if ::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR == 1
48
+ if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :begin_db_transaction
49
+ alias begin_db_transaction_without_oboe begin_db_transaction
50
+ alias begin_db_transaction begin_db_transaction_with_oboe
51
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
52
+ end
53
+ end
54
+
55
+ if (::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR > 0) or ::Rails::VERSION::MAJOR == 4
56
+ if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :exec_query
57
+ alias exec_query_without_oboe exec_query
58
+ alias exec_query exec_query_with_oboe
59
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
60
+ end
61
+
62
+ if ActiveRecord::ConnectionAdapters::MysqlAdapter::method_defined? :exec_delete
63
+ alias exec_delete_without_oboe exec_delete
64
+ alias exec_delete exec_delete_with_oboe
65
+ else Oboe.logger.warn "[oboe/loading] Couldn't properly instrument activerecord layer. Partial traces may occur."
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end # LegacyMysqlAdapter
71
+
72
+ module FlavorInitializers
73
+ def self.mysql
74
+ Oboe.logger.info "[oboe/loading] Instrumenting activerecord mysqladapter" if Oboe::Config[:verbose]
75
+ if (::Rails::VERSION::MAJOR == 3 and ::Rails::VERSION::MINOR > 1) or ::Rails::VERSION::MAJOR == 4
76
+ ::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.module_eval do
77
+ include Oboe::Inst::ConnectionAdapters::AbstractMysqlAdapter
78
+ end if defined?(::ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter)
79
+
80
+ ::ActiveRecord::ConnectionAdapters::MysqlAdapter.module_eval do
81
+ include Oboe::Inst::ConnectionAdapters::MysqlAdapter
82
+ end if defined?(::ActiveRecord::ConnectionAdapters::MysqlAdapter)
83
+ else
84
+ ::ActiveRecord::ConnectionAdapters::MysqlAdapter.module_eval do
85
+ include Oboe::Inst::ConnectionAdapters::LegacyMysqlAdapter
86
+ end if defined?(::ActiveRecord::ConnectionAdapters::MysqlAdapter)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end