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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c166ccd4553aa6b0a63817846b4aca66a7d74f92
4
- data.tar.gz: bd1cdacc971045e137b14a5714d0659747e442f2
3
+ metadata.gz: c2f79e19f4edb6aa8db41960e7ba86d8b17444e5
4
+ data.tar.gz: 062ddeaa46fe115d62ce88d08a3f9bc37ea9fb5f
5
5
  SHA512:
6
- metadata.gz: 94e7ee6857c01885d16ada253e8d6cab86704c321e8fa114e6a7fbfb716e940d5aaad62261f9486b44ecb2cdc01bd7992e0dd8d6473c23758c82d8a909344d5e
7
- data.tar.gz: 338c3d27571dc226d6c8dede32fb497b90a6a67d7985542fb74b1f0c0dd2d40e9e914eb50e64bd85dfb2c559fe97cdcca7cbccf12c0d36a8ceab444e4009b614
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(test lib)
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(test lib)
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(test lib)
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(test lib)
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(test lib)
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(test lib)
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(test lib)
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(test lib)
61
+ t.libs << %w[test lib]
62
62
  t.test_files = FileList['test/benchmark_test.rb']
63
63
  end
64
64
 
@@ -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
@@ -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
@@ -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)
@@ -2,7 +2,7 @@ module Datadog
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 6
5
- PATCH = 0
5
+ PATCH = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  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.6.0
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-03-28 00:00:00.000000000 Z
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