ddtrace 0.33.1 → 0.34.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -0
  3. data/Appraisals +29 -5
  4. data/CHANGELOG.md +23 -1
  5. data/Rakefile +72 -11
  6. data/docker-compose.yml +20 -0
  7. data/docs/GettingStarted.md +63 -10
  8. data/lib/ddtrace.rb +4 -0
  9. data/lib/ddtrace/analytics.rb +7 -0
  10. data/lib/ddtrace/configuration/base.rb +2 -1
  11. data/lib/ddtrace/configuration/option.rb +9 -1
  12. data/lib/ddtrace/configuration/option_definition.rb +0 -4
  13. data/lib/ddtrace/configuration/settings.rb +78 -23
  14. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +3 -0
  15. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +4 -0
  16. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +3 -0
  17. data/lib/ddtrace/contrib/action_view/events/render_template.rb +3 -0
  18. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +3 -0
  19. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +6 -0
  20. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -0
  21. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +3 -0
  22. data/lib/ddtrace/contrib/analytics.rb +4 -0
  23. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
  24. data/lib/ddtrace/contrib/delayed_job/plugin.rb +4 -0
  25. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  26. data/lib/ddtrace/contrib/ethon/easy_patch.rb +22 -13
  27. data/lib/ddtrace/contrib/ethon/integration.rb +5 -0
  28. data/lib/ddtrace/contrib/excon/integration.rb +5 -0
  29. data/lib/ddtrace/contrib/excon/middleware.rb +12 -9
  30. data/lib/ddtrace/contrib/faraday/integration.rb +5 -0
  31. data/lib/ddtrace/contrib/faraday/middleware.rb +20 -32
  32. data/lib/ddtrace/contrib/faraday/patcher.rb +6 -1
  33. data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
  34. data/lib/ddtrace/contrib/grape/endpoint.rb +9 -0
  35. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +3 -0
  36. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  37. data/lib/ddtrace/contrib/http/instrumentation.rb +65 -21
  38. data/lib/ddtrace/contrib/http/integration.rb +5 -0
  39. data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
  40. data/lib/ddtrace/contrib/presto/configuration/settings.rb +8 -6
  41. data/lib/ddtrace/contrib/presto/instrumentation.rb +8 -8
  42. data/lib/ddtrace/contrib/racecar/event.rb +4 -0
  43. data/lib/ddtrace/contrib/rack/middlewares.rb +4 -0
  44. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -0
  45. data/lib/ddtrace/contrib/resque/resque_job.rb +4 -0
  46. data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -0
  47. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -0
  48. data/lib/ddtrace/contrib/sinatra/tracer.rb +3 -0
  49. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -0
  50. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +14 -0
  51. data/lib/ddtrace/correlation.rb +12 -5
  52. data/lib/ddtrace/environment.rb +4 -0
  53. data/lib/ddtrace/event.rb +52 -0
  54. data/lib/ddtrace/ext/analytics.rb +1 -0
  55. data/lib/ddtrace/ext/correlation.rb +10 -0
  56. data/lib/ddtrace/ext/environment.rb +13 -0
  57. data/lib/ddtrace/metrics.rb +7 -0
  58. data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
  59. data/lib/ddtrace/opentelemetry/span.rb +33 -0
  60. data/lib/ddtrace/span.rb +2 -1
  61. data/lib/ddtrace/tracer.rb +13 -3
  62. data/lib/ddtrace/version.rb +2 -2
  63. data/lib/ddtrace/worker.rb +20 -0
  64. data/lib/ddtrace/workers/async.rb +165 -0
  65. data/lib/ddtrace/workers/loop.rb +105 -0
  66. data/lib/ddtrace/workers/polling.rb +48 -0
  67. data/lib/ddtrace/workers/queue.rb +39 -0
  68. metadata +15 -2
@@ -10,6 +10,7 @@ services:
10
10
  - mongodb
