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 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