ddtrace 0.28.0 → 0.29.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +8 -0
  3. data/Appraisals +57 -2
  4. data/CHANGELOG.md +41 -12
  5. data/Rakefile +3 -3
  6. data/ddtrace.gemspec +2 -1
  7. data/docs/DevelopmentGuide.md +1 -1
  8. data/docs/GettingStarted.md +6 -6
  9. data/lib/ddtrace.rb +7 -0
  10. data/lib/ddtrace/buffer.rb +60 -1
  11. data/lib/ddtrace/configuration/base.rb +82 -0
  12. data/lib/ddtrace/configuration/option.rb +28 -5
  13. data/lib/ddtrace/configuration/option_definition.rb +100 -0
  14. data/lib/ddtrace/configuration/options.rb +28 -14
  15. data/lib/ddtrace/configuration/settings.rb +77 -64
  16. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +9 -7
  17. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +8 -6
  18. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +8 -14
  19. data/lib/ddtrace/contrib/active_model_serializers/event.rb +1 -1
  20. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +11 -16
  21. data/lib/ddtrace/contrib/active_record/event.rb +1 -1
  22. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +8 -6
  23. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +2 -2
  24. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +4 -1
  25. data/lib/ddtrace/contrib/aws/configuration/settings.rb +8 -6
  26. data/lib/ddtrace/contrib/configuration/settings.rb +5 -11
  27. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +8 -6
  28. data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -18
  29. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +8 -6
  30. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +8 -6
  31. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +8 -6
  32. data/lib/ddtrace/contrib/ethon/integration.rb +0 -4
  33. data/lib/ddtrace/contrib/excon/configuration/settings.rb +9 -7
  34. data/lib/ddtrace/contrib/excon/middleware.rb +1 -1
  35. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +8 -6
  36. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -1
  37. data/lib/ddtrace/contrib/faraday/patcher.rb +8 -2
  38. data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
  39. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -6
  40. data/lib/ddtrace/contrib/grape/instrumentation.rb +2 -42
  41. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +8 -6
  42. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +8 -6
  43. data/lib/ddtrace/contrib/grpc/integration.rb +1 -3
  44. data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -6
  45. data/lib/ddtrace/contrib/http/instrumentation.rb +1 -23
  46. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +8 -6
  47. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +8 -6
  48. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -23
  49. data/lib/ddtrace/contrib/patchable.rb +1 -1
  50. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +8 -14
  51. data/lib/ddtrace/contrib/racecar/event.rb +1 -1
  52. data/lib/ddtrace/contrib/rack/configuration/settings.rb +8 -6
  53. data/lib/ddtrace/contrib/rack/request_queue.rb +7 -6
  54. data/lib/ddtrace/contrib/rails/configuration/settings.rb +30 -21
  55. data/lib/ddtrace/contrib/rake/configuration/settings.rb +8 -6
  56. data/lib/ddtrace/contrib/rake/integration.rb +0 -4
  57. data/lib/ddtrace/contrib/redis/configuration/settings.rb +8 -6
  58. data/lib/ddtrace/contrib/resque/configuration/settings.rb +8 -6
  59. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +8 -6
  60. data/lib/ddtrace/contrib/rest_client/integration.rb +0 -4
  61. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -18
  62. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +8 -6
  63. data/lib/ddtrace/contrib/sequel/integration.rb +0 -4
  64. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +8 -6
  65. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +8 -6
  66. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +8 -6
  67. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +8 -6
  68. data/lib/ddtrace/diagnostics/health.rb +30 -0
  69. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -1
  70. data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
  71. data/lib/ddtrace/ext/diagnostics.rb +25 -0
  72. data/lib/ddtrace/ext/runtime.rb +1 -7
  73. data/lib/ddtrace/metrics.rb +89 -6
  74. data/lib/ddtrace/propagation/http_propagator.rb +2 -2
  75. data/lib/ddtrace/runtime/class_count.rb +3 -3
  76. data/lib/ddtrace/runtime/object_space.rb +19 -0
  77. data/lib/ddtrace/span.rb +1 -1
  78. data/lib/ddtrace/tracer.rb +5 -4
  79. data/lib/ddtrace/transport/http/client.rb +3 -4
  80. data/lib/ddtrace/transport/http/response.rb +4 -0
  81. data/lib/ddtrace/transport/http/statistics.rb +30 -0
  82. data/lib/ddtrace/transport/statistics.rb +28 -0
  83. data/lib/ddtrace/version.rb +3 -1
  84. data/lib/ddtrace/workers.rb +4 -2
  85. data/lib/ddtrace/writer.rb +3 -3
  86. metadata +74 -54
