_providers.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # Copyright The OpenTelemetry Authors
  2. # SPDX-License-Identifier: Apache-2.0
  3. from logging import getLogger
  4. from os import environ
  5. from typing import TYPE_CHECKING, TypeVar, cast
  6. if TYPE_CHECKING:
  7. from opentelemetry.metrics import MeterProvider
  8. from opentelemetry.trace import TracerProvider
  9. Provider = TypeVar("Provider", "TracerProvider", "MeterProvider")
  10. logger = getLogger(__name__)
  11. def _load_provider(
  12. provider_environment_variable: str, provider: str
  13. ) -> Provider: # type: ignore[type-var]
  14. # pylint: disable=import-outside-toplevel,no-name-in-module
  15. from opentelemetry.util._importlib_metadata import ( # noqa: PLC0415
  16. entry_points,
  17. )
  18. try:
  19. provider_name = cast(
  20. str,
  21. environ.get(provider_environment_variable, f"default_{provider}"),
  22. )
  23. return cast(
  24. Provider,
  25. next( # type: ignore
  26. iter( # type: ignore
  27. entry_points( # type: ignore
  28. group=f"opentelemetry_{provider}",
  29. name=provider_name,
  30. )
  31. )
  32. ).load()(),
  33. )
  34. except Exception: # pylint: disable=broad-exception-caught
  35. logger.exception("Failed to load configured provider %s", provider)
  36. raise