Skip to content

Commit a610066

Browse files
authored
ref: Move OTel setup out of integrations/opentelemetry/ (#4277)
Moving stuff out of `integrations/opentelemetry/` step by step since there is no OpenTelemetry integration anymore -- it's part of the core SDK. - Moved `sentry_sdk/integrations/opentelemetry/integration.py` -> `sentry_sdk/opentelemetry/tracing.py`. - Removed all the experimental autoinstrumentation stuff from `integration.py`. - Removed `integrations/opentelemetry/` altogether (there was nothing left but `__init__.py`, which is now also gone). - Moved all tests from `tests/integrations/opentelemetry` to `tests/opentelemetry`. - Removed the potel/opentelemetry integration test targets from `tox.ini`. These will now be run as part of the Common test suite. Ref #3853
1 parent 2d51839 commit a610066

File tree

15 files changed

+45
-111
lines changed

15 files changed

+45
-111
lines changed

.github/workflows/test-integrations-misc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
strategy:
3030
fail-fast: false
3131
matrix:
32-
python-version: ["3.7","3.8","3.9","3.10","3.11","3.12","3.13"]
32+
python-version: ["3.7","3.8","3.10","3.11","3.12","3.13"]
3333
os: [ubuntu-22.04]
3434
steps:
3535
- uses: actions/checkout@v4.2.2

scripts/populate_tox/tox.jinja

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,6 @@ envlist =
107107
{py3.9,py3.11,py3.12}-openai-latest
108108
{py3.9,py3.11,py3.12}-openai-notiktoken
109109

110-
# OpenTelemetry (OTel)
111-
{py3.7,py3.9,py3.12,py3.13}-opentelemetry
112-
113-
# OpenTelemetry Experimental (POTel)
114-
{py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-potel
115-
116110
# pure_eval
117111
{py3.7,py3.12,py3.13}-pure_eval
118112

@@ -310,12 +304,6 @@ deps =
310304
openai-latest: tiktoken~=0.6.0
311305
openai-notiktoken: openai
312306
313-
# OpenTelemetry (OTel)
314-
opentelemetry: opentelemetry-distro
315-
316-
# OpenTelemetry Experimental (POTel)
317-
potel: -e .[opentelemetry-experimental]
318-
319307
# pure_eval
320308
pure_eval: pure_eval
321309
@@ -441,8 +429,6 @@ setenv =
441429
loguru: TESTPATH=tests/integrations/loguru
442430
openai: TESTPATH=tests/integrations/openai
443431
openfeature: TESTPATH=tests/integrations/openfeature
444-
opentelemetry: TESTPATH=tests/integrations/opentelemetry
445-
potel: TESTPATH=tests/integrations/opentelemetry
446432
pure_eval: TESTPATH=tests/integrations/pure_eval
447433
pymongo: TESTPATH=tests/integrations/pymongo
448434
pyramid: TESTPATH=tests/integrations/pyramid

sentry_sdk/client.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from sentry_sdk.integrations.dedupe import DedupeIntegration
3636
from sentry_sdk.sessions import SessionFlusher
3737
from sentry_sdk.envelope import Envelope
38+
3839
from sentry_sdk.profiler.continuous_profiler import setup_continuous_profiler
3940
from sentry_sdk.profiler.transaction_profiler import (
4041
has_profiling_enabled,
@@ -392,6 +393,13 @@ def _capture_envelope(envelope):
392393
except Exception as e:
393394
logger.debug("Can not set up continuous profiler. (%s)", e)
394395

396+
from sentry_sdk.opentelemetry.tracing import (
397+
patch_readable_span,
398+
setup_sentry_tracing,
399+
)
400+
401+
patch_readable_span()
402+
setup_sentry_tracing()
395403
finally:
396404
_client_init_debug.set(old_debug)
397405

sentry_sdk/integrations/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ def iter_default_integrations(with_auto_enabling_integrations):
6969
"sentry_sdk.integrations.excepthook.ExcepthookIntegration",
7070
"sentry_sdk.integrations.logging.LoggingIntegration",
7171
"sentry_sdk.integrations.modules.ModulesIntegration",
72-
"sentry_sdk.integrations.opentelemetry.integration.OpenTelemetryIntegration",
7372
"sentry_sdk.integrations.stdlib.StdlibIntegration",
7473
"sentry_sdk.integrations.threading.ThreadingIntegration",
7574
]

sentry_sdk/integrations/opentelemetry/__init__.py

Whitespace-only changes.

sentry_sdk/integrations/opentelemetry/integration.py

Lines changed: 0 additions & 80 deletions
This file was deleted.

sentry_sdk/opentelemetry/tracing.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from opentelemetry import trace
2+
from opentelemetry.propagate import set_global_textmap
3+
from opentelemetry.sdk.trace import TracerProvider, Span, ReadableSpan
4+
5+
from sentry_sdk.opentelemetry import (
6+
SentryPropagator,
7+
SentrySampler,
8+
SentrySpanProcessor,
9+
)
10+
11+
12+
def patch_readable_span():
13+
# type: () -> None
14+
"""
15+
We need to pass through sentry specific metadata/objects from Span to ReadableSpan
16+
to work with them consistently in the SpanProcessor.
17+
"""
18+
old_readable_span = Span._readable_span
19+
20+
def sentry_patched_readable_span(self):
21+
# type: (Span) -> ReadableSpan
22+
readable_span = old_readable_span(self)
23+
readable_span._sentry_meta = getattr(self, "_sentry_meta", {}) # type: ignore[attr-defined]
24+
return readable_span
25+
26+
Span._readable_span = sentry_patched_readable_span # type: ignore[method-assign]
27+
28+
29+
def setup_sentry_tracing():
30+
# type: () -> None
31+
provider = TracerProvider(sampler=SentrySampler())
32+
provider.add_span_processor(SentrySpanProcessor())
33+
trace.set_tracer_provider(provider)
34+
35+
set_global_textmap(SentryPropagator())

tox.ini

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
# The file (and all resulting CI YAMLs) then need to be regenerated via
1111
# "scripts/generate-test-files.sh".
1212
#
13-
# Last generated: 2025-04-10T12:24:07.555804+00:00
13+
# Last generated: 2025-04-10T13:32:09.968256+00:00
1414

1515
[tox]
1616
requires =
@@ -107,12 +107,6 @@ envlist =
107107
{py3.9,py3.11,py3.12}-openai-latest
108108
{py3.9,py3.11,py3.12}-openai-notiktoken
109109

110-
# OpenTelemetry (OTel)
111-
{py3.7,py3.9,py3.12,py3.13}-opentelemetry
112-
113-
# OpenTelemetry Experimental (POTel)
114-
{py3.8,py3.9,py3.10,py3.11,py3.12,py3.13}-potel
115-
116110
# pure_eval
117111
{py3.7,py3.12,py3.13}-pure_eval
118112

@@ -435,12 +429,6 @@ deps =
435429
openai-latest: tiktoken~=0.6.0
436430
openai-notiktoken: openai
437431

438-
# OpenTelemetry (OTel)
439-
opentelemetry: opentelemetry-distro
440-
441-
# OpenTelemetry Experimental (POTel)
442-
potel: -e .[opentelemetry-experimental]
443-
444432
# pure_eval
445433
pure_eval: pure_eval
446434

@@ -757,8 +745,6 @@ setenv =
757745
loguru: TESTPATH=tests/integrations/loguru
758746
openai: TESTPATH=tests/integrations/openai
759747
openfeature: TESTPATH=tests/integrations/openfeature
760-
opentelemetry: TESTPATH=tests/integrations/opentelemetry
761-
potel: TESTPATH=tests/integrations/opentelemetry
762748
pure_eval: TESTPATH=tests/integrations/pure_eval
763749
pymongo: TESTPATH=tests/integrations/pymongo
764750
pyramid: TESTPATH=tests/integrations/pyramid

0 commit comments

Comments
 (0)