traceview 3.8.1-java → 3.8.2-java
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 +4 -4
- data/.codeclimate.yml +43 -0
- data/.travis.yml +5 -4
- data/CHANGELOG.md +114 -114
- data/Gemfile +5 -6
- data/README.md +3 -3
- data/Rakefile +18 -21
- data/examples/DNT.md +3 -3
- data/examples/carrying_context.rb +26 -31
- data/examples/instrumenting_metal_controller.rb +1 -1
- data/examples/puma_on_heroku_config.rb +3 -3
- data/examples/tracing_async_threads.rb +9 -9
- data/examples/tracing_background_jobs.rb +5 -7
- data/examples/tracing_forked_processes.rb +13 -14
- data/examples/unicorn_on_heroku_config.rb +4 -4
- data/gemfiles/rails50.gemfile +1 -1
- data/lib/joboe_metal.rb +2 -5
- data/lib/oboe/backward_compatibility.rb +3 -5
- data/lib/oboe_metal.rb +37 -43
- data/lib/traceview/api/logging.rb +1 -2
- data/lib/traceview/base.rb +3 -0
- data/lib/traceview/config.rb +19 -3
- data/lib/traceview/frameworks/rails/inst/action_controller.rb +2 -2
- data/lib/traceview/frameworks/rails/inst/{action_controller5_api.rb → action_controller_api.rb} +0 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +2 -2
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils5x.rb +3 -4
- data/lib/traceview/inst/httpclient.rb +12 -12
- data/lib/traceview/inst/mongo2.rb +7 -8
- data/lib/traceview/inst/moped.rb +334 -343
- data/lib/traceview/inst/rack.rb +14 -2
- data/lib/traceview/inst/redis.rb +104 -110
- data/lib/traceview/inst/sequel.rb +43 -37
- data/lib/traceview/inst/twitter-cassandra.rb +12 -6
- data/lib/traceview/support.rb +34 -32
- data/lib/traceview/util.rb +7 -4
- data/lib/traceview/version.rb +1 -1
- data/test/instrumentation/curb_test.rb +2 -24
- data/test/instrumentation/httpclient_test.rb +7 -18
- data/test/instrumentation/{cassandra_test.rb → twitter-cassandra_test.rb} +32 -0
- data/test/minitest_helper.rb +0 -3
- data/test/settings +0 -0
- data/test/support/avw_handling_test.rb +13 -23
- data/test/support/config_test.rb +1 -1
- data/test/support/tracing_mode_test.rb +44 -0
- metadata +21 -17
data/lib/traceview/inst/rack.rb
CHANGED
@@ -5,6 +5,19 @@ require 'uri'
|
|
5
5
|
require 'cgi'
|
6
6
|
|
7
7
|
module TraceView
|
8
|
+
##
|
9
|
+
# TraceView::Rack
|
10
|
+
#
|
11
|
+
# The TraceView::Rack middleware used to sample a subset of incoming
|
12
|
+
# requests for instrumentation and reporting. Tracing context can
|
13
|
+
# be received here (via the X-Trace HTTP header) or initiated here
|
14
|
+
# based on configured tracing mode.
|
15
|
+
#
|
16
|
+
# After the rack layer passes on to the following layers (Rails, Sinatra,
|
17
|
+
# Padrino, Grape), then the instrumentation downstream will
|
18
|
+
# automatically detect whether this is a sampled request or not
|
19
|
+
# and act accordingly. (to instrument or not)
|
20
|
+
#
|
8
21
|
class Rack
|
9
22
|
attr_reader :app
|
10
23
|
|
@@ -82,7 +95,7 @@ module TraceView
|
|
82
95
|
# if so and don't clear context on log_end (see traceview/api/logging.rb)
|
83
96
|
TraceView.has_incoming_context = TraceView.tracing?
|
84
97
|
TraceView.has_xtrace_header = xtrace_header
|
85
|
-
TraceView.is_continued_trace = TraceView.has_incoming_context
|
98
|
+
TraceView.is_continued_trace = TraceView.has_incoming_context || TraceView.has_xtrace_header
|
86
99
|
|
87
100
|
TraceView::API.log_start(:rack, xtrace_header, report_kvs)
|
88
101
|
|
@@ -120,4 +133,3 @@ module TraceView
|
|
120
133
|
end
|
121
134
|
end
|
122
135
|
end
|
123
|
-
|
data/lib/traceview/inst/redis.rb
CHANGED
@@ -8,7 +8,7 @@ module TraceView
|
|
8
8
|
# The operations listed in this constant skip collecting KVKey
|
9
9
|
NO_KEY_OPS = [:keys, :randomkey, :scan, :sdiff, :sdiffstore, :sinter,
|
10
10
|
:sinterstore, :smove, :sunion, :sunionstore, :zinterstore,
|
11
|
-
:zunionstore, :publish, :select, :eval, :evalsha, :script]
|
11
|
+
:zunionstore, :publish, :select, :eval, :evalsha, :script].freeze
|
12
12
|
|
13
13
|
# Instead of a giant switch statement, we use a hash constant to map out what
|
14
14
|
# KVs need to be collected for each of the many many Redis operations
|
@@ -39,7 +39,7 @@ module TraceView
|
|
39
39
|
:bitop => { :operation => 1, :destkey => 2 },
|
40
40
|
:hincrbyfloat => { :field => 2, :increment => 3 },
|
41
41
|
:zremrangebyrank => { :start => 2, :stop => 3 }
|
42
|
-
}
|
42
|
+
}.freeze
|
43
43
|
|
44
44
|
# The following operations don't require any special handling. For these,
|
45
45
|
# we only collect KVKey and KVOp
|
@@ -74,108 +74,105 @@ module TraceView
|
|
74
74
|
kvs = {}
|
75
75
|
op = command.first
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
kvs[:RemoteHost] = @options[:host]
|
77
|
+
kvs[:KVOp] = command[0]
|
78
|
+
kvs[:RemoteHost] = @options[:host]
|
80
79
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
80
|
+
unless NO_KEY_OPS.include?(op) || (command[1].is_a?(Array) && command[1].count > 1)
|
81
|
+
if command[1].is_a?(Array)
|
82
|
+
kvs[:KVKey] = command[1].first
|
83
|
+
else
|
84
|
+
kvs[:KVKey] = command[1]
|
87
85
|
end
|
86
|
+
end
|
88
87
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
end
|
88
|
+
if KV_COLLECT_MAP[op]
|
89
|
+
# Extract KVs from command for this op
|
90
|
+
KV_COLLECT_MAP[op].each { |k, v| kvs[k] = command[v] }
|
91
|
+
else
|
92
|
+
# This case statement handle special cases not handled
|
93
|
+
# by KV_COLLECT_MAP
|
94
|
+
case op
|
95
|
+
when :set
|
96
|
+
if command.count > 3
|
97
|
+
if command[3].is_a?(Hash)
|
98
|
+
options = command[3]
|
99
|
+
kvs[:ex] = options[:ex] if options.key?(:ex)
|
100
|
+
kvs[:px] = options[:px] if options.key?(:px)
|
101
|
+
kvs[:nx] = options[:nx] if options.key?(:nx)
|
102
|
+
kvs[:xx] = options[:xx] if options.key?(:xx)
|
103
|
+
else
|
104
|
+
options = command[3..-1]
|
105
|
+
until (opts = options.shift(2)).empty?
|
106
|
+
case opts[0]
|
107
|
+
when 'EX' then; kvs[:ex] = opts[1]
|
108
|
+
when 'PX' then; kvs[:px] = opts[1]
|
109
|
+
when 'NX' then; kvs[:nx] = opts[1]
|
110
|
+
when 'XX' then; kvs[:xx] = opts[1]
|
113
111
|
end
|
114
112
|
end
|
115
113
|
end
|
114
|
+
end
|
115
|
+
|
116
|
+
when :get
|
117
|
+
kvs[:KVHit] = r.nil? ? 0 : 1
|
116
118
|
|
117
|
-
|
119
|
+
when :hdel, :hexists, :hget, :hset, :hsetnx
|
120
|
+
kvs[:field] = command[2] unless command[2].is_a?(Array)
|
121
|
+
if op == :hget
|
118
122
|
kvs[:KVHit] = r.nil? ? 0 : 1
|
123
|
+
end
|
119
124
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
+
when :eval
|
126
|
+
if command[1].length > 1024
|
127
|
+
kvs[:Script] = command[1][0..1023] + '(...snip...)'
|
128
|
+
else
|
129
|
+
kvs[:Script] = command[1]
|
130
|
+
end
|
125
131
|
|
126
|
-
|
132
|
+
when :script
|
133
|
+
kvs[:subcommand] = command[1]
|
134
|
+
kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:redis][:collect_backtraces]
|
135
|
+
if command[1] == 'load'
|
127
136
|
if command[1].length > 1024
|
128
|
-
kvs[:Script] = command[
|
137
|
+
kvs[:Script] = command[2][0..1023] + '(...snip...)'
|
129
138
|
else
|
130
|
-
kvs[:Script] = command[
|
139
|
+
kvs[:Script] = command[2]
|
131
140
|
end
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:redis][:collect_backtraces]
|
136
|
-
if command[1] == 'load'
|
137
|
-
if command[1].length > 1024
|
138
|
-
kvs[:Script] = command[2][0..1023] + '(...snip...)'
|
139
|
-
else
|
140
|
-
kvs[:Script] = command[2]
|
141
|
-
end
|
142
|
-
elsif command[1] == :exists
|
143
|
-
if command[2].is_a?(Array)
|
144
|
-
kvs[:KVKey] = command[2].inspect
|
145
|
-
else
|
146
|
-
kvs[:KVKey] = command[2]
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
when :mget
|
151
|
-
if command[1].is_a?(Array)
|
152
|
-
kvs[:KVKeyCount] = command[1].count
|
141
|
+
elsif command[1] == :exists
|
142
|
+
if command[2].is_a?(Array)
|
143
|
+
kvs[:KVKey] = command[2].inspect
|
153
144
|
else
|
154
|
-
kvs[:
|
145
|
+
kvs[:KVKey] = command[2]
|
155
146
|
end
|
156
|
-
|
157
|
-
kvs[:KVHitCount] = values.count
|
158
|
-
|
159
|
-
when :hmget
|
160
|
-
kvs[:KVKeyCount] = command.count - 2
|
161
|
-
values = r.select { |i| i }
|
162
|
-
kvs[:KVHitCount] = values.count
|
147
|
+
end
|
163
148
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
149
|
+
when :mget
|
150
|
+
if command[1].is_a?(Array)
|
151
|
+
kvs[:KVKeyCount] = command[1].count
|
152
|
+
else
|
153
|
+
kvs[:KVKeyCount] = command.count - 1
|
154
|
+
end
|
155
|
+
values = r.select { |i| i }
|
156
|
+
kvs[:KVHitCount] = values.count
|
172
157
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
158
|
+
when :hmget
|
159
|
+
kvs[:KVKeyCount] = command.count - 2
|
160
|
+
values = r.select { |i| i }
|
161
|
+
kvs[:KVHitCount] = values.count
|
177
162
|
|
178
|
-
|
163
|
+
when :mset, :msetnx
|
164
|
+
if command[1].is_a?(Array)
|
165
|
+
kvs[:KVKeyCount] = command[1].count / 2
|
166
|
+
else
|
167
|
+
kvs[:KVKeyCount] = (command.count - 1) / 2
|
168
|
+
end
|
169
|
+
end # case op
|
170
|
+
end # if KV_COLLECT_MAP[op]
|
171
|
+
rescue StandardError => e
|
172
|
+
TraceView.logger.debug "Error collecting redis KVs: #{e.message}"
|
173
|
+
TraceView.logger.debug e.backtrace.join('\n')
|
174
|
+
ensure
|
175
|
+
return kvs
|
179
176
|
end
|
180
177
|
|
181
178
|
# Extracts the Key/Values to report from a pipelined
|
@@ -186,33 +183,32 @@ module TraceView
|
|
186
183
|
def extract_pipeline_details(pipeline)
|
187
184
|
kvs = {}
|
188
185
|
|
189
|
-
|
190
|
-
|
191
|
-
kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:redis][:collect_backtraces]
|
186
|
+
kvs[:RemoteHost] = @options[:host]
|
187
|
+
kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:redis][:collect_backtraces]
|
192
188
|
|
193
|
-
|
194
|
-
|
189
|
+
command_count = pipeline.commands.count
|
190
|
+
kvs[:KVOpCount] = command_count
|
195
191
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
192
|
+
kvs[:KVOp] = if pipeline.commands.first == :multi
|
193
|
+
:multi
|
194
|
+
else
|
195
|
+
:pipeline
|
196
|
+
end
|
201
197
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
end
|
209
|
-
kvs[:KVOps] = ops.join(', ')
|
198
|
+
# Report pipelined operations if the number
|
199
|
+
# of ops is reasonable
|
200
|
+
if command_count < 12
|
201
|
+
ops = []
|
202
|
+
pipeline.commands.each do |c|
|
203
|
+
ops << c.first
|
210
204
|
end
|
211
|
-
|
212
|
-
TraceView.logger.debug "[traceview/debug] Error extracting pipelined commands: #{e.message}"
|
213
|
-
TraceView.logger.debug e.backtrace
|
205
|
+
kvs[:KVOps] = ops.join(', ')
|
214
206
|
end
|
215
|
-
|
207
|
+
rescue StandardError => e
|
208
|
+
TraceView.logger.debug "[traceview/debug] Error extracting pipelined commands: #{e.message}"
|
209
|
+
TraceView.logger.debug e.backtrace
|
210
|
+
ensure
|
211
|
+
return kvs
|
216
212
|
end
|
217
213
|
|
218
214
|
#
|
@@ -266,7 +262,6 @@ module TraceView
|
|
266
262
|
call_pipeline_without_traceview(pipeline)
|
267
263
|
end
|
268
264
|
end
|
269
|
-
|
270
265
|
end
|
271
266
|
end
|
272
267
|
end
|
@@ -278,4 +273,3 @@ if TraceView::Config[:redis][:enabled]
|
|
278
273
|
::TraceView::Util.send_include(::Redis::Client, ::TraceView::Inst::Redis::Client)
|
279
274
|
end
|
280
275
|
end
|
281
|
-
|
@@ -3,7 +3,19 @@
|
|
3
3
|
|
4
4
|
module TraceView
|
5
5
|
module Inst
|
6
|
+
##
|
7
|
+
# TraceView::Inst::Sequel
|
8
|
+
#
|
9
|
+
# The common (shared) methods used by the TraceView Sequel instrumentation
|
10
|
+
# across multiple modules/classes.
|
11
|
+
#
|
6
12
|
module Sequel
|
13
|
+
##
|
14
|
+
# extract_trace_details
|
15
|
+
#
|
16
|
+
# Given SQL and the options hash, this method extracts the interesting
|
17
|
+
# bits for reporting to the TraceView dashboard.
|
18
|
+
#
|
7
19
|
def extract_trace_details(sql, opts)
|
8
20
|
kvs = {}
|
9
21
|
|
@@ -17,7 +29,7 @@ module TraceView
|
|
17
29
|
else
|
18
30
|
# Report raw SQL and any binds if they exist
|
19
31
|
kvs[:Query] = sql.to_s
|
20
|
-
kvs[:QueryArgs] = opts[:arguments] if opts.is_a?(Hash)
|
32
|
+
kvs[:QueryArgs] = opts[:arguments] if opts.is_a?(Hash) && opts.key?(:arguments)
|
21
33
|
end
|
22
34
|
kvs[:IsPreparedStatement] = true if sql.is_a?(Symbol)
|
23
35
|
|
@@ -40,35 +52,43 @@ module TraceView
|
|
40
52
|
ensure
|
41
53
|
return kvs
|
42
54
|
end
|
43
|
-
end
|
44
|
-
|
45
|
-
module SequelDatabase
|
46
|
-
def self.included(klass)
|
47
|
-
::TraceView::Util.method_alias(klass, :run, ::Sequel::Database)
|
48
|
-
::TraceView::Util.method_alias(klass, :execute_ddl, ::Sequel::Database)
|
49
|
-
::TraceView::Util.method_alias(klass, :execute_dui, ::Sequel::Database)
|
50
|
-
::TraceView::Util.method_alias(klass, :execute_insert, ::Sequel::Database)
|
51
|
-
end
|
52
55
|
|
53
|
-
|
56
|
+
##
|
57
|
+
# exec_with_traceview
|
58
|
+
#
|
59
|
+
# This method wraps and routes the call to the specified
|
60
|
+
# original method call
|
61
|
+
#
|
62
|
+
def exec_with_traceview(method, sql, opts = ::Sequel::OPTS, &block)
|
54
63
|
kvs = extract_trace_details(sql, opts)
|
55
64
|
|
56
65
|
TraceView::API.log_entry(:sequel, kvs)
|
57
66
|
|
58
|
-
|
67
|
+
send(method, sql, opts, &block)
|
59
68
|
rescue => e
|
60
69
|
TraceView::API.log_exception(:sequel, e)
|
61
70
|
raise e
|
62
71
|
ensure
|
63
72
|
TraceView::API.log_exit(:sequel)
|
64
73
|
end
|
74
|
+
end
|
75
|
+
|
76
|
+
module SequelDatabase
|
77
|
+
include TraceView::Inst::Sequel
|
65
78
|
|
66
|
-
def
|
79
|
+
def self.included(klass)
|
80
|
+
::TraceView::Util.method_alias(klass, :run, ::Sequel::Database)
|
81
|
+
::TraceView::Util.method_alias(klass, :execute_ddl, ::Sequel::Database)
|
82
|
+
::TraceView::Util.method_alias(klass, :execute_dui, ::Sequel::Database)
|
83
|
+
::TraceView::Util.method_alias(klass, :execute_insert, ::Sequel::Database)
|
84
|
+
end
|
85
|
+
|
86
|
+
def run_with_traceview(sql, opts = ::Sequel::OPTS)
|
67
87
|
kvs = extract_trace_details(sql, opts)
|
68
88
|
|
69
89
|
TraceView::API.log_entry(:sequel, kvs)
|
70
90
|
|
71
|
-
|
91
|
+
run_without_traceview(sql, opts)
|
72
92
|
rescue => e
|
73
93
|
TraceView::API.log_exception(:sequel, e)
|
74
94
|
raise e
|
@@ -76,7 +96,7 @@ module TraceView
|
|
76
96
|
TraceView::API.log_exit(:sequel)
|
77
97
|
end
|
78
98
|
|
79
|
-
def execute_ddl_with_traceview(sql, opts
|
99
|
+
def execute_ddl_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
80
100
|
# If we're already tracing a sequel operation, then this call likely came
|
81
101
|
# from Sequel::Dataset. In this case, just pass it on.
|
82
102
|
return execute_ddl_without_traceview(sql, opts, &block) if TraceView.tracing_layer?(:sequel)
|
@@ -84,7 +104,7 @@ module TraceView
|
|
84
104
|
exec_with_traceview(:execute_ddl_without_traceview, sql, opts, &block)
|
85
105
|
end
|
86
106
|
|
87
|
-
def execute_dui_with_traceview(sql, opts
|
107
|
+
def execute_dui_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
88
108
|
# If we're already tracing a sequel operation, then this call likely came
|
89
109
|
# from Sequel::Dataset. In this case, just pass it on.
|
90
110
|
return execute_dui_without_traceview(sql, opts, &block) if TraceView.tracing_layer?(:sequel)
|
@@ -92,7 +112,7 @@ module TraceView
|
|
92
112
|
exec_with_traceview(:execute_dui_without_traceview, sql, opts, &block)
|
93
113
|
end
|
94
114
|
|
95
|
-
def execute_insert_with_traceview(sql, opts
|
115
|
+
def execute_insert_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
96
116
|
# If we're already tracing a sequel operation, then this call likely came
|
97
117
|
# from Sequel::Dataset. In this case, just pass it on.
|
98
118
|
return execute_insert_without_traceview(sql, opts, &block) if TraceView.tracing_layer?(:sequel)
|
@@ -102,6 +122,7 @@ module TraceView
|
|
102
122
|
end # module SequelDatabase
|
103
123
|
|
104
124
|
module SequelDataset
|
125
|
+
include TraceView::Inst::Sequel
|
105
126
|
|
106
127
|
def self.included(klass)
|
107
128
|
::TraceView::Util.method_alias(klass, :execute, ::Sequel::Dataset)
|
@@ -110,32 +131,19 @@ module TraceView
|
|
110
131
|
::TraceView::Util.method_alias(klass, :execute_insert, ::Sequel::Dataset)
|
111
132
|
end
|
112
133
|
|
113
|
-
def
|
114
|
-
kvs = extract_trace_details(sql, opts)
|
115
|
-
|
116
|
-
TraceView::API.log_entry(:sequel, kvs)
|
117
|
-
|
118
|
-
send(method, sql, opts, &block)
|
119
|
-
rescue => e
|
120
|
-
TraceView::API.log_exception(:sequel, e)
|
121
|
-
raise e
|
122
|
-
ensure
|
123
|
-
TraceView::API.log_exit(:sequel)
|
124
|
-
end
|
125
|
-
|
126
|
-
def execute_with_traceview(sql, opts=::Sequel::OPTS, &block)
|
134
|
+
def execute_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
127
135
|
exec_with_traceview(:execute_without_traceview, sql, opts, &block)
|
128
136
|
end
|
129
137
|
|
130
|
-
def execute_ddl_with_traceview(sql, opts
|
138
|
+
def execute_ddl_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
131
139
|
exec_with_traceview(:execute_ddl_without_traceview, sql, opts, &block)
|
132
140
|
end
|
133
141
|
|
134
|
-
def execute_dui_with_traceview(sql, opts
|
142
|
+
def execute_dui_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
135
143
|
exec_with_traceview(:execute_dui_without_traceview, sql, opts, &block)
|
136
144
|
end
|
137
145
|
|
138
|
-
def execute_insert_with_traceview(sql, opts
|
146
|
+
def execute_insert_with_traceview(sql, opts = ::Sequel::OPTS, &block)
|
139
147
|
exec_with_traceview(:execute_insert_without_traceview, sql, opts, &block)
|
140
148
|
end
|
141
149
|
|
@@ -144,7 +152,7 @@ module TraceView
|
|
144
152
|
end # module TraceView
|
145
153
|
|
146
154
|
if TraceView::Config[:sequel][:enabled]
|
147
|
-
if defined?(::Sequel) && ::Sequel::VERSION <
|
155
|
+
if defined?(::Sequel) && ::Sequel::VERSION < '4.0.0'
|
148
156
|
# For versions before 4.0.0, Sequel::OPTS wasn't defined.
|
149
157
|
# Define it as an empty hash for backwards compatibility.
|
150
158
|
module ::Sequel
|
@@ -154,9 +162,7 @@ if TraceView::Config[:sequel][:enabled]
|
|
154
162
|
|
155
163
|
if defined?(::Sequel)
|
156
164
|
TraceView.logger.info '[traceview/loading] Instrumenting sequel' if TraceView::Config[:verbose]
|
157
|
-
::TraceView::Util.send_include(::Sequel::Database, ::TraceView::Inst::Sequel)
|
158
165
|
::TraceView::Util.send_include(::Sequel::Database, ::TraceView::Inst::SequelDatabase)
|
159
|
-
::TraceView::Util.send_include(::Sequel::Dataset, ::TraceView::Inst::Sequel)
|
160
166
|
::TraceView::Util.send_include(::Sequel::Dataset, ::TraceView::Inst::SequelDataset)
|
161
167
|
end
|
162
168
|
end
|