Skip to content

Commit 8b04813

Browse files
authored
Merge pull request #828 from DataDog/majorgreys/trace-search-on-default
Trace search client configuration
2 parents 2907b13 + a182256 commit 8b04813

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1633
-473
lines changed

ddtrace/constants.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FILTERS_KEY = 'FILTERS'
22
SAMPLE_RATE_METRIC_KEY = '_sample_rate'
33
SAMPLING_PRIORITY_KEY = '_sampling_priority_v1'
4+
ANALYTICS_SAMPLE_RATE_KEY = '_dd1.sr.eausr'
45
ORIGIN_KEY = '_dd.origin'
5-
EVENT_SAMPLE_RATE_KEY = '_dd1.sr.eausr'
66

7-
NUMERIC_TAGS = (EVENT_SAMPLE_RATE_KEY, )
7+
NUMERIC_TAGS = (ANALYTICS_SAMPLE_RATE_KEY, )

ddtrace/contrib/aiobotocore/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
The aiobotocore integration will trace all AWS calls made with the ``aiobotocore``
33
library. This integration isn't enabled when applying the default patching.
4-
To enable it, you must run ``patch_all(botocore=True)``
4+
To enable it, you must run ``patch_all(aiobotocore=True)``
55
66
::
77

ddtrace/contrib/aiobotocore/patch.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import asyncio
22
from ddtrace.vendor import wrapt
3+
from ddtrace import config
34
import aiobotocore.client
45

56
from aiobotocore.endpoint import ClientResponseContentProxy
67

8+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
79
from ...pin import Pin
810
from ...ext import http, aws
911
from ...compat import PYTHON_VERSION_INFO
@@ -117,4 +119,10 @@ def _wrapped_api_call(original_func, instance, args, kwargs):
117119
if request_id2:
118120
span.set_tag('aws.requestid2', request_id2)
119121

122+
# set analytics sample rate
123+
span.set_tag(
124+
ANALYTICS_SAMPLE_RATE_KEY,
125+
config.aiobotocore.get_analytics_sample_rate()
126+
)
127+
120128
return result

ddtrace/contrib/aiohttp/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
* ``distributed_tracing_enabled`` (default: ``True``): enable distributed tracing during
3333
the middleware execution, so that a new span is created with the given ``trace_id`` and
3434
``parent_id`` injected via request headers.
35+
* ``analytics_enabled`` (default: ``None``): enables APM events in Trace Search & Analytics.
3536
3637
Third-party modules that are currently supported by the ``patch()`` method are:
3738

ddtrace/contrib/aiohttp/middlewares.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from ..asyncio import context_provider
44
from ...compat import stringify
5-
from ...constants import EVENT_SAMPLE_RATE_KEY
6-
from ...ext import AppTypes, http
5+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
6+
from ...ext import http
77
from ...propagation.http import HTTPPropagator
88
from ...settings import config
99

@@ -47,8 +47,13 @@ def attach_context(request):
4747
)
4848

4949
# Configure trace search sample rate
50-
if config.aiohttp.event_sample_rate is not None:
51-
request_span.set_tag(EVENT_SAMPLE_RATE_KEY, config.aiohttp.event_sample_rate)
50+
# DEV: aiohttp is special case maintains separate configuration from config api
51+
analytics_enabled = app[CONFIG_KEY]['analytics_enabled']
52+
if (config.analytics_enabled and analytics_enabled is not False) or analytics_enabled is True:
53+
request_span.set_tag(
54+
ANALYTICS_SAMPLE_RATE_KEY,
55+
app[CONFIG_KEY].get('analytics_sample_rate', True)
56+
)
5257

5358
# attach the context and the root span to the request; the Context
5459
# may be freely used by the application code
@@ -118,6 +123,8 @@ def trace_app(app, tracer, service='aiohttp-web'):
118123
'tracer': tracer,
119124
'service': service,
120125
'distributed_tracing_enabled': True,
126+
'analytics_enabled': None,
127+
'analytics_sample_rate': 1.0,
121128
}
122129

123130
# the tracer must work with asynchronous Context propagation

ddtrace/contrib/boto/patch.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from ddtrace.vendor import wrapt
33
import inspect
44

5+
from ddtrace import config
6+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
57
from ...pin import Pin
68
from ...ext import http, aws
79
from ...utils.wrappers import unwrap
@@ -97,6 +99,12 @@ def patched_query_request(original_func, instance, args, kwargs):
9799
span.set_tag(http.STATUS_CODE, getattr(result, "status"))
98100
span.set_tag(http.METHOD, getattr(result, "_method"))
99101

102+
# set analytics sample rate
103+
span.set_tag(
104+
ANALYTICS_SAMPLE_RATE_KEY,
105+
config.boto.get_analytics_sample_rate()
106+
)
107+
100108
return result
101109

