Skip to content

Commit 715edda

Browse files
committed
- fix(request_header_capture)
- test(request_header_capture) Signed-off-by: Varsha GS <varsha.gs@ibm.com>
1 parent 0729ace commit 715edda

File tree

2 files changed

+80
-7
lines changed

2 files changed

+80
-7
lines changed

instana/instrumentation/pyramid/tweens.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ class InstanaTweenFactory(object):
1919
def __init__(self, handler, registry):
2020
self.handler = handler
2121

22-
def _extract_custom_headers(self, span, headers, format):
22+
def _extract_custom_headers(self, span, headers):
2323
if agent.options.extra_http_headers is None:
2424
return
2525
try:
2626
for custom_header in agent.options.extra_http_headers:
27-
# Headers are available in this format: HTTP_X_CAPTURE_THIS
28-
pyramid_header = ('HTTP_' + custom_header.upper()).replace('-', '_') if format else custom_header
29-
if pyramid_header in headers:
30-
span.set_tag("http.header.%s" % custom_header, headers[pyramid_header])
27+
if custom_header in headers:
28+
span.set_tag("http.header.%s" % custom_header, headers[custom_header])
3129

3230
except Exception:
3331
logger.debug("extract_custom_headers: ", exc_info=True)
@@ -44,7 +42,7 @@ def __call__(self, request):
4442
if request.matched_route is not None:
4543
scope.span.set_tag("http.path_tpl", request.matched_route.pattern)
4644

47-
self._extract_custom_headers(scope.span, request.headers, format=True)
45+
self._extract_custom_headers(scope.span, request.headers)
4846

4947
if len(request.query_string):
5048
scrubbed_params = strip_secrets_from_query(request.query_string, agent.options.secrets_matcher,
@@ -55,7 +53,7 @@ def __call__(self, request):
5553
try:
5654
response = self.handler(request)
5755

58-
self._extract_custom_headers(scope.span, response.headers, format=False)
56+
self._extract_custom_headers(scope.span, response.headers)
5957

6058
tracer.inject(scope.span.context, ot.Format.HTTP_HEADERS, response.headers)
6159
response.headers['Server-Timing'] = "intid;desc=%s" % scope.span.context.trace_id

tests/frameworks/test_pyramid.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,3 +313,78 @@ def test_response_header_capture(self):
313313
self.assertEqual("Ok too", sdk_custom_tags["http.header.X-Capture-That"])
314314

315315
agent.options.extra_http_headers = original_extra_http_headers
316+
317+
def test_request_header_capture(self):
318+
original_extra_http_headers = agent.options.extra_http_headers
319+
agent.options.extra_http_headers = ["X-Capture-This-Too", "X-Capture-That-Too"]
320+
321+
request_headers = {
322+
"X-Capture-This-Too": "this too",
323+
"X-Capture-That-Too": "that too",
324+
}
325+
326+
with tracer.start_active_span("test"):
327+
response = self.http.request(
328+
"GET", testenv["pyramid_server"] + "/", headers=request_headers
329+
)
330+
331+
spans = self.recorder.queued_spans()
332+
self.assertEqual(3, len(spans))
333+
334+
pyramid_span = spans[0]
335+
urllib3_span = spans[1]
336+
test_span = spans[2]
337+
338+
self.assertTrue(response)
339+
self.assertEqual(200, response.status)
340+
341+
# Same traceId
342+
self.assertEqual(test_span.t, urllib3_span.t)
343+
self.assertEqual(urllib3_span.t, pyramid_span.t)
344+
345+
# Parent relationships
346+
self.assertEqual(urllib3_span.p, test_span.s)
347+
self.assertEqual(pyramid_span.p, urllib3_span.s)
348+
349+
# Synthetic
350+
self.assertIsNone(pyramid_span.sy)
351+
self.assertIsNone(urllib3_span.sy)
352+
self.assertIsNone(test_span.sy)
353+
354+
# Error logging
355+
self.assertIsNone(test_span.ec)
356+
self.assertIsNone(urllib3_span.ec)
357+
self.assertIsNone(pyramid_span.ec)
358+
359+
# HTTP SDK span
360+
self.assertEqual("sdk", pyramid_span.n)
361+
362+
self.assertTrue(pyramid_span.data["sdk"])
363+
self.assertEqual('http', pyramid_span.data["sdk"]["name"])
364+
self.assertEqual('entry', pyramid_span.data["sdk"]["type"])
365+
366+
sdk_custom_tags = pyramid_span.data["sdk"]["custom"]["tags"]
367+
self.assertEqual('127.0.0.1:' + str(testenv['pyramid_port']), sdk_custom_tags["http.host"])
368+
self.assertEqual('/', sdk_custom_tags["http.url"])
369+
self.assertEqual('GET', sdk_custom_tags["http.method"])
370+
self.assertEqual(200, sdk_custom_tags["http.status"])
371+
self.assertNotIn("message", sdk_custom_tags)
372+
self.assertNotIn("http.path_tpl", sdk_custom_tags)
373+
374+
# urllib3
375+
self.assertEqual("test", test_span.data["sdk"]["name"])
376+
self.assertEqual("urllib3", urllib3_span.n)
377+
self.assertEqual(200, urllib3_span.data["http"]["status"])
378+
self.assertEqual(testenv["pyramid_server"] + '/', urllib3_span.data["http"]["url"])
379+
self.assertEqual("GET", urllib3_span.data["http"]["method"])
380+
self.assertIsNotNone(urllib3_span.stack)
381+
self.assertTrue(type(urllib3_span.stack) is list)
382+
self.assertTrue(len(urllib3_span.stack) > 1)
383+
384+
# custom headers
385+
self.assertTrue(sdk_custom_tags["http.header.X-Capture-This-Too"])
386+
self.assertEqual("this too", sdk_custom_tags["http.header.X-Capture-This-Too"])
387+
self.assertTrue(sdk_custom_tags["http.header.X-Capture-That-Too"])
388+
self.assertEqual("that too", sdk_custom_tags["http.header.X-Capture-That-Too"])
389+
390+
agent.options.extra_http_headers = original_extra_http_headers

0 commit comments

Comments
 (0)