Skip to content

Commit 269e0f4

Browse files
authored
Add OpenTracing propagator (#302)
1 parent 9c1f98d commit 269e0f4

File tree

32 files changed

+764
-72
lines changed

32 files changed

+764
-72
lines changed

.github/workflows/test.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
- 'release/*'
77
pull_request:
88
env:
9-
CORE_REPO_SHA: 73601dfc0c8ab622fb8a2bfd4c0b1ea6c3f91fa3
9+
CORE_REPO_SHA: d7acfd8135eba4cfdb88831399089aa1d43d49d1
1010

1111
jobs:
1212
build:
@@ -23,7 +23,7 @@ jobs:
2323
fail-fast: false # ensures the entire test matrix is run, even if one permutation fails
2424
matrix:
2525
python-version: [ py35, py36, py37, py38, pypy3 ]
26-
package: ["instrumentation", "exporter", "sdkextension"]
26+
package: ["instrumentation", "exporter", "sdkextension", "propagator"]
2727
os: [ ubuntu-latest ]
2828
include:
2929
# py35-instrumentation segfaults on 18.04 so we instead run on 20.04

CHANGELOG.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python-contrib/compare/v0.17b0...HEAD)
88

9-
### Changed
9+
### Added
10+
- `opentelemetry-propagator-ot-trace` Add OT Trace Propagator
11+
([#302](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/302))
12+
13+
### Removed
1014
- Remove `component` span attribute in instrumentations.
1115
`opentelemetry-instrumentation-aiopg`, `opentelemetry-instrumentation-dbapi` Remove unused `database_type` parameter from `trace_integration` function.
1216
([#301](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/301))

exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
3535
.. code:: python
3636
37-
from opentelemetry import propagators, trace
37+
from opentelemetry.propagate import set_global_textmap
38+
from opentelemetry import trace
3839
from opentelemetry.exporter.datadog import DatadogExportSpanProcessor, DatadogSpanExporter
3940
from opentelemetry.exporter.datadog.propagator import DatadogFormat
4041
from opentelemetry.sdk.trace import TracerProvider
@@ -50,7 +51,7 @@
5051
trace.get_tracer_provider().add_span_processor(span_processor)
5152
5253
# Optional: use Datadog format for propagation in distributed traces
53-
propagators.set_global_textmap(DatadogFormat())
54+
set_global_textmap(DatadogFormat())
5455
5556
with tracer.start_as_current_span("foo"):
5657
print("Hello world!")

instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,21 @@ def strip_query_params(url: yarl.URL) -> str:
6262
---
6363
"""
6464

65-
import socket
6665
import types
6766
import typing
6867

6968
import aiohttp
7069
import wrapt
7170

7271
from opentelemetry import context as context_api
73-
from opentelemetry import propagators, trace
72+
from opentelemetry import trace
7473
from opentelemetry.instrumentation.aiohttp_client.version import __version__
7574
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
7675
from opentelemetry.instrumentation.utils import (
7776
http_status_to_status_code,
7877
unwrap,
7978
)
79+
from opentelemetry.propagate import inject
8080
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
8181
from opentelemetry.trace.status import Status, StatusCode
8282

@@ -181,7 +181,7 @@ async def on_request_start(
181181
trace.set_span_in_context(trace_config_ctx.span)
182182
)
183183

184-
propagators.inject(type(params.headers).__setitem__, params.headers)
184+
inject(type(params.headers).__setitem__, params.headers)
185185

186186
async def on_request_end(
187187
unused_session: aiohttp.ClientSession,

instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@
2525

2626
from asgiref.compatibility import guarantee_single_callable
2727

28-
from opentelemetry import context, propagators, trace
28+
from opentelemetry import context, trace
2929
from opentelemetry.instrumentation.asgi.version import __version__ # noqa
3030
from opentelemetry.instrumentation.utils import http_status_to_status_code
31+
from opentelemetry.propagate import extract
3132
from opentelemetry.trace.propagation.textmap import DictGetter
3233
from opentelemetry.trace.status import Status, StatusCode
3334

@@ -185,7 +186,7 @@ async def __call__(self, scope, receive, send):
185186
if self.excluded_urls and self.excluded_urls.url_disabled(url):
186187
return await self.app(scope, receive, send)
187188

188-
token = context.attach(propagators.extract(carrier_getter, scope))
189+
token = context.attach(extract(carrier_getter, scope))
189190
span_name, additional_attributes = self.span_details_callback(scope)
190191

191192
try:

instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,14 @@
4949
import logging
5050

5151
from botocore.client import BaseClient
52-
from botocore.exceptions import ClientError, ParamValidationError
53-
from wrapt import ObjectProxy, wrap_function_wrapper
52+
from botocore.exceptions import ClientError
53+
from wrapt import wrap_function_wrapper
5454

5555
from opentelemetry import context as context_api
56-
from opentelemetry import propagators
5756
from opentelemetry.instrumentation.botocore.version import __version__
5857
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
5958
from opentelemetry.instrumentation.utils import unwrap
60-
from opentelemetry.sdk.trace import Resource
59+
from opentelemetry.propagate import inject
6160
from opentelemetry.trace import SpanKind, get_tracer
6261

6362
logger = logging.getLogger(__name__)
@@ -67,7 +66,7 @@
6766
def _patched_endpoint_prepare_request(wrapped, instance, args, kwargs):
6867
request = args[0]
6968
headers = request.headers
70-
propagators.inject(type(headers).__setitem__, headers)
69+
inject(type(headers).__setitem__, headers)
7170
return wrapped(*args, **kwargs)
7271

7372

instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_instrumentation.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@
2828
mock_xray,
2929
)
3030

31-
from opentelemetry import propagators
3231
from opentelemetry import trace as trace_api
3332
from opentelemetry.context import attach, detach, set_value
3433
from opentelemetry.instrumentation.botocore import BotocoreInstrumentor
34+
from opentelemetry.propagate import get_global_textmap, set_global_textmap
3535
from opentelemetry.test.mock_textmap import MockTextMapPropagator
3636
from opentelemetry.test.test_base import TestBase
3737

@@ -381,14 +381,14 @@ def test_sts_client(self):
381381
@mock_ec2
382382
def test_propagator_injects_into_request(self):
383383
headers = {}
384-
previous_propagator = propagators.get_global_textmap()
384+
previous_propagator = get_global_textmap()
385385

386386
def check_headers(**kwargs):
387387
nonlocal headers
388388
headers = kwargs["request"].headers
389389

390390
try:
391-
propagators.set_global_textmap(MockTextMapPropagator())
391+
set_global_textmap(MockTextMapPropagator())
392392

393393
ec2 = self.session.create_client("ec2", region_name="us-west-2")
394394
ec2.meta.events.register_first(
@@ -424,7 +424,7 @@ def check_headers(**kwargs):
424424
)
425425

426426
finally:
427-
propagators.set_global_textmap(previous_propagator)
427+
set_global_textmap(previous_propagator)
428428

429429
@mock_xray
430430
def test_suppress_instrumentation_xray_client(self):

instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ def add(x, y):
5252
"""
5353

5454
import logging
55-
import signal
5655
from collections.abc import Iterable
5756

5857
from celery import signals # pylint: disable=no-name-in-module
5958

60-
from opentelemetry import propagators, trace
59+
from opentelemetry import trace
6160
from opentelemetry.instrumentation.celery import utils
6261
from opentelemetry.instrumentation.celery.version import __version__
6362
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
63+
from opentelemetry.propagate import extract, inject
6464
from opentelemetry.trace.propagation.textmap import DictGetter
6565
from opentelemetry.trace.status import Status, StatusCode
6666

@@ -128,7 +128,7 @@ def _trace_prerun(self, *args, **kwargs):
128128
return
129129

130130
request = task.request
131-
tracectx = propagators.extract(carrier_getter, request) or None
131+
tracectx = extract(carrier_getter, request) or None
132132

133133
logger.debug("prerun signal start task_id=%s", task_id)
134134

@@ -192,7 +192,7 @@ def _trace_before_publish(self, *args, **kwargs):
192192

193193
headers = kwargs.get("headers")
194194
if headers:
195-
propagators.inject(type(headers).__setitem__, headers)
195+
inject(type(headers).__setitem__, headers)
196196

197197
@staticmethod
198198
def _trace_after_publish(*args, **kwargs):

instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
carrier_getter,
2424
collect_request_attributes,
2525
)
26-
from opentelemetry.propagators import extract
26+
from opentelemetry.propagate import extract
2727
from opentelemetry.trace import SpanKind, get_tracer
2828
from opentelemetry.util.http import get_excluded_urls, get_traced_request_attrs
2929

instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py

-4
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,13 @@
4646
ElasticsearchInstrumentor("my-custom-prefix").instrument()
4747
"""
4848

49-
import functools
50-
import types
5149
from logging import getLogger
5250
from os import environ
5351

5452
import elasticsearch
5553
import elasticsearch.exceptions
56-
from wrapt import ObjectProxy
5754
from wrapt import wrap_function_wrapper as _wrap
5855

59-
from opentelemetry import context, propagators, trace
6056
from opentelemetry.instrumentation.elasticsearch.version import __version__
6157
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
6258
from opentelemetry.instrumentation.utils import unwrap

instrumentation/opentelemetry-instrumentation-falcon/src/opentelemetry/instrumentation/falcon/__init__.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,14 @@ def on_get(self, req, resp):
4949
import falcon
5050

5151
import opentelemetry.instrumentation.wsgi as otel_wsgi
52-
from opentelemetry import context, propagators, trace
52+
from opentelemetry import context, trace
5353
from opentelemetry.instrumentation.falcon.version import __version__
5454
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
5555
from opentelemetry.instrumentation.utils import (
5656
extract_attributes_from_object,
5757
http_status_to_status_code,
5858
)
59+
from opentelemetry.propagate import extract
5960
from opentelemetry.trace.status import Status
6061
from opentelemetry.util.http import get_excluded_urls, get_traced_request_attrs
6162
from opentelemetry.util.providers import time_ns
@@ -108,9 +109,7 @@ def __call__(self, env, start_response):
108109

109110
start_time = time_ns()
110111

111-
token = context.attach(
112-
propagators.extract(otel_wsgi.carrier_getter, env)
113-
)
112+
token = context.attach(extract(otel_wsgi.carrier_getter, env))
114113
span = self._tracer.start_span(
115114
otel_wsgi.get_default_span_name(env),
116115
kind=trace.SpanKind.SERVER,

instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ def hello():
5252
import flask
5353

5454
import opentelemetry.instrumentation.wsgi as otel_wsgi
55-
from opentelemetry import context, propagators, trace
55+
from opentelemetry import context, trace
5656
from opentelemetry.instrumentation.flask.version import __version__
5757
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
58+
from opentelemetry.propagate import extract
5859
from opentelemetry.util.http import get_excluded_urls
5960
from opentelemetry.util.providers import time_ns
6061

@@ -116,9 +117,7 @@ def _before_request():
116117
flask_request_environ = flask.request.environ
117118
span_name = name_callback()
118119
token = context.attach(
119-
propagators.extract(
120-
otel_wsgi.carrier_getter, flask_request_environ
121-
)
120+
extract(otel_wsgi.carrier_getter, flask_request_environ)
122121
)
123122

124123
tracer = trace.get_tracer(__name__, __version__)

instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424

2525
import grpc
2626

27-
from opentelemetry import propagators, trace
27+
from opentelemetry import trace
2828
from opentelemetry.instrumentation.grpc import grpcext
2929
from opentelemetry.instrumentation.grpc._utilities import RpcInfo
30+
from opentelemetry.propagate import inject
3031
from opentelemetry.trace.status import Status, StatusCode
3132

3233

@@ -59,7 +60,7 @@ def append_metadata(
5960
metadata[key] = value
6061

6162
# Inject current active span from the context
62-
propagators.inject(append_metadata, metadata)
63+
inject(append_metadata, metadata)
6364

6465

6566
def _make_future_done_callback(span, rpc_info):

instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626

2727
import grpc
2828

29-
from opentelemetry import propagators, trace
29+
from opentelemetry import trace
3030
from opentelemetry.context import attach, detach
31+
from opentelemetry.propagate import extract
3132
from opentelemetry.trace.propagation.textmap import DictGetter
3233
from opentelemetry.trace.status import Status, StatusCode
3334

@@ -181,7 +182,7 @@ def _set_remote_context(self, servicer_context):
181182
metadata = servicer_context.invocation_metadata()
182183
if metadata:
183184
md_dict = {md.key: md.value for md in metadata}
184-
ctx = propagators.extract(self._carrier_getter, md_dict)
185+
ctx = extract(self._carrier_getter, md_dict)
185186
token = attach(ctx)
186187
try:
187188
yield

instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
from pyramid.tweens import EXCVIEW
77

88
import opentelemetry.instrumentation.wsgi as otel_wsgi
9-
from opentelemetry import context, propagators, trace
9+
from opentelemetry import context, trace
1010
from opentelemetry.instrumentation.pyramid.version import __version__
11+
from opentelemetry.propagate import extract
1112
from opentelemetry.util.http import get_excluded_urls
1213
from opentelemetry.util.providers import time_ns
1314

@@ -63,9 +64,7 @@ def _before_traversal(event):
6364

6465
start_time = request_environ.get(_ENVIRON_STARTTIME_KEY)
6566

66-
token = context.attach(
67-
propagators.extract(otel_wsgi.carrier_getter, request_environ)
68-
)
67+
token = context.attach(extract(otel_wsgi.carrier_getter, request_environ))
6968
tracer = trace.get_tracer(__name__, __version__)
7069

7170
if request.matched_route:

instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,17 @@
3636
import functools
3737
import types
3838

39-
from requests import Timeout, URLRequired
40-
from requests.exceptions import InvalidSchema, InvalidURL, MissingSchema
4139
from requests.models import Response
4240
from requests.sessions import Session
4341
from requests.structures import CaseInsensitiveDict
4442

45-
from opentelemetry import context, propagators
43+
from opentelemetry import context
4644
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
4745
from opentelemetry.instrumentation.requests.version import __version__
4846
from opentelemetry.instrumentation.utils import http_status_to_status_code
47+
from opentelemetry.propagate import inject
4948
from opentelemetry.trace import SpanKind, get_tracer
50-
from opentelemetry.trace.status import Status, StatusCode
49+
from opentelemetry.trace.status import Status
5150

5251
# A key to a context variable to avoid creating duplicate spans when instrumenting
5352
# both, Session.request and Session.send, since Session.request calls into Session.send
@@ -135,7 +134,7 @@ def _instrumented_requests_call(
135134
span.set_attribute("http.url", url)
136135

137136
headers = get_or_create_headers()
138-
propagators.inject(type(headers).__setitem__, headers)
137+
inject(type(headers).__setitem__, headers)
139138

140139
token = context.attach(
141140
context.set_value(_SUPPRESS_REQUESTS_INSTRUMENTATION_KEY, True)

0 commit comments

Comments
 (0)