Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# Enabled Pin and non-internal request
self.tracer.enabled = True
request = self.get_http_connection(SOCKET)
pin = Pin.get_from(request)
self.assertFalse(should_skip_request(pin, request))
# Disabled Pin and non-internal request
self.tracer.enabled = False
request = self.get_http_connection(SOCKET)
pin = Pin.get_from(request)
self.assertTrue(should_skip_request(pin, request))
# Enabled Pin and internal request
self.tracer.enabled = True
request = self.get_http_connection(self.tracer.writer.api.hostname, self.tracer.writer.api.port)
pin = Pin.get_from(request)
self.assertTrue(should_skip_request(pin, request))
# Disabled Pin and internal request
self.tracer.enabled = False
request = self.get_http_connection(self.tracer.writer.api.hostname, self.tracer.writer.api.port)
pin = Pin.get_from(request)
self.assertTrue(should_skip_request(pin, request))
def _trace_method(self, method, name, resource, extra_tags, *args, **kwargs):
"""
Internal function to trace the call to the underlying cursor method
:param method: The callable to be wrapped
:param name: The name of the resulting span.
:param resource: The sql query. Sql queries are obfuscated on the agent side.
:param extra_tags: A dict of tags to store into the span's meta
:param args: The args that will be passed as positional args to the wrapped method
:param kwargs: The args that will be passed as kwargs to the wrapped method
:return: The result of the wrapped method invocation
"""
pin = Pin.get_from(self)
if not pin or not pin.enabled():
return method(*args, **kwargs)
service = pin.service
with pin.tracer.trace(name, service=service, resource=resource) as s:
s.span_type = sql.TYPE
# No reason to tag the query since it is set as the resource by the agent. See:
# https://github.com/DataDog/datadog-trace-agent/blob/bda1ebbf170dd8c5879be993bdd4dbae70d10fda/obfuscate/sql.go#L232
s.set_tags(pin.tags)
s.set_tags(extra_tags)
# set analytics sample rate if enabled but only for non-FetchTracedCursor
if not isinstance(self, FetchTracedCursor):
s.set_tag(
ANALYTICS_SAMPLE_RATE_KEY,
config.dbapi2.get_analytics_sample_rate()
)
def _perform_request(func, instance, args, kwargs):
pin = Pin.get_from(instance)
if not pin or not pin.enabled():
return func(*args, **kwargs)
with pin.tracer.trace('elasticsearch.query', span_type=SpanTypes.ELASTICSEARCH) as span:
# Don't instrument if the trace is not sampled
if not span.sampled:
return func(*args, **kwargs)
method, url = args
params = kwargs.get('params')
body = kwargs.get('body')
span.service = pin.service
span.set_tag(metadata.METHOD, method)
span.set_tag(metadata.URL, url)
span.set_tag(metadata.PARAMS, urlencode(params))
def _wrapped_api_call(original_func, instance, args, kwargs):
pin = Pin.get_from(instance)
if not pin or not pin.enabled():
result = yield from original_func(*args, **kwargs)
return result
endpoint_name = deep_getattr(instance, '_endpoint._endpoint_prefix')
with pin.tracer.trace('{}.command'.format(endpoint_name),
service='{}.{}'.format(pin.service, endpoint_name),
span_type=SpanTypes.HTTP) as span:
if len(args) > 0:
operation = args[0]
span.resource = '{}.{}'.format(endpoint_name, operation.lower())
else:
operation = None
span.resource = endpoint_name
def traced_execute_async(func, instance, args, kwargs):
cluster = getattr(instance, 'cluster', None)
pin = Pin.get_from(cluster)
if not pin or not pin.enabled():
return func(*args, **kwargs)
query = kwargs.get('query') or args[0]
span = _start_span_and_set_tags(pin, query, instance, cluster)
try:
result = func(*args, **kwargs)
setattr(result, CURRENT_SPAN, span)
setattr(result, PAGE_NUMBER, 1)
setattr(
result,
'_set_final_result',
wrapt.FunctionWrapper(
result._set_final_result,
def _trace_method(self, method, name, extra_tags, *args, **kwargs):
pin = Pin.get_from(self)
if not pin or not pin.enabled():
return method(*args, **kwargs)
service = pin.service
with pin.tracer.trace(name, service=service) as s:
s.set_tags(pin.tags)
s.set_tags(extra_tags)
return method(*args, **kwargs)
def _trace_method(self, method, resource, extra_tags, *args, **kwargs):
pin = Pin.get_from(self)
if not pin or not pin.enabled():
result = yield from method(*args, **kwargs)
return result
service = pin.service
with pin.tracer.trace(self._datadog_name, service=service,
resource=resource) as s:
s.span_type = sql.TYPE
s.set_tag(sql.QUERY, resource)
s.set_tags(pin.tags)
s.set_tags(extra_tags)
# set analytics sample rate
s.set_tag(
ANALYTICS_SAMPLE_RATE_KEY,
config.aiopg.get_analytics_sample_rate()
def _patched_search(func, instance, wrapt_args, wrapt_kwargs):
"""
wrapt_args is called the way it is to distinguish it from the 'args'
argument to the algoliasearch.index.Index.search() method.
"""
if algoliasearch_version < (2, 0) and algoliasearch_version >= (1, 0):
function_query_arg_name = 'args'
elif algoliasearch_version >= (2, 0) and algoliasearch_version < (3, 0):
function_query_arg_name = 'request_options'
else:
return func(*wrapt_args, **wrapt_kwargs)
pin = Pin.get_from(instance)
if not pin or not pin.enabled():
return func(*wrapt_args, **wrapt_kwargs)
with pin.tracer.trace('algoliasearch.search', service=pin.service, span_type=SEARCH_SPAN_TYPE) as span:
if not span.sampled:
return func(*wrapt_args, **wrapt_kwargs)
if config.algoliasearch.collect_query_text:
span.set_tag('query.text', wrapt_kwargs.get('query', wrapt_args[0]))
query_args = wrapt_kwargs.get(function_query_arg_name, wrapt_args[1] if len(wrapt_args) > 1 else None)
if query_args and isinstance(query_args, dict):
for query_arg, tag_name in QUERY_ARGS_DD_TAG_MAP.items():
value = query_args.get(query_arg)
if value is not None: