ddtrace 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env +3 -1
- data/.gitignore +1 -0
- data/Appraisals +10 -0
- data/Rakefile +27 -1
- data/ddtrace.gemspec +2 -2
- data/docker-compose.yml +10 -0
- data/docs/GettingStarted.md +119 -0
- data/gemfiles/contrib.gemfile +5 -0
- data/gemfiles/contrib_old.gemfile +4 -0
- data/lib/ddtrace.rb +4 -11
- data/lib/ddtrace/buffer.rb +14 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +43 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +56 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +56 -0
- data/lib/ddtrace/contrib/aws/services.rb +115 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +35 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +50 -0
- data/lib/ddtrace/contrib/dalli/quantize.rb +17 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +75 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +52 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +57 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +93 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +71 -0
- data/lib/ddtrace/contrib/rails/action_controller.rb +18 -19
- data/lib/ddtrace/contrib/rails/action_view.rb +51 -61
- data/lib/ddtrace/contrib/rails/active_support.rb +29 -73
- data/lib/ddtrace/contrib/rails/core_extensions.rb +191 -53
- data/lib/ddtrace/contrib/redis/quantize.rb +4 -6
- data/lib/ddtrace/contrib/resque/patcher.rb +38 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +31 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +26 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +60 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +50 -0
- data/lib/ddtrace/ext/http.rb +1 -0
- data/lib/ddtrace/ext/mongo.rb +12 -0
- data/lib/ddtrace/monkey.rb +18 -0
- data/lib/ddtrace/pipeline.rb +46 -0
- data/lib/ddtrace/pipeline/span_filter.rb +38 -0
- data/lib/ddtrace/pipeline/span_processor.rb +20 -0
- data/lib/ddtrace/tracer.rb +18 -0
- data/lib/ddtrace/utils.rb +23 -3
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/workers.rb +30 -22
- data/lib/ddtrace/writer.rb +5 -7
- metadata +30 -9
@@ -0,0 +1,50 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Contrib
|
3
|
+
module SuckerPunch
|
4
|
+
SERVICE = 'sucker_punch'.freeze
|
5
|
+
COMPATIBLE_WITH = Gem::Version.new('2.0.0')
|
6
|
+
|
7
|
+
# Responsible for hooking the instrumentation into `sucker_punch`
|
8
|
+
module Patcher
|
9
|
+
@patched = false
|
10
|
+
|
11
|
+
module_function
|
12
|
+
|
13
|
+
def patch
|
14
|
+
return @patched if patched? || !compatible?
|
15
|
+
|
16
|
+
require 'ddtrace/ext/app_types'
|
17
|
+
require_relative 'exception_handler'
|
18
|
+
require_relative 'instrumentation'
|
19
|
+
|
20
|
+
add_pin!
|
21
|
+
ExceptionHandler.patch!
|
22
|
+
Instrumentation.patch!
|
23
|
+
|
24
|
+
@patched = true
|
25
|
+
rescue => e
|
26
|
+
Datadog::Tracer.log.error("Unable to apply SuckerPunch integration: #{e}")
|
27
|
+
@patched
|
28
|
+
end
|
29
|
+
|
30
|
+
def patched?
|
31
|
+
@patched
|
32
|
+
end
|
33
|
+
|
34
|
+
def compatible?
|
35
|
+
return unless defined?(::SuckerPunch::VERSION)
|
36
|
+
|
37
|
+
Gem::Version.new(::SuckerPunch::VERSION) >= COMPATIBLE_WITH
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_pin!
|
41
|
+
Pin.new(SERVICE, app_type: Ext::AppTypes::WORKER).tap do |pin|
|
42
|
+
pin.onto(::SuckerPunch)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private_class_method :compatible?, :add_pin!
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/ddtrace/ext/http.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Ext
|
3
|
+
module Mongo
|
4
|
+
DB = 'mongodb.db'.freeze
|
5
|
+
TYPE = 'mongodb'.freeze
|
6
|
+
ROWS = 'mongodb.rows'.freeze
|
7
|
+
QUERY = 'mongodb.query'.freeze
|
8
|
+
OPERATION = 'mongodb.operation'.freeze
|
9
|
+
COLLECTION = 'mongodb.collection'.freeze
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/ddtrace/monkey.rb
CHANGED
@@ -5,9 +5,15 @@ require 'thread'
|
|
5
5
|
# patching code, which is required on demand, when patching.
|
6
6
|
require 'ddtrace/contrib/active_record/patcher'
|
7
7
|
require 'ddtrace/contrib/elasticsearch/patcher'
|
8
|
+
require 'ddtrace/contrib/faraday/patcher'
|
8
9
|
require 'ddtrace/contrib/grape/patcher'
|
9
10
|
require 'ddtrace/contrib/redis/patcher'
|
10
11
|
require 'ddtrace/contrib/http/patcher'
|
12
|
+
require 'ddtrace/contrib/aws/patcher'
|
13
|
+
require 'ddtrace/contrib/sucker_punch/patcher'
|
14
|
+
require 'ddtrace/contrib/mongodb/patcher'
|
15
|
+
require 'ddtrace/contrib/dalli/patcher'
|
16
|
+
require 'ddtrace/contrib/resque/patcher'
|
11
17
|
|
12
18
|
module Datadog
|
13
19
|
# Monkey is used for monkey-patching 3rd party libs.
|
@@ -18,6 +24,12 @@ module Datadog
|
|
18
24
|
http: true,
|
19
25
|
redis: true,
|
20
26
|
grape: true,
|
27
|
+
faraday: true,
|
28
|
+
aws: true,
|
29
|
+
sucker_punch: true,
|
30
|
+
mongo: true,
|
31
|
+
dalli: true,
|
32
|
+
resque: true,
|
21
33
|
active_record: false
|
22
34
|
}
|
23
35
|
# Patchers should expose 2 methods:
|
@@ -29,6 +41,12 @@ module Datadog
|
|
29
41
|
http: Datadog::Contrib::HTTP::Patcher,
|
30
42
|
redis: Datadog::Contrib::Redis::Patcher,
|
31
43
|
grape: Datadog::Contrib::Grape::Patcher,
|
44
|
+
faraday: Datadog::Contrib::Faraday::Patcher,
|
45
|
+
aws: Datadog::Contrib::Aws::Patcher,
|
46
|
+
sucker_punch: Datadog::Contrib::SuckerPunch::Patcher,
|
47
|
+
mongo: Datadog::Contrib::MongoDB::Patcher,
|
48
|
+
dalli: Datadog::Contrib::Dalli::Patcher,
|
49
|
+
resque: Datadog::Contrib::Resque::Patcher,
|
32
50
|
active_record: Datadog::Contrib::ActiveRecord::Patcher }
|
33
51
|
@mutex = Mutex.new
|
34
52
|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Datadog
|
2
|
+
# Pipeline
|
3
|
+
module Pipeline
|
4
|
+
require_relative 'pipeline/span_filter'
|
5
|
+
require_relative 'pipeline/span_processor'
|
6
|
+
|
7
|
+
@mutex = Mutex.new
|
8
|
+
@processors = []
|
9
|
+
|
10
|
+
def self.before_flush(*processors, &processor_block)
|
11
|
+
processors = [processor_block] if processors.empty?
|
12
|
+
|
13
|
+
@mutex.synchronize do
|
14
|
+
@processors.concat(processors)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.process!(traces)
|
19
|
+
@mutex.synchronize do
|
20
|
+
traces
|
21
|
+
.map(&method(:apply_processors!))
|
22
|
+
.select(&:any?)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.processors=(value)
|
27
|
+
@processors = value
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.apply_processors!(trace)
|
31
|
+
result = @processors.inject(trace) do |current_trace, processor|
|
32
|
+
processor.call(current_trace)
|
33
|
+
end
|
34
|
+
|
35
|
+
result || []
|
36
|
+
rescue => e
|
37
|
+
Datadog::Tracer.log.debug(
|
38
|
+
"trace dropped entirely due to `Pipeline.before_flush` error: #{e}"
|
39
|
+
)
|
40
|
+
|
41
|
+
[]
|
42
|
+
end
|
43
|
+
|
44
|
+
private_class_method :apply_processors!
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Pipeline
|
3
|
+
# SpanFilter implements a processor that filters entire span subtrees
|
4
|
+
class SpanFilter
|
5
|
+
def initialize(filter = nil, &block)
|
6
|
+
callable = filter || block
|
7
|
+
|
8
|
+
raise(ArgumentError) unless callable.respond_to?(:call)
|
9
|
+
|
10
|
+
@criteria = filter || block
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(trace)
|
14
|
+
black_list = trace.select(&method(:drop_it?))
|
15
|
+
|
16
|
+
clean_trace(black_list, trace) while black_list.any?
|
17
|
+
|
18
|
+
trace
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def drop_it?(span)
|
24
|
+
@criteria.call(span) rescue false
|
25
|
+
end
|
26
|
+
|
27
|
+
def clean_trace(black_list, trace)
|
28
|
+
current = black_list.shift
|
29
|
+
|
30
|
+
trace.delete(current)
|
31
|
+
|
32
|
+
trace.each do |span|
|
33
|
+
black_list << span if span.parent == current
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Pipeline
|
3
|
+
# SpanProcessor
|
4
|
+
class SpanProcessor
|
5
|
+
def initialize(operation = nil, &block)
|
6
|
+
callable = operation || block
|
7
|
+
|
8
|
+
raise(ArgumentError) unless callable.respond_to?(:call)
|
9
|
+
|
10
|
+
@operation = operation || block
|
11
|
+
end
|
12
|
+
|
13
|
+
def call(trace)
|
14
|
+
trace.each do |span|
|
15
|
+
@operation.call(span) rescue next
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/ddtrace/tracer.rb
CHANGED
@@ -57,6 +57,23 @@ module Datadog
|
|
57
57
|
log.level == Logger::DEBUG
|
58
58
|
end
|
59
59
|
|
60
|
+
# Shorthand that calls the `shutdown!` method of a registered worker.
|
61
|
+
# It's useful to ensure that the Trace Buffer is properly flushed before
|
62
|
+
# shutting down the application.
|
63
|
+
#
|
64
|
+
# For instance:
|
65
|
+
#
|
66
|
+
# tracer.trace('operation_name', service='rake_tasks') do |span|
|
67
|
+
# span.set_tag('task.name', 'script')
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# tracer.shutdown!
|
71
|
+
#
|
72
|
+
def shutdown!
|
73
|
+
return if !@enabled || @writer.worker.nil?
|
74
|
+
@writer.worker.shutdown!
|
75
|
+
end
|
76
|
+
|
60
77
|
# Return the current active \Context for this traced execution. This method is
|
61
78
|
# automatically called when calling Tracer.trace or Tracer.start_span,
|
62
79
|
# but it can be used in the application code during manual instrumentation.
|
@@ -303,6 +320,7 @@ module Datadog
|
|
303
320
|
end
|
304
321
|
|
305
322
|
@writer.write(trace, @services)
|
323
|
+
@services = {}
|
306
324
|
end
|
307
325
|
|
308
326
|
private :write, :guess_context_and_parent
|
data/lib/ddtrace/utils.rb
CHANGED
@@ -1,16 +1,36 @@
|
|
1
|
-
require 'thread'
|
2
|
-
|
3
1
|
module Datadog
|
4
2
|
# Utils contains low-level utilities, typically to provide pseudo-random trace IDs.
|
5
3
|
module Utils
|
6
4
|
# We use a custom random number generator because we want no interference
|
7
5
|
# with the default one. Using the default prng, we could break code that
|
8
6
|
# would rely on srand/rand sequences.
|
9
|
-
@rnd = Random.new
|
10
7
|
|
11
8
|
# Return a span id
|
12
9
|
def self.next_id
|
10
|
+
reset! if was_forked?
|
11
|
+
|
13
12
|
@rnd.rand(Datadog::Span::MAX_ID)
|
14
13
|
end
|
14
|
+
|
15
|
+
def self.reset!
|
16
|
+
@pid = Process.pid
|
17
|
+
@rnd = Random.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.was_forked?
|
21
|
+
Process.pid != @pid
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.truncate(value, size, omission = '...')
|
25
|
+
string = value.to_s
|
26
|
+
|
27
|
+
return string if string.size <= size
|
28
|
+
|
29
|
+
string.slice(0, size - omission.size) + omission
|
30
|
+
end
|
31
|
+
|
32
|
+
private_class_method :reset!, :was_forked?
|
33
|
+
|
34
|
+
reset!
|
15
35
|
end
|
16
36
|
end
|
data/lib/ddtrace/version.rb
CHANGED
data/lib/ddtrace/workers.rb
CHANGED
@@ -9,14 +9,18 @@ module Datadog
|
|
9
9
|
# will perform a task at regular intervals. The thread can be stopped
|
10
10
|
# with the +stop()+ method and can start with the +start()+ method.
|
11
11
|
class AsyncTransport
|
12
|
-
|
12
|
+
DEFAULT_TIMEOUT = 5
|
13
|
+
|
14
|
+
attr_reader :trace_buffer, :service_buffer, :shutting_down
|
15
|
+
|
16
|
+
def initialize(transport, buff_size, trace_task, service_task, interval)
|
13
17
|
@trace_task = trace_task
|
14
18
|
@service_task = service_task
|
15
|
-
@
|
16
|
-
@service_interval = service_interval
|
19
|
+
@flush_interval = interval
|
17
20
|
@trace_buffer = TraceBuffer.new(buff_size)
|
18
21
|
@service_buffer = TraceBuffer.new(buff_size)
|
19
22
|
@transport = transport
|
23
|
+
@shutting_down = false
|
20
24
|
|
21
25
|
@worker = nil
|
22
26
|
@run = false
|
@@ -28,6 +32,7 @@ module Datadog
|
|
28
32
|
|
29
33
|
begin
|
30
34
|
traces = @trace_buffer.pop()
|
35
|
+
traces = Pipeline.process!(traces)
|
31
36
|
@trace_task.call(traces, @transport)
|
32
37
|
rescue StandardError => e
|
33
38
|
# ensures that the thread will not die because of an exception.
|
@@ -43,16 +48,7 @@ module Datadog
|
|
43
48
|
|
44
49
|
begin
|
45
50
|
services = @service_buffer.pop()
|
46
|
-
|
47
|
-
# that is different from what we sent before.
|
48
|
-
different = services.inject(false) { |acc, elem| elem != @last_flushed_services ? elem : acc }
|
49
|
-
if different
|
50
|
-
if @service_task.call(different, @transport)
|
51
|
-
@last_flushed_services = different.clone
|
52
|
-
end
|
53
|
-
else
|
54
|
-
Datadog::Tracer.log.debug('No new different services, skipping flush.')
|
55
|
-
end
|
51
|
+
@service_task.call(services[0], @transport)
|
56
52
|
rescue StandardError => e
|
57
53
|
# ensures that the thread will not die because of an exception.
|
58
54
|
# TODO[manu]: findout the reason and reschedule the send if it's not
|
@@ -67,17 +63,11 @@ module Datadog
|
|
67
63
|
@run = true
|
68
64
|
@worker = Thread.new() do
|
69
65
|
Datadog::Tracer.log.debug("Starting thread in the process: #{Process.pid}")
|
70
|
-
@last_flushed_services = nil
|
71
|
-
next_send_services = Time.now
|
72
66
|
|
73
|
-
# this loop assumes spans are flushed more often than services
|
74
67
|
while @run
|
75
68
|
callback_traces
|
76
|
-
|
77
|
-
|
78
|
-
callback_services
|
79
|
-
end
|
80
|
-
sleep(@span_interval)
|
69
|
+
callback_services
|
70
|
+
sleep(@flush_interval) if @run
|
81
71
|
end
|
82
72
|
end
|
83
73
|
end
|
@@ -87,9 +77,27 @@ module Datadog
|
|
87
77
|
@run = false
|
88
78
|
end
|
89
79
|
|
80
|
+
# Closes all available queues and waits for the trace and service buffer to flush
|
81
|
+
def shutdown!
|
82
|
+
return false if @shutting_down
|
83
|
+
@shutting_down = true
|
84
|
+
@trace_buffer.close
|
85
|
+
@service_buffer.close
|
86
|
+
sleep(0.1)
|
87
|
+
timeout_time = Time.now + DEFAULT_TIMEOUT
|
88
|
+
while (!@trace_buffer.empty? || !@service_buffer.empty?) && Time.now <= timeout_time
|
89
|
+
sleep(0.05)
|
90
|
+
Datadog::Tracer.log.debug('Waiting for the buffers to clear before exiting')
|
91
|
+
end
|
92
|
+
stop
|
93
|
+
join
|
94
|
+
@shutting_down = false
|
95
|
+
true
|
96
|
+
end
|
97
|
+
|
90
98
|
# Block until executor shutdown is complete or until timeout seconds have passed.
|
91
99
|
def join
|
92
|
-
@worker.join(
|
100
|
+
@worker.join(5)
|
93
101
|
end
|
94
102
|
|
95
103
|
# Enqueue an item in the trace internal buffer. This operation is thread-safe
|
data/lib/ddtrace/writer.rb
CHANGED
@@ -5,7 +5,7 @@ require 'ddtrace/workers'
|
|
5
5
|
module Datadog
|
6
6
|
# Traces and services writer that periodically sends data to the trace-agent
|
7
7
|
class Writer
|
8
|
-
attr_reader :transport
|
8
|
+
attr_reader :transport, :worker
|
9
9
|
|
10
10
|
HOSTNAME = 'localhost'.freeze
|
11
11
|
PORT = '8126'.freeze
|
@@ -13,8 +13,7 @@ module Datadog
|
|
13
13
|
def initialize(options = {})
|
14
14
|
# writer and transport parameters
|
15
15
|
@buff_size = options.fetch(:buffer_size, 100)
|
16
|
-
@
|
17
|
-
@service_interval = options.fetch(:services_interval, 120)
|
16
|
+
@flush_interval = options.fetch(:flush_interval, 1)
|
18
17
|
|
19
18
|
# transport and buffers
|
20
19
|
@transport = options.fetch(:transport, Datadog::HTTPTransport.new(HOSTNAME, PORT))
|
@@ -36,12 +35,11 @@ module Datadog
|
|
36
35
|
def start
|
37
36
|
@trace_handler = ->(items, transport) { send_spans(items, transport) }
|
38
37
|
@service_handler = ->(items, transport) { send_services(items, transport) }
|
39
|
-
@worker = Datadog::Workers::AsyncTransport.new(@
|
40
|
-
@service_interval,
|
41
|
-
@transport,
|
38
|
+
@worker = Datadog::Workers::AsyncTransport.new(@transport,
|
42
39
|
@buff_size,
|
43
40
|
@trace_handler,
|
44
|
-
@service_handler
|
41
|
+
@service_handler,
|
42
|
+
@flush_interval)
|
45
43
|
|
46
44
|
@worker.start()
|
47
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddtrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: rubocop
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.49.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.49.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '2.
|
75
|
+
version: '2.2'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '2.
|
82
|
+
version: '2.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: yard
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,11 +137,23 @@ files:
|
|
137
137
|
- lib/ddtrace/buffer.rb
|
138
138
|
- lib/ddtrace/context.rb
|
139
139
|
- lib/ddtrace/contrib/active_record/patcher.rb
|
140
|
+
- lib/ddtrace/contrib/aws/instrumentation.rb
|
141
|
+
- lib/ddtrace/contrib/aws/parsed_context.rb
|
142
|
+
- lib/ddtrace/contrib/aws/patcher.rb
|
143
|
+
- lib/ddtrace/contrib/aws/services.rb
|
144
|
+
- lib/ddtrace/contrib/dalli/instrumentation.rb
|
145
|
+
- lib/ddtrace/contrib/dalli/patcher.rb
|
146
|
+
- lib/ddtrace/contrib/dalli/quantize.rb
|
140
147
|
- lib/ddtrace/contrib/elasticsearch/patcher.rb
|
141
148
|
- lib/ddtrace/contrib/elasticsearch/quantize.rb
|
149
|
+
- lib/ddtrace/contrib/faraday/middleware.rb
|
150
|
+
- lib/ddtrace/contrib/faraday/patcher.rb
|
142
151
|
- lib/ddtrace/contrib/grape/endpoint.rb
|
143
152
|
- lib/ddtrace/contrib/grape/patcher.rb
|
144
153
|
- lib/ddtrace/contrib/http/patcher.rb
|
154
|
+
- lib/ddtrace/contrib/mongodb/parsers.rb
|
155
|
+
- lib/ddtrace/contrib/mongodb/patcher.rb
|
156
|
+
- lib/ddtrace/contrib/mongodb/subscribers.rb
|
145
157
|
- lib/ddtrace/contrib/rack/middlewares.rb
|
146
158
|
- lib/ddtrace/contrib/rails/action_controller.rb
|
147
159
|
- lib/ddtrace/contrib/rails/action_view.rb
|
@@ -154,8 +166,13 @@ files:
|
|
154
166
|
- lib/ddtrace/contrib/redis/patcher.rb
|
155
167
|
- lib/ddtrace/contrib/redis/quantize.rb
|
156
168
|
- lib/ddtrace/contrib/redis/tags.rb
|
169
|
+
- lib/ddtrace/contrib/resque/patcher.rb
|
170
|
+
- lib/ddtrace/contrib/resque/resque_job.rb
|
157
171
|
- lib/ddtrace/contrib/sidekiq/tracer.rb
|
158
172
|
- lib/ddtrace/contrib/sinatra/tracer.rb
|
173
|
+
- lib/ddtrace/contrib/sucker_punch/exception_handler.rb
|
174
|
+
- lib/ddtrace/contrib/sucker_punch/instrumentation.rb
|
175
|
+
- lib/ddtrace/contrib/sucker_punch/patcher.rb
|
159
176
|
- lib/ddtrace/distributed.rb
|
160
177
|
- lib/ddtrace/encoding.rb
|
161
178
|
- lib/ddtrace/error.rb
|
@@ -164,12 +181,16 @@ files:
|
|
164
181
|
- lib/ddtrace/ext/distributed.rb
|
165
182
|
- lib/ddtrace/ext/errors.rb
|
166
183
|
- lib/ddtrace/ext/http.rb
|
184
|
+
- lib/ddtrace/ext/mongo.rb
|
167
185
|
- lib/ddtrace/ext/net.rb
|
168
186
|
- lib/ddtrace/ext/redis.rb
|
169
187
|
- lib/ddtrace/ext/sql.rb
|
170
188
|
- lib/ddtrace/logger.rb
|
171
189
|
- lib/ddtrace/monkey.rb
|
172
190
|
- lib/ddtrace/pin.rb
|
191
|
+
- lib/ddtrace/pipeline.rb
|
192
|
+
- lib/ddtrace/pipeline/span_filter.rb
|
193
|
+
- lib/ddtrace/pipeline/span_processor.rb
|
173
194
|
- lib/ddtrace/provider.rb
|
174
195
|
- lib/ddtrace/sampler.rb
|
175
196
|
- lib/ddtrace/span.rb
|
@@ -200,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
221
|
version: '0'
|
201
222
|
requirements: []
|
202
223
|
rubyforge_project:
|
203
|
-
rubygems_version: 2.
|
224
|
+
rubygems_version: 2.6.9
|
204
225
|
signing_key:
|
205
226
|
specification_version: 4
|
206
227
|
summary: Datadog tracing code for your Ruby applications
|