ddtrace 0.39.0 → 0.40.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +56 -0
- data/.gitlab-ci.yml +1 -0
- data/.simplecov +38 -0
- data/Appraisals +87 -1
- data/CHANGELOG.md +63 -1
- data/Rakefile +500 -465
- data/ddtrace.gemspec +1 -0
- data/docs/DevelopmentGuide.md +16 -0
- data/docs/GettingStarted.md +49 -32
- data/lib/ddtrace.rb +1 -0
- data/lib/ddtrace/configuration.rb +36 -5
- data/lib/ddtrace/configuration/components.rb +4 -7
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -7
- data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +56 -0
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +2 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +15 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
- data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers/async.rb +2 -2
- data/lib/ddtrace/workers/loop.rb +1 -1
- data/lib/ddtrace/workers/polling.rb +1 -1
- metadata +67 -31
data/ddtrace.gemspec
CHANGED
@@ -67,5 +67,6 @@ Gem::Specification.new do |spec|
|
|
67
67
|
spec.add_development_dependency 'redcarpet', '~> 3.4' if RUBY_PLATFORM != 'java'
|
68
68
|
spec.add_development_dependency 'pry', '~> 0.10.4'
|
69
69
|
spec.add_development_dependency 'pry-stack_explorer', '~> 0.4.9.2'
|
70
|
+
spec.add_development_dependency 'simplecov', '~> 0.17'
|
70
71
|
spec.add_development_dependency 'warning', '~> 1' if RUBY_VERSION >= '2.5.0'
|
71
72
|
end
|
data/docs/DevelopmentGuide.md
CHANGED
@@ -98,6 +98,22 @@ $ bundle exec appraisal contrib rake spec:redis'[--seed,1234]'
|
|
98
98
|
|
99
99
|
This can be useful for replicating conditions from CI or isolating certain tests.
|
100
100
|
|
101
|
+
**Checking test coverage**
|
102
|
+
|
103
|
+
You can check test code coverage by creating a report _after_ running a test suite:
|
104
|
+
```
|
105
|
+
# Run the desired test suite
|
106
|
+
$ bundle exec appraisal contrib rake spec:redis
|
107
|
+
# Generate report for the suite executed
|
108
|
+
$ bundle exec rake coverage:report
|
109
|
+
```
|
110
|
+
|
111
|
+
A webpage will be generated at `coverage/report/index.html` with the resulting report.
|
112
|
+
|
113
|
+
Because you are likely not running all tests locally, your report will contain partial coverage results.
|
114
|
+
You *must* check the CI step `coverage` for the complete test coverage report, ensuring coverage is not
|
115
|
+
decreased.
|
116
|
+
|
101
117
|
### Checking code quality
|
102
118
|
|
103
119
|
**Linting**
|
data/docs/GettingStarted.md
CHANGED
@@ -43,11 +43,12 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
43
43
|
- [Grape](#grape)
|
44
44
|
- [GraphQL](#graphql)
|
45
45
|
- [gRPC](#grpc)
|
46
|
-
- [http.rb](#http
|
46
|
+
- [http.rb](#http-rb)
|
47
47
|
- [MongoDB](#mongodb)
|
48
48
|
- [MySQL2](#mysql2)
|
49
49
|
- [Net/HTTP](#net-http)
|
50
50
|
- [Presto](#presto)
|
51
|
+
- [Que](#que)
|
51
52
|
- [Racecar](#racecar)
|
52
53
|
- [Rack](#rack)
|
53
54
|
- [Rails](#rails)
|
@@ -92,8 +93,8 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
|
|
92
93
|
| | | 2.2 | Full | Latest |
|
93
94
|
| | | 2.1 | Full | Latest |
|
94
95
|
| | | 2.0 | Full | Latest |
|
95
|
-
| | | 1.9.3 |
|
96
|
-
| | | 1.9.1 |
|
96
|
+
| | | 1.9.3 | EOL since August 6th, 2020 | < 0.27.0 |
|
97
|
+
| | | 1.9.1 | EOL since August 6th, 2020 | < 0.27.0 |
|
97
98
|
| JRuby | https://www.jruby.org | 9.2 | Full | Latest |
|
98
99
|
|
99
100
|
**Supported web servers**:
|
@@ -346,12 +347,13 @@ For a list of available integrations, and their configuration options, please re
|
|
346
347
|
| Grape | `grape` | `>= 1.0` | `>= 1.0` | *[Link](#grape)* | *[Link](https://github.com/ruby-grape/grape)* |
|
347
348
|
| GraphQL | `graphql` | `>= 1.7.9` | `>= 1.7.9` | *[Link](#graphql)* | *[Link](https://github.com/rmosolgo/graphql-ruby)* |
|
348
349
|
| gRPC | `grpc` | `>= 1.7` | *gem not available* | *[Link](#grpc)* | *[Link](https://github.com/grpc/grpc/tree/master/src/rubyc)* |
|
349
|
-
| http.rb | `httprb` | `>= 2.0` | `>= 2.0` | *[Link](#http
|
350
|
+
| http.rb | `httprb` | `>= 2.0` | `>= 2.0` | *[Link](#http-rb)* | *[Link](https://github.com/httprb/http)* |
|
350
351
|
| Kafka | `ruby-kafka` | `>= 0.7.10` | `>= 0.7.10` | *[Link](#kafka)* | *[Link](https://github.com/zendesk/ruby-kafka)* |
|
351
352
|
| MongoDB | `mongo` | `>= 2.1` | `>= 2.1` | *[Link](#mongodb)* | *[Link](https://github.com/mongodb/mongo-ruby-driver)* |
|
352
353
|
| MySQL2 | `mysql2` | `>= 0.3.21` | *gem not available* | *[Link](#mysql2)* | *[Link](https://github.com/brianmario/mysql2)* |
|
353
354
|
| Net/HTTP | `http` | *(Any supported Ruby)* | *(Any supported Ruby)* | *[Link](#nethttp)* | *[Link](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html)* |
|
354
355
|
| Presto | `presto` | `>= 0.5.14` | `>= 0.5.14` | *[Link](#presto)* | *[Link](https://github.com/treasure-data/presto-client-ruby)* |
|
356
|
+
| Que | `que` | `>= 1.0.0.beta2` | `>= 1.0.0.beta2` | *[Link](#que)* | *[Link](https://github.com/que-rb/que)* |
|
355
357
|
| Racecar | `racecar` | `>= 0.3.5` | `>= 0.3.5` | *[Link](#racecar)* | *[Link](https://github.com/zendesk/racecar)* |
|
356
358
|
| Rack | `rack` | `>= 1.1` | `>= 1.1` | *[Link](#rack)* | *[Link](https://github.com/rack/rack)* |
|
357
359
|
| Rails | `rails` | `>= 3.0` | `>= 3.0` | *[Link](#rails)* | *[Link](https://github.com/rails/rails)* |
|
@@ -1110,6 +1112,30 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1110
1112
|
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1111
1113
|
| `service_name` | Service name used for `presto` instrumentation | `'presto'` |
|
1112
1114
|
|
1115
|
+
### Que
|
1116
|
+
|
1117
|
+
The Que integration is a middleware which will trace job executions.
|
1118
|
+
|
1119
|
+
You can enable it through `Datadog.configure`:
|
1120
|
+
|
1121
|
+
```ruby
|
1122
|
+
require 'ddtrace'
|
1123
|
+
|
1124
|
+
Datadog.configure do |c|
|
1125
|
+
c.use :que, options
|
1126
|
+
end
|
1127
|
+
```
|
1128
|
+
|
1129
|
+
Where `options` is an optional `Hash` that accepts the following parameters:
|
1130
|
+
|
1131
|
+
| Key | Description | Default |
|
1132
|
+
| --- | ----------- | ------- |
|
1133
|
+
| `analytics_enabled` | Enable analytics for spans produced by this integration. `true` for on, `nil` to defer to global setting, `false` for off. | `false` |
|
1134
|
+
| `enabled` | Defines whether Que should be traced. Useful for temporarily disabling tracing. `true` or `false` | `true` |
|
1135
|
+
| `service_name` | Service name used for `que` instrumentation | `'que'` |
|
1136
|
+
| `tag_args` | Enable tagging of a job's args field. `true` for on, `false` for off. | `false` |
|
1137
|
+
| `tag_data` | Enable tagging of a job's data field. `true` for on, `false` for off. | `false` |
|
1138
|
+
|
1113
1139
|
### Racecar
|
1114
1140
|
|
1115
1141
|
The Racecar integration provides tracing for Racecar jobs.
|
@@ -1172,7 +1198,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1172
1198
|
| `service_name` | Service name used for `rack` instrumentation | `'rack'` |
|
1173
1199
|
| `web_service_name` | Service name for frontend server request queuing spans. (e.g. `'nginx'`) | `'web-server'` |
|
1174
1200
|
|
1175
|
-
|
1176
1201
|
**Configuring URL quantization behavior**
|
1177
1202
|
|
1178
1203
|
```ruby
|
@@ -1232,6 +1257,7 @@ Where `options` is an optional `Hash` that accepts the following parameters:
|
|
1232
1257
|
| `middleware_names` | Enables any short-circuited middleware requests to display the middleware name as a resource for the trace. | `false` |
|
1233
1258
|
| `service_name` | Service name used when tracing application requests (on the `rack` level) | `'<app_name>'` (inferred from your Rails application namespace) |
|
1234
1259
|
| `template_base_path` | Used when the template name is parsed. If you don't store your templates in the `views/` folder, you may need to change this value | `'views/'` |
|
1260
|
+
| `log_injection` | Automatically enables injection [Trace Correlation](#trace-correlation) information, such as `dd.trace_id`, into Rails logs. Supports the default logger (`ActiveSupport::TaggedLogging`) and `Lograge`. Details on the format of Trace Correlation information can be found in the [Trace Correlation](#trace-correlation) section. | `false` |
|
1235
1261
|
|
1236
1262
|
**Supported versions**
|
1237
1263
|
|
@@ -1721,6 +1747,7 @@ Other Environment Variables:
|
|
1721
1747
|
- `DD_TRACE_<INTEGRATION>_ENABLED`: Enables or disables an **activated** integration. Defaults to `true`.. e.g. `DD_TRACE_RAILS_ENABLED=false`. This option has no effects on integrations that have not been explicitly activated (e.g. `Datadog.configure{ |c| c.use :integration }`).on code. This environment variable can only be used to disable an integration.
|
1722
1748
|
- `DD_TRACE_<INTEGRATION>_ANALYTICS_ENABLED`: Enables or disable App Analytics for a specific integration. Valid values are: true or false (default). e.g. `DD_TRACE_ACTION_CABLE_ANALYTICS_ENABLED=true`.
|
1723
1749
|
- `DD_TRACE_<INTEGRATION>_ANALYTICS_SAMPLE_RATE`: Sets the App Analytics sampling rate for a specific integration. A floating number between 0.0 and 1.0 (default). e.g. `DD_TRACE_ACTION_CABLE_ANALYTICS_SAMPLE_RATE=0.5`.
|
1750
|
+
- `DD_LOGS_INJECTION`: Automatically enables injection [Trace Correlation](#trace-correlation) information, such as `dd.trace_id`, into Rails logs. Supports the default logger (`ActiveSupport::TaggedLogging`) and `Lograge`. Details on the format of Trace Correlation information can be found in the [Trace Correlation](#trace-correlation) section. Valid values are: `true` or `false`(default). e.g. `DD_LOGS_INJECTION=true`.
|
1724
1751
|
|
1725
1752
|
### Sampling
|
1726
1753
|
|
@@ -1887,7 +1914,7 @@ For more details on how to activate distributed tracing for integrations, see th
|
|
1887
1914
|
- [Rack](#rack)
|
1888
1915
|
- [Rails](#rails)
|
1889
1916
|
- [Sinatra](#sinatra)
|
1890
|
-
- [http.rb](#http
|
1917
|
+
- [http.rb](#http-rb)
|
1891
1918
|
|
1892
1919
|
**Using the HTTP propagator**
|
1893
1920
|
|
@@ -2001,34 +2028,26 @@ Datadog::Pipeline.before_flush(
|
|
2001
2028
|
|
2002
2029
|
### Trace correlation
|
2003
2030
|
|
2004
|
-
In many cases, such as logging, it may be useful to correlate trace IDs to other events or data streams, for easier cross-referencing.
|
2031
|
+
In many cases, such as logging, it may be useful to correlate trace IDs to other events or data streams, for easier cross-referencing.
|
2032
|
+
|
2033
|
+
#### For logging in Rails applications
|
2034
|
+
|
2035
|
+
##### Automatic
|
2036
|
+
|
2037
|
+
For Rails applications using the default logger (`ActiveSupport::TaggedLogging`) or `lograge`, you can automatically enable trace correlation injection by setting the `rails` instrumentation configuration option `log_injection` to `true` or by setting environment variable `DD_LOGS_INJECTION=true`:
|
2005
2038
|
|
2006
2039
|
```ruby
|
2007
|
-
#
|
2008
|
-
|
2009
|
-
# Returns #<Datadog::Correlation::Identifier>
|
2010
|
-
correlation = Datadog.tracer.active_correlation
|
2011
|
-
correlation.trace_id # => 5963550561812073440
|
2012
|
-
correlation.span_id # => 2232727802607726424
|
2013
|
-
correlation.env # => 'production' (derived from DD_ENV)
|
2014
|
-
correlation.service # => 'billing-api' (derived from DD_SERVICE)
|
2015
|
-
correlation.version # => '2.5.17' (derived from DD_VERSION)
|
2016
|
-
end
|
2040
|
+
# config/initializers/datadog.rb
|
2041
|
+
require 'ddtrace'
|
2017
2042
|
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
correlation = Datadog.tracer.active_correlation
|
2022
|
-
correlation.trace_id # => 0
|
2023
|
-
correlation.span_id # => 0
|
2024
|
-
correlation.env # => 'production' (derived from DD_ENV)
|
2025
|
-
correlation.service # => 'billing-api' (derived from DD_SERVICE)
|
2026
|
-
correlation.version # => '2.5.17' (derived from DD_VERSION)
|
2043
|
+
Datadog.configure do |c|
|
2044
|
+
c.use :rails, log_injection: true
|
2045
|
+
end
|
2027
2046
|
```
|
2028
2047
|
|
2029
|
-
|
2048
|
+
##### Manual (Lograge)
|
2030
2049
|
|
2031
|
-
After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs
|
2050
|
+
After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), manually modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs.
|
2032
2051
|
|
2033
2052
|
```ruby
|
2034
2053
|
config.lograge.custom_options = lambda do |event|
|
@@ -2051,11 +2070,9 @@ config.lograge.custom_options = lambda do |event|
|
|
2051
2070
|
end
|
2052
2071
|
```
|
2053
2072
|
|
2054
|
-
|
2055
|
-
|
2056
|
-
Rails applications which are configured with an `ActiveSupport::TaggedLogging` logger can append correlation IDs as tags to log output. The default Rails logger implements this tagged logging, making it easier to add correlation tags.
|
2073
|
+
##### Manual (ActiveSupport::TaggedLogging)
|
2057
2074
|
|
2058
|
-
|
2075
|
+
Rails applications which are configured with the default `ActiveSupport::TaggedLogging` logger can append correlation IDs as tags to log output. To enable Trace Correlation with `ActiveSupport::TaggedLogging`, in your Rails environment configuration file, add the following:
|
2059
2076
|
|
2060
2077
|
```ruby
|
2061
2078
|
Rails.application.configure do
|
data/lib/ddtrace.rb
CHANGED
@@ -59,6 +59,7 @@ require 'ddtrace/contrib/httprb/integration'
|
|
59
59
|
require 'ddtrace/contrib/integration'
|
60
60
|
require 'ddtrace/contrib/kafka/integration'
|
61
61
|
require 'ddtrace/contrib/presto/integration'
|
62
|
+
require 'ddtrace/contrib/que/integration'
|
62
63
|
require 'ddtrace/contrib/mysql2/integration'
|
63
64
|
require 'ddtrace/contrib/mongodb/integration'
|
64
65
|
require 'ddtrace/contrib/racecar/integration'
|
@@ -22,9 +22,9 @@ module Datadog
|
|
22
22
|
# Build immutable components from settings
|
23
23
|
@components ||= nil
|
24
24
|
@components = if @components
|
25
|
-
|
25
|
+
replace_components!(target, @components)
|
26
26
|
else
|
27
|
-
|
27
|
+
build_components(target)
|
28
28
|
end
|
29
29
|
|
30
30
|
target
|
@@ -36,18 +36,49 @@ module Datadog
|
|
36
36
|
def_delegators \
|
37
37
|
:components,
|
38
38
|
:health_metrics,
|
39
|
-
:logger,
|
40
39
|
:runtime_metrics,
|
41
40
|
:tracer
|
42
41
|
|
42
|
+
def logger
|
43
|
+
if instance_variable_defined?(:@components) && @components
|
44
|
+
@temp_logger = nil
|
45
|
+
components.logger
|
46
|
+
else
|
47
|
+
# Use default logger without initializing components.
|
48
|
+
# This prevents recursive loops while initializing.
|
49
|
+
# e.g. Get logger --> Build components --> Log message --> Repeat...
|
50
|
+
@temp_logger ||= begin
|
51
|
+
logger = configuration.logger.instance || Datadog::Logger.new(STDOUT)
|
52
|
+
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
53
|
+
logger
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
43
58
|
def shutdown!
|
44
|
-
components.
|
59
|
+
components.shutdown! if instance_variable_defined?(:@components) && @components
|
45
60
|
end
|
46
61
|
|
47
62
|
protected
|
48
63
|
|
49
64
|
def components
|
50
|
-
@components ||=
|
65
|
+
@components ||= build_components(configuration)
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def build_components(settings)
|
71
|
+
components = Components.new(settings)
|
72
|
+
components.startup!(settings)
|
73
|
+
components
|
74
|
+
end
|
75
|
+
|
76
|
+
def replace_components!(settings, old)
|
77
|
+
components = Components.new(settings)
|
78
|
+
|
79
|
+
old.shutdown!(components)
|
80
|
+
components.startup!(settings)
|
81
|
+
components
|
51
82
|
end
|
52
83
|
end
|
53
84
|
end
|
@@ -10,12 +10,6 @@ module Datadog
|
|
10
10
|
# rubocop:disable Metrics/LineLength
|
11
11
|
class Components
|
12
12
|
class << self
|
13
|
-
def replace!(old, settings)
|
14
|
-
replacement = new(settings)
|
15
|
-
old.teardown!(replacement)
|
16
|
-
replacement
|
17
|
-
end
|
18
|
-
|
19
13
|
def build_health_metrics(settings)
|
20
14
|
settings = settings.diagnostics.health_metrics
|
21
15
|
options = { enabled: settings.enabled }
|
@@ -118,10 +112,13 @@ module Datadog
|
|
118
112
|
@health_metrics = self.class.build_health_metrics(settings)
|
119
113
|
end
|
120
114
|
|
115
|
+
# Starts up components
|
116
|
+
def startup!(settings); end
|
117
|
+
|
121
118
|
# Shuts down all the components in use.
|
122
119
|
# If it has another instance to compare to, it will compare
|
123
120
|
# and avoid tearing down parts still in use.
|
124
|
-
def
|
121
|
+
def shutdown!(replacement = nil)
|
125
122
|
# Shutdown the old tracer, unless it's still being used.
|
126
123
|
# (e.g. a custom tracer instance passed in.)
|
127
124
|
tracer.shutdown! unless replacement && tracer == replacement.tracer
|
@@ -66,13 +66,6 @@ module Datadog
|
|
66
66
|
span.status = 1 if status.starts_with?('5')
|
67
67
|
elsif Utils.exception_is_error?(exception)
|
68
68
|
span.set_error(exception)
|
69
|
-
|
70
|
-
# Some exception gets handled by Rails middleware before it can be set on Rack middleware
|
71
|
-
# The rack span is the root span of the request and should make sure it has the full exception
|
72
|
-
# set on it.
|
73
|
-
if env[:datadog_rack_request_span]
|
74
|
-
env[:datadog_rack_request_span].set_error(exception)
|
75
|
-
end
|
76
69
|
end
|
77
70
|
ensure
|
78
71
|
span.finish
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ddtrace/contrib/configuration/settings'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Contrib
|
7
|
+
module Que
|
8
|
+
module Configuration
|
9
|
+
# Default settings for the Que integration
|
10
|
+
class Settings < Datadog::Contrib::Configuration::Settings
|
11
|
+
option :service_name, default: Ext::SERVICE_NAME
|
12
|
+
option :distributed_tracing, default: true
|
13
|
+
|
14
|
+
option :enabled do |o|
|
15
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
16
|
+
o.lazy
|
17
|
+
end
|
18
|
+
|
19
|
+
option :analytics_enabled do |o|
|
20
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
21
|
+
o.lazy
|
22
|
+
end
|
23
|
+
|
24
|
+
option :analytics_sample_rate do |o|
|
25
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
26
|
+
o.lazy
|
27
|
+
end
|
28
|
+
|
29
|
+
option :tag_args do |o|
|
30
|
+
o.default { env_to_bool(Ext::ENV_TAG_ARGS_ENABLED, false) }
|
31
|
+
o.lazy
|
32
|
+
end
|
33
|
+
|
34
|
+
option :tag_data do |o|
|
35
|
+
o.default { env_to_bool(Ext::ENV_TAG_DATA_ENABLED, false) }
|
36
|
+
o.lazy
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Contrib
|
5
|
+
module Que
|
6
|
+
# Que integration constants
|
7
|
+
module Ext
|
8
|
+
APP = 'que'.freeze
|
9
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_QUE_ANALYTICS_ENABLED'.freeze
|
10
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_QUE_ANALYTICS_ENABLED'.freeze
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE'.freeze
|
12
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_QUE_ANALYTICS_SAMPLE_RATE'.freeze
|
13
|
+
ENV_ENABLED = 'DD_TRACE_QUE_ENABLED'.freeze
|
14
|
+
ENV_TAG_ARGS_ENABLED = 'DD_TRACE_QUE_TAG_ARGS_ENABLED'.freeze
|
15
|
+
ENV_TAG_DATA_ENABLED = 'DD_TRACE_QUE_TAG_DATA_ENABLED'.freeze
|
16
|
+
SERVICE_NAME = 'que'.freeze
|
17
|
+
SPAN_JOB = 'que.job'.freeze
|
18
|
+
TAG_JOB_ARGS = 'que.job.args'.freeze
|
19
|
+
TAG_JOB_DATA = 'que.job.data'.freeze
|
20
|
+
TAG_JOB_ERROR_COUNT = 'que.job.error_count'.freeze
|
21
|
+
TAG_JOB_EXPIRED_AT = 'que.job.expired_at'.freeze
|
22
|
+
TAG_JOB_FINISHED_AT = 'que.job.finished_at'.freeze
|
23
|
+
TAG_JOB_ID = 'que.job.id'.freeze
|
24
|
+
TAG_JOB_PRIORITY = 'que.job.priority'.freeze
|
25
|
+
TAG_JOB_QUEUE = 'que.job.queue'.freeze
|
26
|
+
TAG_JOB_RUN_AT = 'que.job.run_at'.freeze
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ddtrace/contrib/integration'
|
4
|
+
require 'ddtrace/contrib/que/ext'
|
5
|
+
require 'ddtrace/contrib/que/configuration/settings'
|
6
|
+
require 'ddtrace/contrib/que/patcher'
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module Contrib
|
10
|
+
module Que
|
11
|
+
# Description of Que integration
|
12
|
+
class Integration
|
13
|
+
include Datadog::Contrib::Integration
|
14
|
+
|
15
|
+
MINIMUM_VERSION = Gem::Version.new('1.0.0.beta2')
|
16
|
+
|
17
|
+
register_as :que, auto_patch: true
|
18
|
+
|
19
|
+
def self.version
|
20
|
+
Gem.loaded_specs[Datadog::Contrib::Que::Ext::APP] &&
|
21
|
+
Gem.loaded_specs[Datadog::Contrib::Que::Ext::APP].version
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.loaded?
|
25
|
+
!defined?(::Que).nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.compatible?
|
29
|
+
super && version >= MINIMUM_VERSION
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_configuration
|
33
|
+
Configuration::Settings.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def patcher
|
37
|
+
Patcher
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ddtrace/contrib/que/tracer'
|
4
|
+
|
5
|
+
module Datadog
|
6
|
+
module Contrib
|
7
|
+
module Que
|
8
|
+
# Patcher enables patching of 'que' module.
|
9
|
+
module Patcher
|
10
|
+
include Datadog::Contrib::Patcher
|
11
|
+
|
12
|
+
module_function
|
13
|
+
|
14
|
+
def target_version
|
15
|
+
Integration.version
|
16
|
+
end
|
17
|
+
|
18
|
+
def patch
|
19
|
+
::Que.job_middleware.push(Que::Tracer.new)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|