ddtrace 0.28.0 → 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +8 -0
- data/Appraisals +57 -2
- data/CHANGELOG.md +41 -12
- data/Rakefile +3 -3
- data/ddtrace.gemspec +2 -1
- data/docs/DevelopmentGuide.md +1 -1
- data/docs/GettingStarted.md +6 -6
- data/lib/ddtrace.rb +7 -0
- data/lib/ddtrace/buffer.rb +60 -1
- data/lib/ddtrace/configuration/base.rb +82 -0
- data/lib/ddtrace/configuration/option.rb +28 -5
- data/lib/ddtrace/configuration/option_definition.rb +100 -0
- data/lib/ddtrace/configuration/options.rb +28 -14
- data/lib/ddtrace/configuration/settings.rb +77 -64
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +9 -7
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +8 -14
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +1 -1
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +11 -16
- data/lib/ddtrace/contrib/active_record/event.rb +1 -1
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +2 -2
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +4 -1
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/configuration/settings.rb +5 -11
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -18
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/ethon/integration.rb +0 -4
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +9 -7
- data/lib/ddtrace/contrib/excon/middleware.rb +1 -1
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/faraday/middleware.rb +1 -1
- data/lib/ddtrace/contrib/faraday/patcher.rb +8 -2
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/grape/instrumentation.rb +2 -42
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/grpc/integration.rb +1 -3
- data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/http/instrumentation.rb +1 -23
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -23
- data/lib/ddtrace/contrib/patchable.rb +1 -1
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +8 -14
- data/lib/ddtrace/contrib/racecar/event.rb +1 -1
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/rack/request_queue.rb +7 -6
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +30 -21
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/rake/integration.rb +0 -4
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/rest_client/integration.rb +0 -4
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -18
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/sequel/integration.rb +0 -4
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +8 -6
- data/lib/ddtrace/diagnostics/health.rb +30 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -1
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
- data/lib/ddtrace/ext/diagnostics.rb +25 -0
- data/lib/ddtrace/ext/runtime.rb +1 -7
- data/lib/ddtrace/metrics.rb +89 -6
- data/lib/ddtrace/propagation/http_propagator.rb +2 -2
- data/lib/ddtrace/runtime/class_count.rb +3 -3
- data/lib/ddtrace/runtime/object_space.rb +19 -0
- data/lib/ddtrace/span.rb +1 -1
- data/lib/ddtrace/tracer.rb +5 -4
- data/lib/ddtrace/transport/http/client.rb +3 -4
- data/lib/ddtrace/transport/http/response.rb +4 -0
- data/lib/ddtrace/transport/http/statistics.rb +30 -0
- data/lib/ddtrace/transport/statistics.rb +28 -0
- data/lib/ddtrace/version.rb +3 -1
- data/lib/ddtrace/workers.rb +4 -2
- data/lib/ddtrace/writer.rb +3 -3
- metadata +74 -54
@@ -7,13 +7,15 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the DelayedJob integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :service_name, default: Ext::SERVICE_NAME
|
19
21
|
end
|
@@ -7,13 +7,15 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the Elasticsearch integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :quantize, default: {}
|
19
21
|
option :service_name, default: Ext::SERVICE_NAME
|
@@ -7,13 +7,15 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the Ethon integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :distributed_tracing, default: true
|
19
21
|
option :service_name, default: Ext::SERVICE_NAME
|
@@ -7,16 +7,18 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the Excon integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :distributed_tracing, default: true
|
19
|
-
option :error_handler
|
21
|
+
option :error_handler
|
20
22
|
option :service_name, default: Ext::SERVICE_NAME
|
21
23
|
option :split_by_domain, default: false
|
22
24
|
end
|
@@ -12,13 +12,15 @@ module Datadog
|
|
12
12
|
Datadog::Ext::HTTP::ERROR_RANGE.cover?(env[:status])
|
13
13
|
end
|
14
14
|
|
15
|
-
option
|
16
|
-
|
17
|
-
|
15
|
+
option :analytics_enabled do |o|
|
16
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
17
|
+
o.lazy
|
18
|
+
end
|
18
19
|
|
19
|
-
option
|
20
|
-
|
21
|
-
|
20
|
+
option :analytics_sample_rate do |o|
|
21
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
22
|
+
o.lazy
|
23
|
+
end
|
22
24
|
|
23
25
|
option :distributed_tracing, default: true
|
24
26
|
option :error_handler, default: DEFAULT_ERROR_HANDLER
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'ddtrace/contrib/patcher'
|
2
2
|
require 'ddtrace/ext/app_types'
|
3
3
|
require 'ddtrace/contrib/faraday/ext'
|
4
|
+
require 'ddtrace/contrib/faraday/rack_builder'
|
4
5
|
|
5
6
|
module Datadog
|
6
7
|
module Contrib
|
@@ -21,7 +22,8 @@ module Datadog
|
|
21
22
|
require 'ddtrace/contrib/faraday/middleware'
|
22
23
|
|
23
24
|
add_pin!
|
24
|
-
|
25
|
+
register_middleware!
|
26
|
+
add_default_middleware!
|
25
27
|
rescue StandardError => e
|
26
28
|
Datadog::Tracer.log.error("Unable to apply Faraday integration: #{e}")
|
27
29
|
end
|
@@ -38,10 +40,14 @@ module Datadog
|
|
38
40
|
).onto(::Faraday)
|
39
41
|
end
|
40
42
|
|
41
|
-
def
|
43
|
+
def register_middleware!
|
42
44
|
::Faraday::Middleware.register_middleware(ddtrace: Middleware)
|
43
45
|
end
|
44
46
|
|
47
|
+
def add_default_middleware!
|
48
|
+
::Faraday::RackBuilder.send(:prepend, RackBuilder)
|
49
|
+
end
|
50
|
+
|
45
51
|
def get_option(option)
|
46
52
|
Datadog.configuration[:faraday].get_option(option)
|
47
53
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Contrib
|
3
|
+
module Faraday
|
4
|
+
# Handles installation of our middleware if the user has *not*
|
5
|
+
# already explicitly configured it for this correction.
|
6
|
+
#
|
7
|
+
# RackBuilder class was introduced in faraday 0.9.0:
|
8
|
+
# https://github.com/lostisland/faraday/commit/77d7546d6d626b91086f427c56bc2cdd951353b3
|
9
|
+
module RackBuilder
|
10
|
+
def adapter(*args)
|
11
|
+
use(:ddtrace) unless @handlers.any? { |h| h.klass == Middleware }
|
12
|
+
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -8,13 +8,15 @@ module Datadog
|
|
8
8
|
module Configuration
|
9
9
|
# Custom settings for the Grape integration
|
10
10
|
class Settings < Contrib::Configuration::Settings
|
11
|
-
option
|
12
|
-
|
13
|
-
|
11
|
+
option :analytics_enabled do |o|
|
12
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
13
|
+
o.lazy
|
14
|
+
end
|
14
15
|
|
15
|
-
option
|
16
|
-
|
17
|
-
|
16
|
+
option :analytics_sample_rate do |o|
|
17
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
18
|
+
o.lazy
|
19
|
+
end
|
18
20
|
|
19
21
|
option :enabled, default: true
|
20
22
|
option :service_name, default: Ext::SERVICE_NAME
|
@@ -4,48 +4,8 @@ module Datadog
|
|
4
4
|
# Instrumentation for Grape::Endpoint
|
5
5
|
module Instrumentation
|
6
6
|
def self.included(base)
|
7
|
-
|
8
|
-
|
9
|
-
# Class methods
|
10
|
-
singleton_class.send(:include, ClassMethodsCompatibility)
|
11
|
-
singleton_class.send(:include, ClassMethods)
|
12
|
-
|
13
|
-
# Instance methods
|
14
|
-
include InstanceMethodsCompatibility
|
15
|
-
include InstanceMethods
|
16
|
-
end
|
17
|
-
else
|
18
|
-
base.singleton_class.send(:prepend, ClassMethods)
|
19
|
-
base.send(:prepend, InstanceMethods)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Compatibility shim for Rubies not supporting `.prepend`
|
24
|
-
module ClassMethodsCompatibility
|
25
|
-
def self.included(base)
|
26
|
-
base.class_eval do
|
27
|
-
alias_method :generate_api_method_without_datadog, :generate_api_method
|
28
|
-
remove_method :generate_api_method
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def generate_api_method(*args, &block)
|
33
|
-
generate_api_method_without_datadog(*args, &block)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Compatibility shim for Rubies not supporting `.prepend`
|
38
|
-
module InstanceMethodsCompatibility
|
39
|
-
def self.included(base)
|
40
|
-
base.class_eval do
|
41
|
-
alias_method :run_without_datadog, :run
|
42
|
-
remove_method :run
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def run(*args, &block)
|
47
|
-
run_without_datadog(*args, &block)
|
48
|
-
end
|
7
|
+
base.singleton_class.send(:prepend, ClassMethods)
|
8
|
+
base.send(:prepend, InstanceMethods)
|
49
9
|
end
|
50
10
|
|
51
11
|
# ClassMethods - implementing instrumentation
|
@@ -8,13 +8,15 @@ module Datadog
|
|
8
8
|
module Configuration
|
9
9
|
# Custom settings for the GraphQL integration
|
10
10
|
class Settings < Contrib::Configuration::Settings
|
11
|
-
option
|
12
|
-
|
13
|
-
|
11
|
+
option :analytics_enabled do |o|
|
12
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
13
|
+
o.lazy
|
14
|
+
end
|
14
15
|
|
15
|
-
option
|
16
|
-
|
17
|
-
|
16
|
+
option :analytics_sample_rate do |o|
|
17
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
18
|
+
o.lazy
|
19
|
+
end
|
18
20
|
|
19
21
|
option :schemas
|
20
22
|
option :service_name, default: Ext::SERVICE_NAME
|
@@ -7,13 +7,15 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the gRPC integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :service_name, default: Ext::SERVICE_NAME
|
19
21
|
end
|
@@ -20,9 +20,7 @@ module Datadog
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.compatible?
|
23
|
-
super
|
24
|
-
&& Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0') \
|
25
|
-
&& version >= Gem::Version.new('0.10.0')
|
23
|
+
super && version >= Gem::Version.new('0.10.0')
|
26
24
|
end
|
27
25
|
|
28
26
|
def default_configuration
|
@@ -7,13 +7,15 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the HTTP integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :distributed_tracing, default: true
|
19
21
|
option :service_name, default: Ext::SERVICE_NAME
|
@@ -12,15 +12,7 @@ module Datadog
|
|
12
12
|
# Instrumentation for Net::HTTP
|
13
13
|
module Instrumentation
|
14
14
|
def self.included(base)
|
15
|
-
|
16
|
-
base.class_eval do
|
17
|
-
# Instance methods
|
18
|
-
include InstanceMethodsCompatibility
|
19
|
-
include InstanceMethods
|
20
|
-
end
|
21
|
-
else
|
22
|
-
base.send(:prepend, InstanceMethods)
|
23
|
-
end
|
15
|
+
base.send(:prepend, InstanceMethods)
|
24
16
|
end
|
25
17
|
|
26
18
|
# Span hook invoked after request is completed.
|
@@ -34,20 +26,6 @@ module Datadog
|
|
34
26
|
end
|
35
27
|
end
|
36
28
|
|
37
|
-
# Compatibility shim for Rubies not supporting `.prepend`
|
38
|
-
module InstanceMethodsCompatibility
|
39
|
-
def self.included(base)
|
40
|
-
base.class_eval do
|
41
|
-
alias_method :request_without_datadog, :request
|
42
|
-
remove_method :request
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def request(*args, &block)
|
47
|
-
request_without_datadog(*args, &block)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
29
|
# InstanceMethods - implementing instrumentation
|
52
30
|
module InstanceMethods
|
53
31
|
def request(req, body = nil, &block) # :yield: +response+
|
@@ -9,13 +9,15 @@ module Datadog
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
10
|
DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
|
11
11
|
|
12
|
-
option
|
13
|
-
|
14
|
-
|
12
|
+
option :analytics_enabled do |o|
|
13
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
14
|
+
o.lazy
|
15
|
+
end
|
15
16
|
|
16
|
-
option
|
17
|
-
|
18
|
-
|
17
|
+
option :analytics_sample_rate do |o|
|
18
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
19
|
+
o.lazy
|
20
|
+
end
|
19
21
|
|
20
22
|
option :quantize, default: DEFAULT_QUANTIZE
|
21
23
|
option :service_name, default: Ext::SERVICE_NAME
|
@@ -7,13 +7,15 @@ module Datadog
|
|
7
7
|
module Configuration
|
8
8
|
# Custom settings for the Mysql2 integration
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
10
|
-
option
|
11
|
-
|
12
|
-
|
10
|
+
option :analytics_enabled do |o|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
12
|
+
o.lazy
|
13
|
+
end
|
13
14
|
|
14
|
-
option
|
15
|
-
|
16
|
-
|
15
|
+
option :analytics_sample_rate do |o|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
17
|
+
o.lazy
|
18
|
+
end
|
17
19
|
|
18
20
|
option :service_name, default: Ext::SERVICE_NAME
|
19
21
|
end
|
@@ -10,29 +10,7 @@ module Datadog
|
|
10
10
|
# Mysql2::Client patch module
|
11
11
|
module Instrumentation
|
12
12
|
def self.included(base)
|
13
|
-
|
14
|
-
base.class_eval do
|
15
|
-
# Instance methods
|
16
|
-
include InstanceMethodsCompatibility
|
17
|
-
include InstanceMethods
|
18
|
-
end
|
19
|
-
else
|
20
|
-
base.send(:prepend, InstanceMethods)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Mysql2::Client patch 1.9.3 instance methods
|
25
|
-
module InstanceMethodsCompatibility
|
26
|
-
def self.included(base)
|
27
|
-
base.class_eval do
|
28
|
-
alias_method :query_without_datadog, :query
|
29
|
-
remove_method :query
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def query(*args, &block)
|
34
|
-
query_without_datadog(*args, &block)
|
35
|
-
end
|
13
|
+
base.send(:prepend, InstanceMethods)
|
36
14
|
end
|
37
15
|
|
38
16
|
# Mysql2::Client patch instance methods
|