11
11
  - mysql
12
12
  - postgres
13
+ - presto
13
14
  - redis
14
15
  env_file: ./.env
15
16
  environment:
@@ -21,6 +22,7 @@ services:
21
22
  - TEST_MONGODB_HOST=mongodb
22
23
  - TEST_MYSQL_HOST=mysql
23
24
  - TEST_POSTGRES_HOST=postgres
25
+ - TEST_PRESTO_HOST=presto
24
26
  - TEST_REDIS_HOST=redis
25
27
  stdin_open: true
26
28
  tty: true
@@ -38,6 +40,7 @@ services:
38
40
  - mongodb
39
41
  - mysql
40
42
  - postgres
43
+ - presto
41
44
  - redis
42
45
  env_file: ./.env
43
46
  environment:
@@ -49,6 +52,8 @@ services:
49
52
  - TEST_MONGODB_HOST=mongodb
50
53
  - TEST_MYSQL_HOST=mysql
51
54
  - TEST_POSTGRES_HOST=postgres
55
+ - TEST_PRESTO_HOST=presto
56
+ - TEST_PRESTO_PORT=8080
52
57
  - TEST_REDIS_HOST=redis
53
58
  stdin_open: true
54
59
  tty: true
@@ -66,6 +71,7 @@ services:
66
71
  - mongodb
67
72
  - mysql
68
73
  - postgres
74
+ - presto
69
75
  - redis
70
76
  env_file: ./.env
71
77
  environment:
@@ -77,6 +83,8 @@ services:
77
83
  - TEST_MONGODB_HOST=mongodb
78
84
  - TEST_MYSQL_HOST=mysql
79
85
  - TEST_POSTGRES_HOST=postgres
86
+ - TEST_PRESTO_HOST=presto
87
+ - TEST_PRESTO_PORT=8080
80
88
  - TEST_REDIS_HOST=redis
81
89
  stdin_open: true
82
90
  tty: true
@@ -94,6 +102,7 @@ services:
94
102
  - mongodb
95
103
  - mysql
96
104
  - postgres
105
+ - presto
97
106
  - redis
98
107
  env_file: ./.env
99
108
  environment:
@@ -105,6 +114,8 @@ services:
105
114
  - TEST_MONGODB_HOST=mongodb
106
115
  - TEST_MYSQL_HOST=mysql
107
116
  - TEST_POSTGRES_HOST=postgres
117
+ - TEST_PRESTO_HOST=presto
118
+ - TEST_PRESTO_PORT=8080
108
119
  - TEST_REDIS_HOST=redis
109
120
  stdin_open: true
110
121
  tty: true
@@ -122,6 +133,7 @@ services:
122
133
  - mongodb
123
134
  - mysql
124
135
  - postgres
136
+ - presto
125
137
  - redis
126
138
  env_file: ./.env
127
139
  environment:
@@ -133,6 +145,8 @@ services:
133
145
  - TEST_MONGODB_HOST=mongodb
134
146
  - TEST_MYSQL_HOST=mysql
135
147
  - TEST_POSTGRES_HOST=postgres
148
+ - TEST_PRESTO_HOST=presto
149
+ - TEST_PRESTO_PORT=8080
136
150
  - TEST_REDIS_HOST=redis
137
151
  stdin_open: true
138
152
  tty: true
@@ -181,6 +195,7 @@ services:
181
195
  - mongodb
182
196
  - mysql
183
197
  - postgres
198
+ - presto
184
199
  - redis
185
200
  env_file: ./.env
186
201
  environment:
@@ -192,6 +207,8 @@ services:
192
207
  - TEST_MONGODB_HOST=mongodb
193
208
  - TEST_MYSQL_HOST=mysql
194
209
  - TEST_POSTGRES_HOST=postgres
210
+ - TEST_PRESTO_HOST=presto
211
+ - TEST_PRESTO_PORT=8080
195
212
  - TEST_REDIS_HOST=redis
