ddtrace 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|