ddtrace 0.6.0 → 0.6.1
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/Rakefile +8 -8
- data/docs/GettingStarted.md +5 -1
- data/lib/ddtrace/contrib/rails/framework.rb +8 -1
- data/lib/ddtrace/contrib/redis/patcher.rb +4 -0
- data/lib/ddtrace/logger.rb +34 -0
- data/lib/ddtrace/pin.rb +0 -2
- data/lib/ddtrace/tracer.rb +30 -2
- data/lib/ddtrace/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2f79e19f4edb6aa8db41960e7ba86d8b17444e5
|
4
|
+
data.tar.gz: 062ddeaa46fe115d62ce88d08a3f9bc37ea9fb5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bdfa1c9538ce4aac79a3b301474ca1f54d17dbf1c3853c42951c96c758bfc1a9870d4279d589e76894d95138dbcf5e908b1bd871e885d9a77fb7a00a42e8ec6
|
7
|
+
data.tar.gz: 60414076362dc4b4f53928d92b8196b8213f816a9088672011e7c6c4517770d1f01ceb8e52c16cf74ddd1d5c7dd4f38564bc904e435f257b8973def7721811f1
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ namespace :test do
|
|
11
11
|
:elasticsearch, :http, :redis, :sidekiq, :sinatra, :monkey]
|
12
12
|
|
13
13
|
Rake::TestTask.new(:main) do |t|
|
14
|
-
t.libs << %w
|
14
|
+
t.libs << %w[test lib]
|
15
15
|
t.test_files = FileList['test/**/*_test.rb'].reject do |path|
|
16
16
|
path.include?('contrib') ||
|
17
17
|
path.include?('benchmark') ||
|
@@ -21,7 +21,7 @@ namespace :test do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
Rake::TestTask.new(:rails) do |t|
|
24
|
-
t.libs << %w
|
24
|
+
t.libs << %w[test lib]
|
25
25
|
t.test_files = FileList['test/contrib/rails/**/*_test.rb'].reject do |path|
|
26
26
|
path.include?('redis') ||
|
27
27
|
path.include?('sidekiq') ||
|
@@ -30,35 +30,35 @@ namespace :test do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
Rake::TestTask.new(:railsredis) do |t|
|
33
|
-
t.libs << %w
|
33
|
+
t.libs << %w[test lib]
|
34
34
|
t.test_files = FileList['test/contrib/rails/**/*redis*_test.rb']
|
35
35
|
end
|
36
36
|
|
37
37
|
Rake::TestTask.new(:railssidekiq) do |t|
|
38
|
-
t.libs << %w
|
38
|
+
t.libs << %w[test lib]
|
39
39
|
t.test_files = FileList['test/contrib/rails/**/*sidekiq*_test.rb']
|
40
40
|
end
|
41
41
|
|
42
42
|
Rake::TestTask.new(:railsactivejob) do |t|
|
43
|
-
t.libs << %w
|
43
|
+
t.libs << %w[test lib]
|
44
44
|
t.test_files = FileList['test/contrib/rails/**/*active_job*_test.rb']
|
45
45
|
end
|
46
46
|
|
47
47
|
[:elasticsearch, :http, :redis, :sinatra, :sidekiq].each do |contrib|
|
48
48
|
Rake::TestTask.new(contrib) do |t|
|
49
|
-
t.libs << %w
|
49
|
+
t.libs << %w[test lib]
|
50
50
|
t.test_files = FileList["test/contrib/#{contrib}/*_test.rb"]
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
Rake::TestTask.new(:monkey) do |t|
|
55
|
-
t.libs << %w
|
55
|
+
t.libs << %w[test lib]
|
56
56
|
t.test_files = FileList['test/monkey_test.rb']
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
Rake::TestTask.new(:benchmark) do |t|
|
61
|
-
t.libs << %w
|
61
|
+
t.libs << %w[test lib]
|
62
62
|
t.test_files = FileList['test/benchmark_test.rb']
|
63
63
|
end
|
64
64
|
|
data/docs/GettingStarted.md
CHANGED
@@ -64,7 +64,9 @@ of the Datadog tracer, you can override the following defaults:
|
|
64
64
|
tracer: Datadog.tracer,
|
65
65
|
debug: false,
|
66
66
|
trace_agent_hostname: 'localhost',
|
67
|
-
trace_agent_port: 8126
|
67
|
+
trace_agent_port: 8126,
|
68
|
+
env: Rails.env,
|
69
|
+
tags: {}
|
68
70
|
}
|
69
71
|
|
70
72
|
Available settings are:
|
@@ -86,6 +88,8 @@ Available settings are:
|
|
86
88
|
* ``debug``: set to true to enable debug logging.
|
87
89
|
* ``trace_agent_hostname``: set the hostname of the trace agent.
|
88
90
|
* ``trace_agent_port``: set the port the trace agent is listening on.
|
91
|
+
* ``env``: set the environment. Defaults to the Rails environment
|
92
|
+
* ``tags``: set global tags that should be applied to all spans. Defaults to an empty hash
|
89
93
|
|
90
94
|
### Sinatra
|
91
95
|
|
@@ -26,7 +26,9 @@ module Datadog
|
|
26
26
|
tracer: Datadog.tracer,
|
27
27
|
debug: false,
|
28
28
|
trace_agent_hostname: Datadog::Writer::HOSTNAME,
|
29
|
-
trace_agent_port: Datadog::Writer::PORT
|
29
|
+
trace_agent_port: Datadog::Writer::PORT,
|
30
|
+
env: ::Rails.env,
|
31
|
+
tags: {}
|
30
32
|
}.freeze
|
31
33
|
|
32
34
|
# configure Datadog settings
|
@@ -46,12 +48,17 @@ module Datadog
|
|
46
48
|
port: datadog_config[:trace_agent_port]
|
47
49
|
)
|
48
50
|
|
51
|
+
# set default tracer tags
|
52
|
+
datadog_config[:tracer].set_tags(datadog_config[:tags])
|
53
|
+
datadog_config[:tracer].set_tags('env' => datadog_config[:env]) if datadog_config[:env]
|
54
|
+
|
49
55
|
# set default service details
|
50
56
|
datadog_config[:tracer].set_service_info(
|
51
57
|
datadog_config[:default_service],
|
52
58
|
'rails',
|
53
59
|
Datadog::Ext::AppTypes::WEB
|
54
60
|
)
|
61
|
+
|
55
62
|
datadog_config[:tracer].set_service_info(
|
56
63
|
datadog_config[:default_cache_service],
|
57
64
|
'rails',
|
@@ -50,6 +50,7 @@ module Datadog
|
|
50
50
|
end
|
51
51
|
|
52
52
|
# rubocop:disable Metrics/MethodLength
|
53
|
+
# rubocop:disable Metrics/BlockLength
|
53
54
|
def patch_redis_client
|
54
55
|
::Redis::Client.class_eval do
|
55
56
|
alias_method :initialize_without_datadog, :initialize
|
@@ -60,6 +61,9 @@ module Datadog
|
|
60
61
|
def initialize(*args)
|
61
62
|
pin = Datadog::Pin.new(SERVICE, app: 'redis', app_type: Datadog::Ext::AppTypes::DB)
|
62
63
|
pin.onto(self)
|
64
|
+
if pin.tracer && pin.service
|
65
|
+
pin.tracer.set_service_info(pin.service, pin.app, pin.app_type)
|
66
|
+
end
|
63
67
|
initialize_without_datadog(*args)
|
64
68
|
end
|
65
69
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
LOG_PREFIX = 'ddtrace'.freeze
|
5
|
+
|
6
|
+
# A custom logger with minor enhancements:
|
7
|
+
# - progname defaults to ddtrace to clearly identify Datadog dd-trace-rb related messages
|
8
|
+
# - adds last caller stack-trace info to know where the message comes from
|
9
|
+
class Logger < ::Logger
|
10
|
+
def initialize(*args, &block)
|
11
|
+
super
|
12
|
+
self.progname = LOG_PREFIX
|
13
|
+
end
|
14
|
+
|
15
|
+
def add(severity, message = nil, progname = nil, &block)
|
16
|
+
return super unless debug?
|
17
|
+
|
18
|
+
# We are in debug mode, add stack trace to help debugging
|
19
|
+
where = ''
|
20
|
+
c = caller
|
21
|
+
where = "(#{c[1]}) " if c.length > 1
|
22
|
+
|
23
|
+
if block_given?
|
24
|
+
super(severity, message, progname) do
|
25
|
+
"#{where}#{yield}"
|
26
|
+
end
|
27
|
+
else
|
28
|
+
super(severity, message, "#{where}#{progname}")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
alias log add
|
33
|
+
end
|
34
|
+
end
|
data/lib/ddtrace/pin.rb
CHANGED
@@ -33,7 +33,6 @@ module Datadog
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def onto(obj)
|
36
|
-
# rubocop:disable Lint/NestedMethodDefinition
|
37
36
|
unless obj.respond_to? :datadog_pin=
|
38
37
|
obj.instance_exec do
|
39
38
|
def datadog_pin=(pin)
|
@@ -51,7 +50,6 @@ module Datadog
|
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
54
|
-
# rubocop:enable Lint/NestedMethodDefinition
|
55
53
|
|
56
54
|
obj.datadog_pin = self
|
57
55
|
end
|
data/lib/ddtrace/tracer.rb
CHANGED
@@ -4,6 +4,7 @@ require 'logger'
|
|
4
4
|
|
5
5
|
require 'ddtrace/span'
|
6
6
|
require 'ddtrace/buffer'
|
7
|
+
require 'ddtrace/logger'
|
7
8
|
require 'ddtrace/writer'
|
8
9
|
require 'ddtrace/sampler'
|
9
10
|
|
@@ -14,19 +15,34 @@ module Datadog
|
|
14
15
|
# Even though the request may require multiple resources and machines to handle the request, all
|
15
16
|
# of these function calls and sub-requests would be encapsulated within a single trace.
|
16
17
|
class Tracer
|
17
|
-
attr_reader :writer, :sampler, :services
|
18
|
+
attr_reader :writer, :sampler, :services, :tags
|
18
19
|
attr_accessor :enabled
|
19
20
|
|
20
21
|
# Global, memoized, lazy initialized instance of a logger that is used within the the Datadog
|
21
22
|
# namespace. This logger outputs to +STDOUT+ by default, and is considered thread-safe.
|
22
23
|
def self.log
|
23
24
|
unless defined? @logger
|
24
|
-
@logger = Logger.new(STDOUT)
|
25
|
+
@logger = Datadog::Logger.new(STDOUT)
|
25
26
|
@logger.level = Logger::WARN
|
26
27
|
end
|
27
28
|
@logger
|
28
29
|
end
|
29
30
|
|
31
|
+
# Override the default logger with a custom one.
|
32
|
+
def self.log=(logger)
|
33
|
+
return unless logger
|
34
|
+
return unless logger.respond_to? :methods
|
35
|
+
return unless logger.respond_to? :error
|
36
|
+
if logger.respond_to? :methods
|
37
|
+
unimplemented = Logger.new(STDOUT).methods - logger.methods
|
38
|
+
unless unimplemented.empty?
|
39
|
+
logger.error("logger #{logger} does not implement #{unimplemented}")
|
40
|
+
return
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@logger = logger
|
44
|
+
end
|
45
|
+
|
30
46
|
# Activate the debug mode providing more information related to tracer usage
|
31
47
|
def self.debug_logging=(value)
|
32
48
|
log.level = value ? Logger::DEBUG : Logger::WARN
|
@@ -52,6 +68,7 @@ module Datadog
|
|
52
68
|
@mutex = Mutex.new
|
53
69
|
@spans = []
|
54
70
|
@services = {}
|
71
|
+
@tags = {}
|
55
72
|
end
|
56
73
|
|
57
74
|
# Updates the current \Tracer instance, so that the tracer can be configured after the
|
@@ -90,6 +107,15 @@ module Datadog
|
|
90
107
|
Datadog::Tracer.log.debug("set_service_info: service: #{service} app: #{app} type: #{app_type}")
|
91
108
|
end
|
92
109
|
|
110
|
+
# Set the given key / value tag pair at the tracer level. These tags will be
|
111
|
+
# appended to each span created by the tracer. Keys and values must be strings.
|
112
|
+
# A valid example is:
|
113
|
+
#
|
114
|
+
# tracer.set_tags('env' => 'prod', 'component' => 'core')
|
115
|
+
def set_tags(tags)
|
116
|
+
@tags.update(tags)
|
117
|
+
end
|
118
|
+
|
93
119
|
# Return a +span+ that will trace an operation called +name+. You could trace your code
|
94
120
|
# using a <tt>do-block</tt> like:
|
95
121
|
#
|
@@ -126,6 +152,8 @@ module Datadog
|
|
126
152
|
span.set_parent(parent)
|
127
153
|
@buffer.set(span)
|
128
154
|
|
155
|
+
@tags.each { |k, v| span.set_tag(k, v) } unless @tags.empty?
|
156
|
+
|
129
157
|
# sampling
|
130
158
|
if parent.nil?
|
131
159
|
@sampler.sample(span)
|
data/lib/ddtrace/version.rb
CHANGED
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.6.
|
4
|
+
version: 0.6.1
|
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-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- lib/ddtrace/ext/net.rb
|
157
157
|
- lib/ddtrace/ext/redis.rb
|
158
158
|
- lib/ddtrace/ext/sql.rb
|
159
|
+
- lib/ddtrace/logger.rb
|
159
160
|
- lib/ddtrace/monkey.rb
|
160
161
|
- lib/ddtrace/pin.rb
|
161
162
|
- lib/ddtrace/sampler.rb
|