@@ -0,0 +1,30 @@
1
+ require 'ddtrace/ext/diagnostics'
2
+ require 'ddtrace/metrics'
3
+
4
+ module Datadog
5
+ module Diagnostics
6
+ # Health-related diagnostics
7
+ module Health
8
+ # Health metrics for diagnostics
9
+ class Metrics < ::Datadog::Metrics
10
+ count :api_errors, Ext::Diagnostics::Health::Metrics::METRIC_API_ERRORS
11
+ count :api_requests, Ext::Diagnostics::Health::Metrics::METRIC_API_REQUESTS
12
+ count :api_responses, Ext::Diagnostics::Health::Metrics::METRIC_API_RESPONSES
13
+ count :queue_accepted, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_ACCEPTED
14
+ count :queue_accepted_lengths, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_ACCEPTED_LENGTHS
15
+ count :queue_dropped, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_DROPPED
16
+ gauge :queue_length, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_LENGTH
17
+ gauge :queue_max_length, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_MAX_LENGTH
18
+ gauge :queue_spans, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_SPANS
19
+ count :traces_filtered, Ext::Diagnostics::Health::Metrics::METRIC_TRACES_FILTERED
20
+ count :writer_cpu_time, Ext::Diagnostics::Health::Metrics::METRIC_WRITER_CPU_TIME
21
+ end
22
+
23
+ module_function
24
+
25
+ def metrics
26
+ Datadog.configuration.diagnostics.health_metrics
27
+ end
28
+ end
29
+ end
30
+ end
@@ -28,7 +28,7 @@ module Datadog
28
28
  # Return early if this propagation is not valid
29
29
  # DEV: To be valid we need to have a trace id and a parent id or when it is a synthetics trace, just the trace id
30
30
  # DEV: `DistributedHeaders#id` will not return 0
31
- return unless (trace_id && parent_id) || (origin == 'synthetics' && trace_id)
31
+ return unless (trace_id && parent_id) || (origin && trace_id)
32
32
 
33
33
  # Return new context