102110

@@ -152,6 +160,12 @@ def patched_auth_request(original_func, instance, args, kwargs):
152160
span.set_tag(http.STATUS_CODE, getattr(result, "status"))
153161
span.set_tag(http.METHOD, getattr(result, "_method"))
154162

163+
# set analytics sample rate
164+
span.set_tag(
165+
ANALYTICS_SAMPLE_RATE_KEY,
166+
config.boto.get_analytics_sample_rate()
167+
)
168+
155169
return result
156170

157171

ddtrace/contrib/botocore/patch.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
"""
44
# 3p
55
from ddtrace.vendor import wrapt
6+
from ddtrace import config
67
import botocore.client
78

89
# project
10+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
911
from ...pin import Pin
1012
from ...ext import http, aws
1113
from ...utils.formats import deep_getattr
@@ -71,4 +73,10 @@ def patched_api_call(original_func, instance, args, kwargs):
7173
span.set_tag(http.STATUS_CODE, result['ResponseMetadata']['HTTPStatusCode'])
7274
span.set_tag("retry_attempts", result['ResponseMetadata']['RetryAttempts'])
7375

76+
# set analytics sample rate
77+
span.set_tag(
78+
ANALYTICS_SAMPLE_RATE_KEY,
79+
config.botocore.get_analytics_sample_rate()
80+
)
81+
7482
return result

ddtrace/contrib/bottle/trace.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
# stdlib
55
import ddtrace
6-
from ddtrace.ext import http
76

87
# project
9-
from ...constants import EVENT_SAMPLE_RATE_KEY
8+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
9+
from ...ext import http
1010
from ...propagation.http import HTTPPropagator
1111
from ...settings import config
1212

@@ -38,9 +38,11 @@ def wrapped(*args, **kwargs):
3838
self.tracer.context_provider.activate(context)
3939

4040
with self.tracer.trace('bottle.request', service=self.service, resource=resource, span_type=SPAN_TYPE) as s:
41-
# Configure trace search sample rate
42-
if config.bottle.event_sample_rate is not None:
43-
s.set_tag(EVENT_SAMPLE_RATE_KEY, config.bottle.event_sample_rate)
41+
# set analytics sample rate with global config enabled
42+
s.set_tag(
43+
ANALYTICS_SAMPLE_RATE_KEY,
44+
config.bottle.get_analytics_sample_rate(use_global_config=True)
45+
)
4446

4547
code = 0
4648
try:

ddtrace/contrib/cassandra/session.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55

66
# 3p
77
import cassandra.cluster
8-
from ddtrace.vendor import wrapt
98

109
# project
1110
from ...compat import stringify
11+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
1212
from ...ext import net, cassandra as cassx, errors
1313
from ...internal.logger import get_logger
1414
from ...pin import Pin
15+
from ...settings import config
1516
from ...utils.deprecation import deprecated
1617
from ...utils.formats import deep_getattr
18+
from ...vendor import wrapt
1719

1820
log = get_logger(__name__)
1921

@@ -183,6 +185,11 @@ def _start_span_and_set_tags(pin, query, session, cluster):
183185
_sanitize_query(span, query)
184186
span.set_tags(_extract_session_metas(session)) # FIXME[matt] do once?
185187
span.set_tags(_extract_cluster_metas(cluster))
188+
# set analytics sample rate if enabled
189+
span.set_tag(
190+
ANALYTICS_SAMPLE_RATE_KEY,
191+
config.cassandra.get_analytics_sample_rate()
192+
)
186193
return span
187194

188195

ddtrace/contrib/dbapi/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
"""
22
Generic dbapi tracing code.
33
"""
4+
5+
from ...constants import ANALYTICS_SAMPLE_RATE_KEY
46
from ...ext import AppTypes, sql
57
from ...internal.logger import get_logger
68
from ...pin import Pin
79
from ...settings import config
810
from ...utils.formats import asbool, get_env
911
from ...vendor import wrapt
1012

13+
1114
log = get_logger(__name__)
1215

1316
config._add('dbapi2', dict(
@@ -47,6 +50,13 @@ def _trace_method(self, method, name, resource, extra_tags, *args, **kwargs):
4750
s.set_tags(pin.tags)
4851
s.set_tags(extra_tags)
4952

53+
# set analytics sample rate if enabled but only for non-FetchTracedCursor
54+
if not isinstance(self, FetchTracedCursor):
55+
s.set_tag(
56+
ANALYTICS_SAMPLE_RATE_KEY,
57+
config.dbapi2.get_analytics_sample_rate()
58+
)
59+
5060
try:
5161
return method(*args, **kwargs)
5262
finally:

0 commit comments

Comments
 (0)