diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d5c5ceaa8..c408a041bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#364](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/364)) - `opentelemetry-propagator-ot-trace` Do not throw an exception when headers are not present ([#378](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/378)) +- `opentelemetry-instrumentation-wsgi` Reimplement `keys` method to return actual keys from the carrier instead of an empty list. + ([#379](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/379)) ### Changed - Rename `IdsGenerator` to `IdGenerator` diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py index ec2fc162f0..e8335c3fca 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py @@ -66,6 +66,8 @@ def hello(): from opentelemetry.trace.status import Status, StatusCode _HTTP_VERSION_PREFIX = "HTTP/" +_CARRIER_KEY_PREFIX = "HTTP_" +_CARRIER_KEY_PREFIX_LEN = len(_CARRIER_KEY_PREFIX) class CarrierGetter(DictGetter): @@ -89,7 +91,11 @@ def get( return None def keys(self, carrier): - return [] + return [ + key[_CARRIER_KEY_PREFIX_LEN:].lower().replace("_", "-") + for key in carrier + if key.startswith(_CARRIER_KEY_PREFIX) + ] carrier_getter = CarrierGetter() diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_getter.py b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_getter.py index 80cf6b1ecd..1e6d5ef79b 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_getter.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_getter.py @@ -22,15 +22,30 @@ def test_get_none(self): getter = CarrierGetter() carrier = {} val = getter.get(carrier, "test") + self.assertIsNone(val) - def test_get_(self): + def test_get(self): getter = CarrierGetter() carrier = {"HTTP_TEST_KEY": "val"} val = getter.get(carrier, "test-key") + self.assertEqual(val, ["val"]) def test_keys(self): + getter = CarrierGetter() + keys = getter.keys( + { + "HTTP_TEST_KEY": "val", + "HTTP_OTHER_KEY": 42, + "NON_HTTP_KEY": "val", + } + ) + + self.assertEqual(keys, ["test-key", "other-key"]) + + def test_keys_empty(self): getter = CarrierGetter() keys = getter.keys({}) + self.assertEqual(keys, [])