196
213
  stdin_open: true
197
214
  tty: true
@@ -209,6 +226,7 @@ services:
209
226
  - mongodb
210
227
  - mysql
211
228
  - postgres
229
+ - presto
212
230
  - redis
213
231
  env_file: ./.env
214
232
  environment:
@@ -220,6 +238,8 @@ services:
220
238
  - TEST_MONGODB_HOST=mongodb
221
239
  - TEST_MYSQL_HOST=mysql
222
240
  - TEST_POSTGRES_HOST=postgres
241
+ - TEST_PRESTO_HOST=presto
242
+ - TEST_PRESTO_PORT=8080
223
243
  - TEST_REDIS_HOST=redis
224
244
  stdin_open: true
225
245
  tty: true
@@ -674,6 +674,12 @@ require 'ddtrace'
674
674
 
675
675
  Datadog.configure do |c|
676
676
  c.use :ethon, options
677
+
678
+ # optionally, specify a different service name for hostnames matching a regex
679
+ c.use :ethon, describes: /user-[^.]+\.example\.com/ do |ethon|
680
+ ethon.service_name = 'user.example.com'
681
+ ethon.split_by_domain = false # Only necessary if split_by_domain is true by default
682
+ end
677
683
  end
678
684
  ```
679
685
 
@@ -684,6 +690,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
684
690
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
685
691
  | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
686
692
  | `service_name` | Service name for `ethon` instrumentation. | `'ethon'` |
693
+ | `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
687
694
  | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
688
695
 
689
696
  ### Excon
@@ -697,6 +704,12 @@ require 'ddtrace'
697
704
  # Configure default Excon tracing behavior
698
705
  Datadog.configure do |c|
699
706
  c.use :excon, options
707
+
708
+ # optionally, specify a different service name for hostnames matching a regex
709
+ c.use :excon, describes: /user-[^.]+\.example\.com/ do |excon|
710
+ excon.service_name = 'user.example.com'
711
+ excon.split_by_domain = false # Only necessary if split_by_domain is true by default
712
+ end
700
713
  end
701
714
 
702
715
  connection = Excon.new('https://example.com')
@@ -750,6 +763,12 @@ require 'ddtrace'
750
763
  # Configure default Faraday tracing behavior
751
764
  Datadog.configure do |c|
752
765
  c.use :faraday, options
766
+
767
+ # optionally, specify a different service name for hostnames matching a regex
768
+ c.use :faraday, describes: /user-[^.]+\.example\.com/ do |faraday|
769
+ faraday.service_name = 'user.example.com'
770
+ faraday.split_by_domain = false # Only necessary if split_by_domain is true by default
771
+ end
753
772
  end
754
773
 
755
774
  # Configure Faraday tracing behavior for single connection
@@ -991,6 +1010,12 @@ require 'ddtrace'
991
1010
 
992
1011
  Datadog.configure do |c|
993
1012
  c.use :http, options
1013
+
1014
+ # optionally, specify a different service name for hostnames matching a regex
1015
+ c.use :http, describes: /user-[^.]+\.example\.com/ do |http|
1016
+ http.service_name = 'user.example.com'
1017
+ http.split_by_domain = false # Only necessary if split_by_domain is true by default
1018
+ end
994
1019
  end
995
1020
 
996
1021
  Net::HTTP.start('127.0.0.1', 8080) do |http|
@@ -1008,6 +1033,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1008
1033
  | `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
1009
1034
  | `distributed_tracing` | Enables [distributed tracing](#distributed-tracing) | `true` |
1010
1035
  | `service_name` | Service name used for `http` instrumentation | `'net/http'` |
1036
+ | `split_by_domain` | Uses the request domain as the service name when set to `true`. | `false` |
1011
1037
  | `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
1012
1038
 
1013
1039
  If you wish to configure each connection object individually, you may use the `Datadog.configure` as it follows:
