ddtrace 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/.rubocop.yml +4 -0
- data/Appraisals +2 -0
- data/docs/GettingStarted.md +2 -2
- data/gemfiles/contrib.gemfile +2 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +88 -0
- data/lib/ddtrace/contrib/rails/framework.rb +7 -1
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -1
- data/lib/ddtrace/monkey.rb +4 -2
- data/lib/ddtrace/tracer.rb +18 -0
- data/lib/ddtrace/version.rb +1 -1
- metadata +26 -35
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MmJhODJmN2VmNjMxNzY5OTg5NGE1NjEwOTgwZTE0MGU5ZTE1ZjJlYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZTg5OWNhMjdjMDlhNDVlNDMwN2MzODYzNDgyMGM5MTc1MmMwNzFhZg==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZThkYmY4ZDQ2MjJiNGJkNTg5YTFjYTJhNmRmMWM1NTFiZGFjZGYzOGJhOTM1
|
10
|
+
ZWU3ODc1MDExNDliNTgzMGM3YzZiOTE4ZTE0YTlkNWJmNjkzMzJlOGRhNzQz
|
11
|
+
MzE2MTRhMDNkNzA3NmNmMmJmZWIzYmEwN2U3NzU1NmVhNjMzYWQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MWM3N2I4N2IxNDU5NDZhZTU2YWZmNGU2YmMyYjU2ZmZkNTk4YzgxMGVmZGIz
|
14
|
+
YzM0ZDczYWVhZGMyMjhlNzQ1ZTJjMTBiNjRiNjc4YmIwMTE4ODgyYzE1MDEy
|
15
|
+
NTFhYzFhZGFlNzdmN2M5Y2VhNWQ1ZmJjZDRiNDFjM2QxOWM2YWE=
|
data/.rubocop.yml
CHANGED
data/Appraisals
CHANGED
@@ -96,6 +96,7 @@ if RUBY_VERSION >= '2.2.2'
|
|
96
96
|
gem 'hiredis'
|
97
97
|
gem 'rack-test'
|
98
98
|
gem 'sinatra'
|
99
|
+
gem 'sqlite3'
|
99
100
|
gem 'activerecord'
|
100
101
|
gem 'sidekiq'
|
101
102
|
end
|
@@ -107,6 +108,7 @@ else
|
|
107
108
|
gem 'rack-test', '0.6.2'
|
108
109
|
gem 'rack', '1.4.7'
|
109
110
|
gem 'sinatra', '1.4.5'
|
111
|
+
gem 'sqlite3'
|
110
112
|
gem 'activerecord', '3.2.22.5'
|
111
113
|
gem 'sidekiq', '4.0.0'
|
112
114
|
end
|
data/docs/GettingStarted.md
CHANGED
@@ -65,7 +65,7 @@ of the Datadog tracer, you can override the following defaults:
|
|
65
65
|
debug: false,
|
66
66
|
trace_agent_hostname: 'localhost',
|
67
67
|
trace_agent_port: 8126,
|
68
|
-
env:
|
68
|
+
env: nil,
|
69
69
|
tags: {}
|
70
70
|
}
|
71
71
|
|
@@ -88,7 +88,7 @@ Available settings are:
|
|
88
88
|
* ``debug``: set to true to enable debug logging.
|
89
89
|
* ``trace_agent_hostname``: set the hostname of the trace agent.
|
90
90
|
* ``trace_agent_port``: set the port the trace agent is listening on.
|
91
|
-
* ``env``: set the environment.
|
91
|
+
* ``env``: set the environment. Rails users may set it to ``Rails.env`` to use their application settings.
|
92
92
|
* ``tags``: set global tags that should be applied to all spans. Defaults to an empty hash
|
93
93
|
|
94
94
|
### Sinatra
|
data/gemfiles/contrib.gemfile
CHANGED
@@ -0,0 +1,88 @@
|
|
1
|
+
module Datadog
|
2
|
+
module Contrib
|
3
|
+
module ActiveRecord
|
4
|
+
# Patcher enables patching of 'active_record' module.
|
5
|
+
# This is used in monkey.rb to manually apply patches
|
6
|
+
module Patcher
|
7
|
+
@patched = false
|
8
|
+
|
9
|
+
module_function
|
10
|
+
|
11
|
+
# patched? tells whether patch has been successfully applied
|
12
|
+
def patched?
|
13
|
+
@patched
|
14
|
+
end
|
15
|
+
|
16
|
+
def patch
|
17
|
+
if !@patched && defined?(::ActiveRecord)
|
18
|
+
begin
|
19
|
+
require 'ddtrace/contrib/rails/utils'
|
20
|
+
require 'ddtrace/ext/sql'
|
21
|
+
|
22
|
+
patch_active_record()
|
23
|
+
|
24
|
+
@patched = true
|
25
|
+
rescue => e
|
26
|
+
Datadog::Tracer.log.error("Unable to apply Active Record integration: #{e}")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
@patched
|
31
|
+
end
|
32
|
+
|
33
|
+
def patch_active_record
|
34
|
+
# subscribe when the active record query has been processed
|
35
|
+
::ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
|
36
|
+
sql(*args)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.datadog_trace
|
41
|
+
# TODO: Consider using patcher for Rails as well.
|
42
|
+
# @tracer ||= defined?(::Rails) && ::Rails.configuration.datadog_trace
|
43
|
+
@datadog_trace ||= defined?(::Sinatra) && ::Sinatra::Application.settings.datadog_tracer.cfg
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.adapter_name
|
47
|
+
@adapter_name ||= Datadog::Contrib::Rails::Utils.normalize_vendor(
|
48
|
+
::ActiveRecord::Base.connection_config[:adapter]
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.tracer
|
53
|
+
@tracer ||= datadog_trace.fetch(:tracer)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.database_service
|
57
|
+
@database_service ||= datadog_trace.fetch(:default_database_service, adapter_name())
|
58
|
+
if @database_service
|
59
|
+
tracer().set_service_info(@database_service, 'sinatra',
|
60
|
+
Datadog::Ext::AppTypes::DB)
|
61
|
+
end
|
62
|
+
@database_service
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.sql(_name, start, finish, _id, payload)
|
66
|
+
span_type = Datadog::Ext::SQL::TYPE
|
67
|
+
|
68
|
+
span = tracer.trace(
|
69
|
+
"#{adapter_name}.query",
|
70
|
+
resource: payload.fetch(:sql),
|
71
|
+
service: database_service,
|
72
|
+
span_type: span_type
|
73
|
+
)
|
74
|
+
|
75
|
+
# the span should have the query ONLY in the Resource attribute,
|
76
|
+
# so that the ``sql.query`` tag will be set in the agent with an
|
77
|
+
# obfuscated version
|
78
|
+
span.span_type = Datadog::Ext::SQL::TYPE
|
79
|
+
span.set_tag('active_record.db.vendor', adapter_name)
|
80
|
+
span.start_time = start
|
81
|
+
span.finish_at(finish)
|
82
|
+
rescue StandardError => e
|
83
|
+
Datadog::Tracer.log.error(e.message)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -27,11 +27,12 @@ module Datadog
|
|
27
27
|
debug: false,
|
28
28
|
trace_agent_hostname: Datadog::Writer::HOSTNAME,
|
29
29
|
trace_agent_port: Datadog::Writer::PORT,
|
30
|
-
env:
|
30
|
+
env: nil,
|
31
31
|
tags: {}
|
32
32
|
}.freeze
|
33
33
|
|
34
34
|
# configure Datadog settings
|
35
|
+
# rubocop:disable Metrics/MethodLength
|
35
36
|
def self.configure(config)
|
36
37
|
# tracer defaults
|
37
38
|
# merge default configurations with users settings
|
@@ -50,6 +51,7 @@ module Datadog
|
|
50
51
|
|
51
52
|
# set default tracer tags
|
52
53
|
datadog_config[:tracer].set_tags(datadog_config[:tags])
|
54
|
+
|
53
55
|
datadog_config[:tracer].set_tags('env' => datadog_config[:env]) if datadog_config[:env]
|
54
56
|
|
55
57
|
# set default service details
|
@@ -65,6 +67,10 @@ module Datadog
|
|
65
67
|
Datadog::Ext::AppTypes::CACHE
|
66
68
|
)
|
67
69
|
|
70
|
+
# By default, default service would be guessed from the script
|
71
|
+
# being executed, but here we know better, get it from Rails config.
|
72
|
+
datadog_config[:tracer].default_service = datadog_config[:default_service]
|
73
|
+
|
68
74
|
if defined?(::ActiveRecord)
|
69
75
|
begin
|
70
76
|
# set default database service details and store it in the configuration
|
data/lib/ddtrace/monkey.rb
CHANGED
@@ -3,6 +3,7 @@ require 'thread'
|
|
3
3
|
# We import all patchers for every module we support, but this is fine
|
4
4
|
# because patchers do not include any 3rd party module nor even our
|
5
5
|
# patching code, which is required on demand, when patching.
|
6
|
+
require 'ddtrace/contrib/active_record/patcher'
|
6
7
|
require 'ddtrace/contrib/elasticsearch/patcher'
|
7
8
|
require 'ddtrace/contrib/http/patcher'
|
8
9
|
require 'ddtrace/contrib/redis/patcher'
|
@@ -11,7 +12,7 @@ module Datadog
|
|
11
12
|
# Monkey is used for monkey-patching 3rd party libs.
|
12
13
|
module Monkey
|
13
14
|
@patched = []
|
14
|
-
@autopatch_modules = { elasticsearch: true, http: true, redis: true }
|
15
|
+
@autopatch_modules = { elasticsearch: true, http: true, redis: true, active_record: false }
|
15
16
|
# Patchers should expose 2 methods:
|
16
17
|
# - patch, which applies our patch if needed. Should be idempotent,
|
17
18
|
# can be call twice but should just do nothing the second time.
|
@@ -19,7 +20,8 @@ module Datadog
|
|
19
20
|
# patched (patching might have failed if requirements were not here)
|
20
21
|
@patchers = { elasticsearch: Datadog::Contrib::Elasticsearch::Patcher,
|
21
22
|
http: Datadog::Contrib::HTTP::Patcher,
|
22
|
-
redis: Datadog::Contrib::Redis::Patcher
|
23
|
+
redis: Datadog::Contrib::Redis::Patcher,
|
24
|
+
active_record: Datadog::Contrib::ActiveRecord::Patcher }
|
23
25
|
@mutex = Mutex.new
|
24
26
|
|
25
27
|
module_function
|
data/lib/ddtrace/tracer.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pp'
|
2
2
|
require 'thread'
|
3
3
|
require 'logger'
|
4
|
+
require 'pathname'
|
4
5
|
|
5
6
|
require 'ddtrace/span'
|
6
7
|
require 'ddtrace/buffer'
|
@@ -17,6 +18,7 @@ module Datadog
|
|
17
18
|
class Tracer
|
18
19
|
attr_reader :writer, :sampler, :services, :tags
|
19
20
|
attr_accessor :enabled
|
21
|
+
attr_writer :default_service
|
20
22
|
|
21
23
|
# Global, memoized, lazy initialized instance of a logger that is used within the the Datadog
|
22
24
|
# namespace. This logger outputs to +STDOUT+ by default, and is considered thread-safe.
|
@@ -107,6 +109,20 @@ module Datadog
|
|
107
109
|
Datadog::Tracer.log.debug("set_service_info: service: #{service} app: #{app} type: #{app_type}")
|
108
110
|
end
|
109
111
|
|
112
|
+
# A default value for service. One should really override this one
|
113
|
+
# for non-root spans which have a parent. However, root spans without
|
114
|
+
# a service would be invalid and rejected.
|
115
|
+
def default_service
|
116
|
+
return @default_service if @default_service
|
117
|
+
begin
|
118
|
+
@default_service = File.basename($PROGRAM_NAME, '.*')
|
119
|
+
rescue => e
|
120
|
+
Datadog::Tracer.log.error("unable to guess default service: #{e}")
|
121
|
+
@default_service = 'ruby'.freeze
|
122
|
+
end
|
123
|
+
@default_service
|
124
|
+
end
|
125
|
+
|
110
126
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
111
127
|
# appended to each span created by the tracer. Keys and values must be strings.
|
112
128
|
# A valid example is:
|
@@ -181,6 +197,8 @@ module Datadog
|
|
181
197
|
# Record the given finished span in the +spans+ list. When a +span+ is recorded, it will be sent
|
182
198
|
# to the Datadog trace agent as soon as the trace is finished.
|
183
199
|
def record(span)
|
200
|
+
span.service ||= default_service
|
201
|
+
|
184
202
|
spans = []
|
185
203
|
@mutex.synchronize do
|
186
204
|
@spans << span
|
data/lib/ddtrace/version.rb
CHANGED
metadata
CHANGED
@@ -1,113 +1,103 @@
|
|
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.2
|
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-04-
|
11
|
+
date: 2017-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.5'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.5'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rubocop
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0.47'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0.47'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: minitest
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- -
|
45
|
+
- - ~>
|
60
46
|
- !ruby/object:Gem::Version
|
61
47
|
version: '5.10'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- -
|
52
|
+
- - ~>
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: '5.10'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: appraisal
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
|
-
- -
|
59
|
+
- - ~>
|
74
60
|
- !ruby/object:Gem::Version
|
75
61
|
version: '2.1'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- -
|
66
|
+
- - ~>
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: '2.1'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: yard
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- -
|
73
|
+
- - ~>
|
88
74
|
- !ruby/object:Gem::Version
|
89
75
|
version: '0.9'
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- -
|
80
|
+
- - ~>
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0.9'
|
97
|
-
description:
|
98
|
-
|
83
|
+
description: ! 'ddtrace is Datadog’s tracing client for Ruby. It is used to trace
|
84
|
+
requests
|
85
|
+
|
99
86
|
as they flow across web servers, databases and microservices so that developers
|
87
|
+
|
100
88
|
have great visiblity into bottlenecks and troublesome requests.
|
89
|
+
|
90
|
+
'
|
101
91
|
email:
|
102
92
|
- dev@datadoghq.com
|
103
93
|
executables: []
|
104
94
|
extensions: []
|
105
95
|
extra_rdoc_files: []
|
106
96
|
files:
|
107
|
-
-
|
108
|
-
-
|
109
|
-
-
|
110
|
-
-
|
97
|
+
- .env
|
98
|
+
- .gitignore
|
99
|
+
- .rubocop.yml
|
100
|
+
- .yardopts
|
111
101
|
- Appraisals
|
112
102
|
- Gemfile
|
113
103
|
- LICENSE
|
@@ -133,6 +123,7 @@ files:
|
|
133
123
|
- gemfiles/rails5_postgres_sidekiq.gemfile
|
134
124
|
- lib/ddtrace.rb
|
135
125
|
- lib/ddtrace/buffer.rb
|
126
|
+
- lib/ddtrace/contrib/active_record/patcher.rb
|
136
127
|
- lib/ddtrace/contrib/elasticsearch/patcher.rb
|
137
128
|
- lib/ddtrace/contrib/elasticsearch/quantize.rb
|
138
129
|
- lib/ddtrace/contrib/http/patcher.rb
|
@@ -178,17 +169,17 @@ require_paths:
|
|
178
169
|
- lib
|
179
170
|
required_ruby_version: !ruby/object:Gem::Requirement
|
180
171
|
requirements:
|
181
|
-
- -
|
172
|
+
- - ! '>='
|
182
173
|
- !ruby/object:Gem::Version
|
183
174
|
version: 1.9.1
|
184
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
176
|
requirements:
|
186
|
-
- -
|
177
|
+
- - ! '>='
|
187
178
|
- !ruby/object:Gem::Version
|
188
179
|
version: '0'
|
189
180
|
requirements: []
|
190
181
|
rubyforge_project:
|
191
|
-
rubygems_version: 2.6.
|
182
|
+
rubygems_version: 2.6.10
|
192
183
|
signing_key:
|
193
184
|
specification_version: 4
|
194
185
|
summary: Datadog tracing code for your Ruby applications
|