ddtrace 0.33.1 → 0.34.0
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 +4 -4
- data/.circleci/config.yml +3 -0
- data/Appraisals +29 -5
- data/CHANGELOG.md +23 -1
- data/Rakefile +72 -11
- data/docker-compose.yml +20 -0
- data/docs/GettingStarted.md +63 -10
- data/lib/ddtrace.rb +4 -0
- data/lib/ddtrace/analytics.rb +7 -0
- data/lib/ddtrace/configuration/base.rb +2 -1
- data/lib/ddtrace/configuration/option.rb +9 -1
- data/lib/ddtrace/configuration/option_definition.rb +0 -4
- data/lib/ddtrace/configuration/settings.rb +78 -23
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +3 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +3 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +3 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +3 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +6 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +3 -0
- data/lib/ddtrace/contrib/analytics.rb +4 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +4 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +22 -13
- data/lib/ddtrace/contrib/ethon/integration.rb +5 -0
- data/lib/ddtrace/contrib/excon/integration.rb +5 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +12 -9
- data/lib/ddtrace/contrib/faraday/integration.rb +5 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +20 -32
- data/lib/ddtrace/contrib/faraday/patcher.rb +6 -1
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +9 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +3 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +65 -21
- data/lib/ddtrace/contrib/http/integration.rb +5 -0
- data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/presto/instrumentation.rb +8 -8
- data/lib/ddtrace/contrib/racecar/event.rb +4 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +4 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +4 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +4 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +3 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +14 -0
- data/lib/ddtrace/correlation.rb +12 -5
- data/lib/ddtrace/environment.rb +4 -0
- data/lib/ddtrace/event.rb +52 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/correlation.rb +10 -0
- data/lib/ddtrace/ext/environment.rb +13 -0
- data/lib/ddtrace/metrics.rb +7 -0
- data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
- data/lib/ddtrace/opentelemetry/span.rb +33 -0
- data/lib/ddtrace/span.rb +2 -1
- data/lib/ddtrace/tracer.rb +13 -3
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/worker.rb +20 -0
- data/lib/ddtrace/workers/async.rb +165 -0
- data/lib/ddtrace/workers/loop.rb +105 -0
- data/lib/ddtrace/workers/polling.rb +48 -0
- data/lib/ddtrace/workers/queue.rb +39 -0
- metadata +15 -2
data/docker-compose.yml
CHANGED
@@ -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
|
data/docs/GettingStarted.md
CHANGED
@@ -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
|
-
|
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.
|
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
|
-
|
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
|
data/lib/ddtrace.rb
CHANGED
@@ -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.
|
data/lib/ddtrace/analytics.rb
CHANGED
@@ -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
|
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(
|
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)
|
@@ -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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
32
|
-
|
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
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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
|
-
|
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
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
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
|
-
|
112
|
-
|
113
|
-
|
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
|