def test_with_complete_datadog_trace_headers(self): extract_dd_trace_context({ 'headers': { TraceHeader.TRACE_ID: '123', TraceHeader.PARENT_ID: '321', TraceHeader.SAMPLING_PRIORITY: '1', } }) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: '123', TraceHeader.PARENT_ID: '65535', TraceHeader.SAMPLING_PRIORITY: '1', } ) self.mock_xray_recorder.begin_subsegment.assert_called() self.mock_xray_recorder.end_subsegment.assert_called() self.mock_current_subsegment.put_metadata.assert_called_with( XraySubsegment.KEY, { 'trace-id': '123', 'parent-id': '321', 'sampling-priority': '1', }, XraySubsegment.NAMESPACE )
def test_with_complete_datadog_trace_headers(self): ctx = extract_dd_trace_context( { "headers": { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: "321", TraceHeader.SAMPLING_PRIORITY: "1", } } ) self.assertDictEqual( ctx, { "trace-id": "123", "parent-id": "321", "sampling-priority": "1", "source": "event", }, ) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: "65535", TraceHeader.SAMPLING_PRIORITY: "1", }, ) self.mock_xray_recorder.begin_subsegment.assert_called() self.mock_xray_recorder.end_subsegment.assert_called() self.mock_current_subsegment.put_metadata.assert_called_with( XraySubsegment.KEY, {"trace-id": "123", "parent-id": "321", "sampling-priority": "1"}, XraySubsegment.NAMESPACE, )
def test_without_datadog_trace_headers(self): extract_dd_trace_context({}) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: '4369', TraceHeader.PARENT_ID: '65535', TraceHeader.SAMPLING_PRIORITY: '2', })
def _wrap_httplib_request(func, instance, args, kwargs): """ Wrap `httplib` (python2) or `http.client` (python3) to inject the Datadog trace headers into the outgoing requests. """ context = get_dd_trace_context() if 'headers' in kwargs: kwargs['headers'].update(context) elif len(args) >= 4: args[3].update(context) else: kwargs['headers'] = context return func(*args, **kwargs)
def _wrap_requests_request(func, instance, args, kwargs): """ Wrap `requests.Session.request` to inject the Datadog trace headers into the outgoing requests. """ context = get_dd_trace_context() if 'headers' in kwargs: kwargs['headers'].update(context) elif len(args) >= 5: args[4].update(context) else: kwargs['headers'] = context return func(*args, **kwargs)
def test_with_incomplete_datadog_trace_headers(self): extract_dd_trace_context({ 'headers': { TraceHeader.TRACE_ID: '123', TraceHeader.PARENT_ID: '321', } }) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: '4369', TraceHeader.PARENT_ID: '65535', TraceHeader.SAMPLING_PRIORITY: '2', })
def _wrap_requests_request(func, instance, args, kwargs): """ Wrap `requests.Session.request` to inject the Datadog trace headers into the outgoing requests. """ context = get_dd_trace_context() if "headers" in kwargs and isinstance(kwargs["headers"], MutableMapping): kwargs["headers"].update(context) elif len(args) >= 5 and isinstance(args[4], MutableMapping): args[4].update(context) else: kwargs["headers"] = context return func(*args, **kwargs)
def _wrap_httplib_request(func, instance, args, kwargs): """ Wrap `httplib` (python2) or `http.client` (python3) to inject the Datadog trace headers into the outgoing requests. """ context = get_dd_trace_context() if "headers" in kwargs and isinstance(kwargs["headers"], MutableMapping): kwargs["headers"].update(context) elif len(args) >= 4 and isinstance(args[3], MutableMapping): args[3].update(context) else: kwargs["headers"] = context return func(*args, **kwargs)
def test_with_complete_datadog_trace_headers_with_mixed_casing(self): extract_dd_trace_context({ 'headers': { 'X-Datadog-Trace-Id': '123', 'X-Datadog-Parent-Id': '321', 'X-Datadog-Sampling-Priority': '1', } }) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: '123', TraceHeader.PARENT_ID: '65535', TraceHeader.SAMPLING_PRIORITY: '1', } )
def test_with_complete_datadog_trace_headers_with_mixed_casing(self): extract_dd_trace_context({ "headers": { "X-Datadog-Trace-Id": "123", "X-Datadog-Parent-Id": "321", "X-Datadog-Sampling-Priority": "1", } }) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: "65535", TraceHeader.SAMPLING_PRIORITY: "1", }, )
def _wrap_requests_request(func, instance, args, kwargs): """ Wrap `requests.Session.request` to inject the Datadog trace headers into the outgoing requests. """ context = get_dd_trace_context() if "headers" in kwargs and isinstance(kwargs["headers"], dict): kwargs["headers"].update(context) elif len(args) >= 5 and isinstance(args[4], dict): args[4].update(context) else: kwargs["headers"] = context # If we're in an integration test, log the HTTP requests made if os.environ.get("DD_INTEGRATION_TEST", "false").lower() == "true": _print_request_string(args, kwargs) return func(*args, **kwargs)
def test_without_datadog_trace_headers(self): ctx = extract_dd_trace_context({}) self.assertDictEqual( ctx, { "trace-id": "4369", "parent-id": "65535", "sampling-priority": "2", "source": "xray", }, ) self.assertDictEqual( get_dd_trace_context(), { TraceHeader.TRACE_ID: "4369", TraceHeader.PARENT_ID: "65535", TraceHeader.SAMPLING_PRIORITY: "2", }, )