Skip to content

Commit e12bc2f

Browse files
authored
chore(otel): raise exception if exporter unavailable (#234)
1 parent 5fab010 commit e12bc2f

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/strands/telemetry/tracer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def _initialize_tracer(self) -> None:
219219
except Exception as e:
220220
logger.exception("error=<%s> | Failed to configure OTLP exporter", e)
221221
elif self.otlp_endpoint and self.tracer_provider:
222-
logger.warning(OTEL_EXPORTER_MODULE_ERROR)
222+
raise ModuleNotFoundError(OTEL_EXPORTER_MODULE_ERROR)
223223

224224
# Set as global tracer provider
225225
trace_api.set_tracer_provider(self.tracer_provider)

tests/strands/telemetry/test_tracer.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,33 @@ def test_initialize_tracer_with_invalid_otlp_endpoint(
531531
mock_set_tracer_provider.assert_called_once_with(mock_tracer_provider.return_value)
532532

533533

534+
def test_initialize_tracer_with_missing_module(
535+
mock_is_initialized, mock_tracer_provider, mock_set_tracer_provider, mock_resource
536+
):
537+
"""Test initializing the tracer when the OTLP exporter module is missing."""
538+
mock_is_initialized.return_value = False
539+
540+
mock_resource_instance = mock.MagicMock()
541+
mock_resource.create.return_value = mock_resource_instance
542+
543+
# Initialize Tracer with OTLP endpoint but missing module
544+
with (
545+
mock.patch("strands.telemetry.tracer.HAS_OTEL_EXPORTER_MODULE", False),
546+
pytest.raises(ModuleNotFoundError) as excinfo,
547+
):
548+
Tracer(otlp_endpoint="http://test-endpoint")
549+
550+
# Verify the error message
551+
assert "opentelemetry-exporter-otlp-proto-http not detected" in str(excinfo.value)
552+
assert "otel http exporting is currently DISABLED" in str(excinfo.value)
553+
554+
# Verify the tracer provider was created with correct resource
555+
mock_tracer_provider.assert_called_once_with(resource=mock_resource_instance)
556+
557+
# Verify set_tracer_provider was not called since an exception was raised
558+
mock_set_tracer_provider.assert_not_called()
559+
560+
534561
def test_initialize_tracer_with_custom_tracer_provider(mock_get_tracer_provider, mock_resource):
535562
"""Test initializing the tracer with NoOpTracerProvider."""
536563
mock_is_initialized.return_value = True

0 commit comments

Comments
 (0)