34
34
  ::Datadog::Context.new(trace_id: trace_id,
@@ -13,6 +13,8 @@ module Datadog
13
13
  @env = env
14
14
  end
15
15
 
16
+ # TODO: Don't assume Rack format.
17
+ # Make distributed tracing headers apathetic.
16
18
  def header(name)
17
19
  rack_header = "http-#{name}".upcase!.tr('-', '_')
18
20
 
@@ -0,0 +1,25 @@
1
+ module Datadog
2
+ module Ext
3
+ module Diagnostics
4
+ # Health
5
+ module Health
6
+ # Metrics
7
+ module Metrics
8
+ ENV_ENABLED = 'DD_HEALTH_METRICS_ENABLED'.freeze
9
+
10
+ METRIC_API_ERRORS = 'datadog.tracer.api.errors'.freeze
11
+ METRIC_API_REQUESTS = 'datadog.tracer.api.requests'.freeze
12
+ METRIC_API_RESPONSES = 'datadog.tracer.api.responses'.freeze
13
+ METRIC_QUEUE_ACCEPTED = 'datadog.tracer.queue.accepted'.freeze
14
+ METRIC_QUEUE_ACCEPTED_LENGTHS = 'datadog.tracer.queue.accepted_lengths'.freeze
15
+ METRIC_QUEUE_DROPPED = 'datadog.tracer.queue.dropped'.freeze
16
+ METRIC_QUEUE_LENGTH = 'datadog.tracer.queue.length'.freeze
17
+ METRIC_QUEUE_MAX_LENGTH = 'datadog.tracer.queue.max_length'.freeze
18
+ METRIC_QUEUE_SPANS = 'datadog.tracer.queue.spans'.freeze
19
+ METRIC_TRACES_FILTERED = 'datadog.tracer.traces.filtered'.freeze
20
+ METRIC_WRITER_CPU_TIME = 'datadog.tracer.writer.cpu_time'.freeze
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -5,13 +5,7 @@ module Datadog
5
5
  module Runtime
6
6
  # Identity
7
7
  LANG = 'ruby'.freeze
8
- LANG_INTERPRETER = begin
9
- if Gem::Version.new(RUBY_VERSION) > Gem::Version.new('1.9')
10
- (RUBY_ENGINE + '-' + RUBY_PLATFORM)
11
- else
12
- ('ruby-' + RUBY_PLATFORM)
13
- end
14
- end.freeze
8
+ LANG_INTERPRETER = (RUBY_ENGINE + '-' + RUBY_PLATFORM).freeze
15
9
  LANG_VERSION = RUBY_VERSION
16
10
  TRACER_VERSION = Datadog::VERSION::STRING
17
11
 
@@ -1,6 +1,7 @@
1
1
  require 'ddtrace/ext/metrics'
2
2
 
3
3
  require 'set'
4
+ require 'logger'
4
5
  require 'ddtrace/utils/time'
5
6
  require 'ddtrace/runtime/identity'
6
7
 
@@ -54,8 +55,21 @@ module Datadog
54
55
  enabled? && !statsd.nil?
55
56
  end
56
57
 
57
- def distribution(stat, value, options = nil)
58
+ def count(stat, value = nil, options = nil, &block)
59
+ return unless send_stats? && statsd.respond_to?(:count)
60
+ value, options = yield if block_given?
61
+ raise ArgumentError if value.nil?
62
+
63
+ statsd.count(stat, value, metric_options(options))
64
+ rescue StandardError => e
65
+ Datadog::Tracer.log.error("Failed to send count stat. Cause: #{e.message} Source: #{e.backtrace.first}")
66
+ end
67
+
68
+ def distribution(stat, value = nil, options = nil, &block)
58
69
  return unless send_stats? && statsd.respond_to?(:distribution)
70
+ value, options = yield if block_given?
71
+ raise ArgumentError if value.nil?
72
+
59
73
  statsd.distribution(stat, value, metric_options(options))
60
74
  rescue StandardError => e
61
75
  Datadog::Tracer.log.error("Failed to send distribution stat. Cause: #{e.message} Source: #{e.backtrace.first}")
@@ -63,13 +77,18 @@ module Datadog
63
77
 
64
78
  def increment(stat, options = nil)
65
79
  return unless send_stats? && statsd.respond_to?(:increment)
80
+ options = yield if block_given?
81
+
66
82
  statsd.increment(stat, metric_options(options))
67
83
  rescue StandardError => e
68
84
  Datadog::Tracer.log.error("Failed to send increment stat. Cause: #{e.message} Source: #{e.backtrace.first}")
69
85
  end
70
86
 
71
- def gauge(stat, value, options = nil)
87
+ def gauge(stat, value = nil, options = nil, &block)
72
88
  return unless send_stats? && statsd.respond_to?(:gauge)
89
+ value, options = yield if block_given?
90
+ raise ArgumentError if value.nil?
91
+
73
92
  statsd.gauge(stat, value, metric_options(options))
74
93
  rescue StandardError => e
75
94
  Datadog::Tracer.log.error("Failed to send gauge stat. Cause: #{e.message} Source: #{e.backtrace.first}")
@@ -92,14 +111,25 @@ module Datadog
92
111
  end
93
112
  end
94
113
 
114
+ def send_metrics(metrics)
115
+ metrics.each { |m| send(m.type, *[m.name, m.value, m.options].compact) }
116
+ end
117
+
118
+ Metric = Struct.new(:type, :name, :value, :options) do
119
+ def initialize(*args)
120
+ super
121
+ self.options = options || {}
122
+ end
123
+ end
124
+
95
125
  # For defining and adding default options to metrics
96
126
  module Options
97
127
  DEFAULT = {
98
128
  tags: DEFAULT_TAGS = [
99
- "#{Ext::Metrics::TAG_LANG}:#{Runtime::Identity.lang}".freeze
100
- # "#{Ext::Metrics::TAG_LANG_INTERPRETER}:#{Runtime::Identity.lang_interpreter}".freeze,
101
- # "#{Ext::Metrics::TAG_LANG_VERSION}:#{Runtime::Identity.lang_version}".freeze,
102
- # "#{Ext::Metrics::TAG_TRACER_VERSION}:#{Runtime::Identity.tracer_version}".freeze
129
+ "#{Ext::Metrics::TAG_LANG}:#{Runtime::Identity.lang}".freeze,
130
+ "#{Ext::Metrics::TAG_LANG_INTERPRETER}:#{Runtime::Identity.lang_interpreter}".freeze,
131
+ "#{Ext::Metrics::TAG_LANG_VERSION}:#{Runtime::Identity.lang_version}".freeze,
132
+ "#{Ext::Metrics::TAG_TRACER_VERSION}:#{Runtime::Identity.tracer_version}".freeze
103
133
  ].freeze
104
134
  }.freeze
105
135
 
@@ -125,8 +155,61 @@ module Datadog
125
155
  end
126
156
  end
127
157
 
158
+ # For defining and adding helpers to metrics
159
+ module Helpers
160
+ [
161
+ :count,
162
+ :distribution,
163
+ :increment,
164
+ :gauge,
165
+ :time
166
+ ].each do |metric_type|
167
+ define_method(metric_type) do |name, stat|
168
+ name = name.to_sym
169
+ define_method(name) do |*args, &block|
170
+ send(metric_type, stat, *args, &block)
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ module Logging
177
+ # Surrogate for Datadog::Statsd to log elsewhere
178
+ class Adapter
179
+ attr_accessor :logger
180
+
181
+ def initialize(logger = nil)
182
+ @logger = logger || Logger.new(STDOUT).tap do |l|
183
+ l.level = Logger::INFO
184
+ l.progname = nil
185
+ l.formatter = proc do |_severity, datetime, _progname, msg|
186
+ stat = JSON.parse(msg[3..-1]) # Trim off leading progname...
187
+ "#{JSON.dump(timestamp: datetime.to_i, message: 'Metric sent.', metric: stat)}\n"
188
+ end
189
+ end
190
+ end
191
+
192
+ def count(stat, value, options = nil)
193
+ logger.info({ stat: stat, type: :count, value: value, options: options }.to_json)
194
+ end
195
+
196
+ def distribution(stat, value, options = nil)
197
+ logger.info({ stat: stat, type: :distribution, value: value, options: options }.to_json)
198
+ end
199
+
200
+ def increment(stat, options = nil)
201
+ logger.info({ stat: stat, type: :increment, options: options }.to_json)
202
+ end
203
+
204
+ def gauge(stat, value, options = nil)
205
+ logger.info({ stat: stat, type: :gauge, value: value, options: options }.to_json)
206
+ end
207
+ end
208
+ end
209
+
128
210
  # Make available on for both class and instance.
129
211
  include Options
130
212
  extend Options
213
+ extend Helpers
131
214
  end
132
215
  end
@@ -24,7 +24,7 @@ module Datadog
24
24
  end
25
25
 
26
26
  # Inject all configured propagation styles
27
- ::Datadog.configuration.propagation_inject_style.each do |style|
27
+ ::Datadog.configuration.distributed_tracing.propagation_inject_style.each do |style|
28
28
  propagator = PROPAGATION_STYLES[style]
29
29
  propagator.inject!(context, env) unless propagator.nil?
30
30
  end
@@ -36,7 +36,7 @@ module Datadog
36
36
  context = nil
37
37
  dd_context = nil
38
38
 
39
- ::Datadog.configuration.propagation_extract_style.each do |style|
39
+ ::Datadog.configuration.distributed_tracing.propagation_extract_style.each do |style|
40
40
  propagator = PROPAGATION_STYLES[style]
41
41
  next if propagator.nil?
42
42
 
@@ -5,12 +5,12 @@ module Datadog
5
5
  module_function
6
6
 
7
7
  def value
8
- ObjectSpace.count_objects[:T_CLASS]
8
+ ::ObjectSpace.count_objects[:T_CLASS]
9
9
  end
10
10
 
11
11
  def available?
12
- ObjectSpace.respond_to?(:count_objects) \
13
- && ObjectSpace.count_objects.key?(:T_CLASS)
12
+ ::ObjectSpace.respond_to?(:count_objects) \
13
+ && ::ObjectSpace.count_objects.key?(:T_CLASS)
14
14
  end
15
15
  end
16
16
  end
@@ -0,0 +1,19 @@
1
+ require 'objspace'
2
+
3
+ module Datadog
4
+ module Runtime
5
+ # Retrieves garbage collection statistics
6
+ module ObjectSpace
7
+ module_function
8
+
9
+ def estimate_bytesize(object)
10
+ return 0 unless ::ObjectSpace.respond_to?(:memsize_of)
11
+
12
+ # Rough calculation of bytesize; not very accurate.
13
+ object.instance_variables.inject(::ObjectSpace.memsize_of(object)) do |sum, var|
14
+ sum + ::ObjectSpace.memsize_of(object.instance_variable_get(var))
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -243,7 +243,7 @@ module Datadog
243
243
 
244
244
  private
245
245
 
246
- if defined?(JRUBY_VERSION) || Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
246
+ if defined?(JRUBY_VERSION) || Gem::Version.new(RUBY_VERSION) < Gem::Version.new(VERSION::MINIMUM_RUBY_VERSION)
247
247
  def now_allocations
248
248
  0
249
249
  end
@@ -230,9 +230,10 @@ module Datadog
230
230
  # root span
231
231
  @sampler.sample!(span)
232
232
  span.set_tag('system.pid', Process.pid)
233
- if ctx && ctx.trace_id && ctx.span_id
233
+
234
+ if ctx && ctx.trace_id
234
235
  span.trace_id = ctx.trace_id
235
- span.parent_id = ctx.span_id
236
+ span.parent_id = ctx.span_id unless ctx.span_id.nil?
236
237
  end
237
238
  else
238
239
  # child span
@@ -391,8 +392,8 @@ module Datadog
391
392
  transport_options = options.fetch(:transport_options, {})
392
393
 
393
394
  # Compile writer options
394
- rebuild_writer = false
395
- writer_options = {}
395
+ writer_options = options.fetch(:writer_options, {})
396
+ rebuild_writer = !writer_options.empty?
396
397
 
397
398
  # Re-build the sampler and writer if priority sampling is enabled,
398
399
  # but neither are configured. Verify the sampler isn't already a
@@ -1,4 +1,4 @@
1
- require 'ddtrace/transport/statistics'
1
+ require 'ddtrace/transport/http/statistics'
2
2
  require 'ddtrace/transport/http/env'
3
3
 
4
4
  module Datadog
@@ -6,7 +6,7 @@ module Datadog
6
6
  module HTTP
7
7
  # Routes, encodes, and sends tracer data to the trace agent via HTTP.
8
8
  class Client
9
- include Transport::Statistics
9
+ include Transport::HTTP::Statistics
10
10
 
11
11
  attr_reader \
12
12
  :apis,
@@ -47,8 +47,7 @@ module Datadog
47
47
  end
48
48
 
49
49
  # Update statistics
50
- stats.internal_error += 1
51
- stats.consecutive_errors += 1
50
+ update_stats_from_exception!(e)
52
51
 
53
52
  InternalErrorResponse.new(e)
54
53
  end
@@ -16,6 +16,10 @@ module Datadog
16
16
  end
17
17
 
18
18
  def_delegators :@http_response, *Transport::Response.instance_methods
19
+
20
+ def code
21
+ @http_response.respond_to?(:code) ? @http_response.code : nil
22
+ end
19
23
  end
20
24
  end
21
25
  end
@@ -0,0 +1,30 @@
1
+ require 'ddtrace/transport/statistics'
2
+
3
+ module Datadog
4
+ module Transport
5
+ module HTTP
6
+ # Tracks statistics for HTTP transports
7
+ module Statistics
8
+ def self.included(base)
9
+ base.send(:include, Transport::Statistics)
10
+ base.send(:include, InstanceMethods)
11
+ end
12
+
13
+ # Instance methods for HTTP statistics
14
+ module InstanceMethods
15
+ # Decorate metrics for HTTP responses
16
+ def metrics_for_response(response)
17
+ super.tap do |metrics|
18
+ # Add status code tag to api.responses metric
19
+ if metrics.key?(:api_responses)
20
+ (metrics[:api_responses].options[:tags] ||= []).tap do |tags|
21
+ tags << "status_code:#{response.code}"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,5 @@
1
+ require 'ddtrace/diagnostics/health'
2
+
1
3
  module Datadog
2
4
  module Transport
3
5
  # Tracks statistics for transports
@@ -16,6 +18,32 @@ module Datadog
16
18
  stats.internal_error += 1 if response.internal_error?
17
19
  stats.consecutive_errors += 1
18
20
  end
21
+
22
+ # Send health metrics
23
+ Diagnostics::Health.metrics.send_metrics(
24
+ metrics_for_response(response).values
25
+ )
26
+ end
27
+
28
+ def metrics_for_response(response)
29
+ {}.tap do |metrics|
30
+ metrics[:api_errors] = Metrics::Metric.new(:api_errors, nil, 1) if response.internal_error?
31
+ metrics[:api_responses] = Metrics::Metric.new(:api_responses, nil, 1) unless response.internal_error?
32
+ end
33
+ end
34
+
35
+ def update_stats_from_exception!(exception)
36
+ stats.internal_error += 1
37
+ stats.consecutive_errors += 1
38
+
39
+ # Send health metrics
40
+ Diagnostics::Health.metrics.send_metrics(
41
+ metrics_for_exception(exception).values
42
+ )
43
+ end
44
+
45
+ def metrics_for_exception(_exception)
46
+ { api_errors: Metrics::Metric.new(:api_errors, nil, 1) }
19
47
  end
20
48
 
21
49
  # Stat counts
@@ -1,10 +1,12 @@
1
1
  module Datadog
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 28
4
+ MINOR = 29
5
5
  PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
9
+
10
+ MINIMUM_RUBY_VERSION = '2.0.0'.freeze
9
11
  end
10
12
  end
@@ -10,6 +10,8 @@ module Datadog
10
10
  # will perform a task at regular intervals. The thread can be stopped
11
11
  # with the +stop()+ method and can start with the +start()+ method.
12
12
  class AsyncTransport
13
+ DEFAULT_BUFFER_MAX_SIZE = 1000
14
+ DEFAULT_FLUSH_INTERVAL = 1
13
15
  DEFAULT_TIMEOUT = 5
14
16
  BACK_OFF_RATIO = 1.2
15
17
  BACK_OFF_MAX = 5
@@ -26,12 +28,12 @@ module Datadog
26
28
  @runtime_metrics_task = options[:on_runtime_metrics]
27
29
 
28
30
  # Intervals
29
- interval = options.fetch(:interval, 1)
31
+ interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
30
32
  @flush_interval = interval
31
33
  @back_off = interval
32
34
 
33
35
  # Buffers
34
- buffer_size = options.fetch(:buffer_size, 100)
36
+ buffer_size = options.fetch(:buffer_size, DEFAULT_BUFFER_MAX_SIZE)
35
37
  @trace_buffer = TraceBuffer.new(buffer_size)
36
38
 
37
39
  # Threading