Skip to content

Commit b44ad58

Browse files
committed
Added trace response headers for Pyramid
1 parent 370952f commit b44ad58

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

Diff for: .github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
- 'release/*'
77
pull_request:
88
env:
9-
CORE_REPO_SHA: cad261e5dae1fe986c87e6965664b45cc9ab73c3
9+
CORE_REPO_SHA: f6b04c483f6c416e1927f010c07e71a17a5d79d0
1010

1111
jobs:
1212
build:

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2121
([#299](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/299))
2222
- `opentelemetry-instrumenation-django` now supports request and response hooks.
2323
([#407](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/407))
24+
- `opentelemetry-instrumenation-pyramid` now supports trace response headers.
25+
([#435](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/435))
2426

2527
### Removed
2628
- Remove `http.status_text` from span attributes

Diff for: instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py

+7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121

2222
import opentelemetry.instrumentation.wsgi as otel_wsgi
2323
from opentelemetry import context, trace
24+
from opentelemetry.instrumentation.propagators import (
25+
get_global_back_propagator,
26+
)
2427
from opentelemetry.instrumentation.pyramid.version import __version__
2528
from opentelemetry.propagate import extract
2629
from opentelemetry.util._time import _time_ns
@@ -157,6 +160,10 @@ def trace_tween(request):
157160
response_or_exception.headers,
158161
)
159162

163+
propagator = get_global_back_propagator()
164+
if propagator:
165+
propagator.inject(response.headers)
166+
160167
activation = request.environ.get(_ENVIRON_ACTIVATION_KEY)
161168

162169
if isinstance(response_or_exception, HTTPException):

Diff for: instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py

+27
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
from pyramid.config import Configurator
1818

1919
from opentelemetry import trace
20+
from opentelemetry.instrumentation.propagators import (
21+
TraceResponsePropagator,
22+
get_global_back_propagator,
23+
set_global_back_propagator,
24+
)
2025
from opentelemetry.instrumentation.pyramid import PyramidInstrumentor
2126
from opentelemetry.test.test_base import TestBase
2227
from opentelemetry.test.wsgitestutil import WsgiTestBase
@@ -98,6 +103,28 @@ def test_simple(self):
98103
self.assertEqual(span_list[0].kind, trace.SpanKind.SERVER)
99104
self.assertEqual(span_list[0].attributes, expected_attrs)
100105

106+
def test_response_headers(self):
107+
orig = get_global_back_propagator()
108+
set_global_back_propagator(TraceResponsePropagator())
109+
110+
response = self.client.get("/hello/500")
111+
headers = response.headers
112+
span = self.memory_exporter.get_finished_spans()[0]
113+
114+
self.assertIn("traceresponse", headers)
115+
self.assertEqual(
116+
headers["access-control-expose-headers"], "traceresponse",
117+
)
118+
self.assertEqual(
119+
headers["traceresponse"],
120+
"00-{0}-{1}-01".format(
121+
trace.format_trace_id(span.get_span_context().trace_id),
122+
trace.format_span_id(span.get_span_context().span_id),
123+
),
124+
)
125+
126+
set_global_back_propagator(orig)
127+
101128
def test_not_recording(self):
102129
mock_tracer = Mock()
103130
mock_span = Mock()

0 commit comments

Comments
 (0)