@@ -1565,11 +1591,21 @@ Datadog::Logger.log.info { "this is typically called by tracing code" }
1565
1591
 
1566
1592
  By default, the trace agent (not this library, but the program running in the background collecting data from various clients) uses the tags set in the agent config file, see our [environments tutorial](https://app.datadoghq.com/apm/docs/tutorials/environments) for details.
1567
1593
 
1568
- These values can be overridden at the tracer level:
1594
+ You can configure the application to automatically tag your traces and metrics, using the following environment variables:
1595
+
1596
+ - `DD_ENV`: Your application environment (e.g. `production`, `staging`, etc.)
1597
+ - `DD_VERSION`: Your application version (e.g. `2.5`, `202003181415`, `1.3-alpha`, etc.)
1598
+ - `DD_TAGS`: Custom tags in value pairs separated by `,` (e.g. `layer:api,team:intake`)
1599
+ - If `DD_ENV` or `DD_VERSION`, it will override any `env` or `version` tag defined in `DD_TAGS`.
1600
+
1601
+ These values can also be overridden at the tracer level:
1569
1602
 
1570
1603
  ```ruby
1571
1604
  Datadog.configure do |c|
1572
- c.tracer tags: { 'env' => 'prod' }
1605
+ c.service = 'billing-api'
1606
+ c.env = 'test'
1607
+ c.tags = { 'team' => 'qa' }
1608
+ c.version = '1.3-alpha'
1573
1609
  end
1574
1610
  ```
1575
1611
 
@@ -1863,6 +1899,8 @@ Datadog.tracer.trace('correlation.example') do
1863
1899
  correlation = Datadog.tracer.active_correlation
1864
1900
  correlation.trace_id # => 5963550561812073440
1865
1901
  correlation.span_id # => 2232727802607726424
1902
+ correlation.env # => 'production' (derived from DD_ENV)
1903
+ correlation.version # => '2.5.17' (derived from DD_VERSION)
1866
1904
  end
1867
1905
 
1868
1906
  # When a trace isn't active...
@@ -1871,6 +1909,8 @@ correlation = Datadog.tracer.active_correlation
1871
1909
  correlation = Datadog.tracer.active_correlation
1872
1910
  correlation.trace_id # => 0
1873
1911
  correlation.span_id # => 0
1912
+ correlation.trace_id # => nil
1913
+ correlation.span_id # => nil
1874
1914
  ```
1875
1915
 
1876
1916
  #### For logging in Rails applications using Lograge (recommended)
@@ -1887,7 +1927,9 @@ config.lograge.custom_options = lambda do |event|
1887
1927
  :dd => {
1888
1928
  # To preserve precision during JSON serialization, use strings for large numbers
1889
1929
  :trace_id => correlation.trace_id.to_s,
1890
- :span_id => correlation.span_id.to_s
1930
+ :span_id => correlation.span_id.to_s,
1931
+ :env => correlation.env.to_s,
1932
+ :version => correlation.version.to_s
1891
1933
  },
1892
1934
  :ddsource => ["ruby"],
1893
1935
  :params => event.payload[:params].reject { |k| %w(controller action).include? k }
@@ -1906,11 +1948,15 @@ Rails.application.configure do
1906
1948
  config.log_tags = [proc { Datadog.tracer.active_correlation.to_s }]
1907
1949
  end
1908
1950
 
1951
+ # Given:
1952
+ # DD_ENV = 'production' (The name of the environment your application is running in.)
1953
+ # DD_VERSION = '2.5.17' (The version of your application.)
1954
+
1909
1955
  # Web requests will produce:
1910
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206] Started GET "/articles" for 172.22.0.1 at 2019-01-16 18:50:57 +0000
1911
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206] Processing by ArticlesController#index as */*
1912
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206] Article Load (0.5ms) SELECT "articles".* FROM "articles"
1913
- # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206] Completed 200 OK in 7ms (Views: 5.5ms | ActiveRecord: 0.5ms)
1956
+ # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Started GET "/articles" for 172.22.0.1 at 2019-01-16 18:50:57 +0000
1957
+ # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Processing by ArticlesController#index as */*
1958
+ # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Article Load (0.5ms) SELECT "articles".* FROM "articles"
1959
+ # [dd.trace_id=7110975754844687674 dd.span_id=7518426836986654206 dd.env=production dd.version=2.5.17] Completed 200 OK in 7ms (Views: 5.5ms | ActiveRecord: 0.5ms)
1914
1960
  ```
1915
1961
 
1916
1962
  #### For logging in Ruby applications
@@ -1921,8 +1967,12 @@ To properly correlate with Datadog logging, be sure the following is present in
1921
1967
 
1922
1968
  - `dd.trace_id=<TRACE_ID>`: Where `<TRACE_ID>` is equal to `Datadog.tracer.active_correlation.trace_id` or `0` if no trace is active during logging.
1923
1969
  - `dd.span_id=<SPAN_ID>`: Where `<SPAN_ID>` is equal to `Datadog.tracer.active_correlation.span_id` or `0` if no trace is active during logging.
1970
+ - `dd.env=<ENV>`: Where `<ENV>` is equal to `Datadog.tracer.active_correlation.env` or empty string (no quotes) if no environment name is configured.
1971
+ - `dd.version=<SPAN_ID>`: Where `<SPAN_ID>` is equal to `Datadog.tracer.active_correlation.version` or empty string (no quotes) if no application version is configured.
1972
+
1973
+ By default, `Datadog::Correlation::Identifier#to_s` will return `dd.trace_id=<TRACE_ID> dd.span_id=<SPAN_ID> dd.env=<ENV> dd.version=<VERSION>`.
1924
1974
 
1925
- By default, `Datadog::Correlation::Identifier#to_s` will return `dd.trace_id=<TRACE_ID> dd.span_id=<SPAN_ID>`.
1975
+ If a trace is not active and the application environment & version is not configured, it will return `dd.trace_id=0 dd.span_id=0 dd.env= dd.version=`.
1926
1976
 
1927
1977
  An example of this in practice:
1928
1978
 
@@ -1930,6 +1980,9 @@ An example of this in practice:
1930
1980
  require 'ddtrace'
1931
1981
  require 'logger'
1932
1982
 
1983
+ ENV['DD_ENV'] = 'production'
1984
+ ENV['DD_VERSION'] = '2.5.17'
1985
+
1933
1986
  logger = Logger.new(STDOUT)
1934
1987
  logger.progname = 'my_app'
1935
1988
  logger.formatter = proc do |severity, datetime, progname, msg|
@@ -1938,11 +1991,11 @@ end
1938
1991
 
1939
1992
  # When no trace is active
1940
1993
  logger.warn('This is an untraced operation.')
1941
- # [2019-01-16 18:38:41 +0000][my_app][WARN][dd.trace_id=0 dd.span_id=0] This is an untraced operation.
1994
+ # [2019-01-16 18:38:41 +0000][my_app][WARN][dd.trace_id=0 dd.span_id=0 dd.env=production dd.version=2.5.17] This is an untraced operation.
1942
1995
 
1943
1996
  # When a trace is active
1944
1997
  Datadog.tracer.trace('my.operation') { logger.warn('This is a traced operation.') }
1945
- # [2019-01-16 18:38:41 +0000][my_app][WARN][dd.trace_id=8545847825299552251 dd.span_id=3711755234730770098] This is a traced operation.
1998
+ # [2019-01-16 18:38:41 +0000][my_app][WARN][dd.trace_id=8545847825299552251 dd.span_id=3711755234730770098 dd.env=production dd.version=2.5.17] This is a traced operation.
1946
1999
  ```
1947
2000
 
1948
2001
  ### Configuring the transport layer
@@ -27,6 +27,10 @@ module Datadog
27
27
  require 'ddtrace/contrib/extensions'
28
28
  extend Contrib::Extensions
29
29
 
30
+ # Load and extend OpenTelemetry compatibility by default
31
+ require 'ddtrace/opentelemetry/extensions'
32
+ extend OpenTelemetry::Extensions
33
+
30
34
  # Add shutdown hook:
31
35
  # Ensures the tracer has an opportunity to flush traces
32
36
  # and cleanup before terminating the process.
@@ -8,6 +8,13 @@ module Datadog
8
8
  return if span.nil? || !sample_rate.is_a?(Numeric)
9
9
  span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
10
10
  end
11
+
12
+ def set_measured(span, value = true)
13
+ return if span.nil?
14
+ # rubocop:disable Style/MultipleComparison
15
+ value = value == true || value == 1 ? 1 : 0
16
+ span.set_metric(Datadog::Ext::Analytics::TAG_MEASURED, value)
17
+ end
11
18
  end
12
19
 
13
20
  # Extension for Datadog::Span
@@ -7,6 +7,7 @@ module Datadog
7
7
  module Base
8
8
  def self.included(base)
9
9
  base.send(:extend, Datadog::Environment::Helpers)
10
+ base.send(:include, Datadog::Environment::Helpers)
10
11
  base.send(:include, Options)
11
12
 
12
13
  base.send(:extend, ClassMethods)
@@ -23,7 +24,7 @@ module Datadog
23
24
  settings_class = new_settings_class(&block)
24
25
 
25
26
  option(name) do |o|
26
- o.default -> { settings_class.new }
27
+ o.default { settings_class.new }
27
28
  o.lazy
28
29
  o.resetter do |value|
29
30
  value.reset! if value.respond_to?(:reset!)
@@ -26,7 +26,7 @@ module Datadog
26
26
  elsif definition.delegate_to
27
27
  context_eval(&definition.delegate_to)
28
28
  else
29
- set(definition.default_value)
29
+ set(default_value)
30
30
  end
31
31
  end
32
32
 
@@ -42,6 +42,14 @@ module Datadog
42
42
  end
43
43
  end
44
44
 
45
+ def default_value
46
+ if definition.lazy
47
+ context_eval(&definition.default)
48
+ else
49
+ definition.default
50
+ end
51
+ end
52
+
45
53
  private
46
54
 
47
55
  def context_exec(*args, &block)
@@ -27,10 +27,6 @@ module Datadog
27
27
  @setter = meta[:setter] || block || IDENTITY
28
28
  end
29
29
 
30
- def default_value
31
- lazy ? @default.call : @default
32
- end
33
-
34
30
  # Creates a new Option, bound to the context provided.
35
31
  def build(context)
36
32
  Option.new(self, context)
@@ -19,18 +19,21 @@ module Datadog
19
19
  # Configuration options
20
20
  #
21
21
  option :analytics_enabled do |o|
22
+ # TODO: Raise deprecation warning
22
23
  o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
23
24
  o.lazy
24
25
  end
25
26
 
26
- option :report_hostname do |o|
27
- o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
28
- o.lazy
29
- end
27
+ settings :diagnostics do
28
+ option :health_metrics do |o|
29
+ o.default do
30
+ Datadog::Diagnostics::Health::Metrics.new(
31
+ enabled: env_to_bool(Datadog::Ext::Diagnostics::Health::Metrics::ENV_ENABLED, false)
32
+ )
33
+ end
30
34
 
31
- option :runtime_metrics_enabled do |o|
32
- o.default { env_to_bool(Ext::Runtime::Metrics::ENV_ENABLED, false) }
33
- o.lazy
35
+ o.lazy
36
+ end
34
37
  end
35
38
 
36
39
  settings :distributed_tracing do
@@ -57,6 +60,31 @@ module Datadog
57
60
  end
58
61
  end
59
62
 
63
+ option :env do |o|
64
+ o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
65
+ o.lazy
66
+ end
67
+
68
+ option :report_hostname do |o|
69
+ o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
70
+ o.lazy
71
+ end
72
+
73
+ # Backwards compatibility for configuring runtime metrics e.g. `c.runtime_metrics enabled: true`
74
+ def runtime_metrics(options = nil)
75
+ runtime_metrics = get_option(:tracer).writer.runtime_metrics
76
+ return runtime_metrics if options.nil?
77
+
78
+ # TODO: Raise deprecation warning
79
+ runtime_metrics.configure(options)
80
+ end
81
+
82
+ option :runtime_metrics_enabled do |o|
83
+ # TODO: Raise deprecation warning
84
+ o.default { env_to_bool(Ext::Runtime::Metrics::ENV_ENABLED, false) }
85
+ o.lazy
86
+ end
87
+
60
88
  settings :sampling do
61
89
  option :default_rate do |o|
62
90
  o.default { env_to_float(Ext::Sampling::ENV_SAMPLE_RATE, nil) }
@@ -69,16 +97,29 @@ module Datadog
69
97
  end
70
98
  end
71
99
 
72
- settings :diagnostics do
73
- option :health_metrics do |o|
74
- o.default do
75
- Datadog::Diagnostics::Health::Metrics.new(
76
- enabled: env_to_bool(Datadog::Ext::Diagnostics::Health::Metrics::ENV_ENABLED, false)
77
- )
100
+ option :service do |o|
101
+ o.default { ENV.fetch(Ext::Environment::ENV_SERVICE, nil) }
102
+ o.lazy
103
+ end
104
+
105
+ option :tags do |o|
106
+ o.default do
107
+ tags = {}
108
+
109
+ # Parse tags from environment
110
+ env_to_list(Ext::Environment::ENV_TAGS).each do |tag|
111
+ pair = tag.split(':')
112
+ tags[pair.first] = pair.last if pair.length == 2
78
113
  end
79
114
 
80
- o.lazy
115
+ # Override tags if defined
116
+ tags[Ext::Environment::TAG_ENV] = env unless env.nil?
117
+ tags[Ext::Environment::TAG_VERSION] = version unless version.nil?
118
+
119
+ tags
81
120
  end
121
+
122
+ o.lazy
82
123
  end
83
124
 
84
125
  option :tracer do |o|
@@ -99,20 +140,34 @@ module Datadog
99
140
  tracer.tap do |t|
100
141
  unless options.nil?
101
142
  t.configure(options)
102
- Datadog::Logger.log = options[:log] if options[:log]
103
- t.set_tags(options[:tags]) if options[:tags]
104
- t.set_tags(env: options[:env]) if options[:env]
105
- Datadog::Logger.debug_logging = options.fetch(:debug, false)
143
+
144
+ if options[:log]
145
+ # TODO: Raise deprecation warning
146
+ Datadog::Logger.log = options[:log]
147
+ end
148
+
149
+ if options[:tags]
150
+ # TODO: Raise deprecation warning
151
+ t.set_tags(options[:tags])
152
+ end
153
+
154
+ if options[:env]
155
+ # TODO: Raise deprecation warning
156
+ t.set_tags(env: options[:env])
157
+ end
158
+
159
+ if options.key?(:debug)
160
+ # TODO: Raise deprecation warning
161
+ Datadog::Logger.debug_logging = options[:debug]
162
+ end
106
163
  end
107
164
  end
108
165
  end
109
166
  end
110
167
 
111
- def runtime_metrics(options = nil)
112
- runtime_metrics = get_option(:tracer).writer.runtime_metrics
113
- return runtime_metrics if options.nil?
114
-
115
- runtime_metrics.configure(options)
168
+ option :version do |o|
169
+ o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
170
+ o.lazy
116
171
  end
117
172
  end
118
173
  end