Skip to content

Commit 5ce5d1a

Browse files
authored
chore: Deprecate OpenTelemetryIntegration in favor of OTLPIntegration and no-op for span first (#6494)
#### Issues * resolves: #6043 * resolves: PY-2345
1 parent c6e05ba commit 5ce5d1a

2 files changed

Lines changed: 57 additions & 25 deletions

File tree

sentry_sdk/integrations/opentelemetry/integration.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
removed at any time without prior notice.
55
"""
66

7+
import warnings
8+
from typing import TYPE_CHECKING
9+
710
from sentry_sdk.integrations import DidNotEnable, Integration
811
from sentry_sdk.integrations.opentelemetry.propagator import SentryPropagator
912
from sentry_sdk.integrations.opentelemetry.span_processor import SentrySpanProcessor
13+
from sentry_sdk.tracing_utils import has_span_streaming_enabled
1014
from sentry_sdk.utils import logger
1115

16+
if TYPE_CHECKING:
17+
from typing import Any, Dict, Optional
18+
1219
try:
1320
from opentelemetry import trace
1421
from opentelemetry.propagate import set_global_textmap
@@ -34,9 +41,24 @@ class OpenTelemetryIntegration(Integration):
3441

3542
@staticmethod
3643
def setup_once() -> None:
37-
logger.warning(
38-
"[OTel] Initializing highly experimental OpenTelemetry support. "
39-
"Use at your own risk."
44+
pass
45+
46+
def setup_once_with_options(
47+
self, options: "Optional[Dict[str, Any]]" = None
48+
) -> None:
49+
if has_span_streaming_enabled(options):
50+
logger.warning(
51+
"[OTel] OpenTelemetryIntegration is not compatible with span streaming "
52+
"(trace_lifecycle='stream') and will be disabled."
53+
)
54+
return
55+
56+
warnings.warn(
57+
"OpenTelemetryIntegration is deprecated. "
58+
"Please use OTLPIntegration instead: "
59+
"https://docs.sentry.io/platforms/python/integrations/otlp/",
60+
DeprecationWarning,
61+
stacklevel=2,
4062
)
4163

4264
_setup_sentry_tracing()

tests/integrations/opentelemetry/test_experimental.py

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,56 @@
22

33
import pytest
44

5+
from sentry_sdk.integrations.opentelemetry.integration import OpenTelemetryIntegration
6+
57

68
@pytest.mark.forked
79
def test_integration_enabled_if_option_is_on(sentry_init, reset_integrations):
8-
mocked_setup_once = MagicMock()
10+
mocked_setup_sentry_tracing = MagicMock()
911

1012
with patch(
11-
"sentry_sdk.integrations.opentelemetry.integration.OpenTelemetryIntegration.setup_once",
12-
mocked_setup_once,
13+
"sentry_sdk.integrations.opentelemetry.integration._setup_sentry_tracing",
14+
mocked_setup_sentry_tracing,
1315
):
14-
sentry_init(
15-
_experiments={
16-
"otel_powered_performance": True,
17-
},
18-
)
19-
mocked_setup_once.assert_called_once()
16+
with pytest.warns(DeprecationWarning):
17+
sentry_init(_experiments={"otel_powered_performance": True})
18+
mocked_setup_sentry_tracing.assert_called_once()
2019

2120

2221
@pytest.mark.forked
2322
def test_integration_not_enabled_if_option_is_off(sentry_init, reset_integrations):
24-
mocked_setup_once = MagicMock()
23+
mocked_setup_sentry_tracing = MagicMock()
2524

2625
with patch(
27-
"sentry_sdk.integrations.opentelemetry.integration.OpenTelemetryIntegration.setup_once",
28-
mocked_setup_once,
26+
"sentry_sdk.integrations.opentelemetry.integration._setup_sentry_tracing",
27+
mocked_setup_sentry_tracing,
2928
):
30-
sentry_init(
31-
_experiments={
32-
"otel_powered_performance": False,
33-
},
34-
)
35-
mocked_setup_once.assert_not_called()
29+
sentry_init(_experiments={"otel_powered_performance": False})
30+
mocked_setup_sentry_tracing.assert_not_called()
3631

3732

3833
@pytest.mark.forked
3934
def test_integration_not_enabled_if_option_is_missing(sentry_init, reset_integrations):
40-
mocked_setup_once = MagicMock()
35+
mocked_setup_sentry_tracing = MagicMock()
4136

4237
with patch(
43-
"sentry_sdk.integrations.opentelemetry.integration.OpenTelemetryIntegration.setup_once",
44-
mocked_setup_once,
38+
"sentry_sdk.integrations.opentelemetry.integration._setup_sentry_tracing",
39+
mocked_setup_sentry_tracing,
4540
):
4641
sentry_init()
47-
mocked_setup_once.assert_not_called()
42+
mocked_setup_sentry_tracing.assert_not_called()
43+
44+
45+
@pytest.mark.forked
46+
def test_integration_disabled_with_span_streaming(sentry_init, reset_integrations):
47+
mocked_setup_sentry_tracing = MagicMock()
48+
49+
with patch(
50+
"sentry_sdk.integrations.opentelemetry.integration._setup_sentry_tracing",
51+
mocked_setup_sentry_tracing,
52+
):
53+
sentry_init(
54+
integrations=[OpenTelemetryIntegration()],
55+
_experiments={"trace_lifecycle": "stream"},
56+
)
57+
mocked_setup_sentry_tracing.assert_not_called()

0 commit comments

Comments
 (0)