_providers.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # Copyright The OpenTelemetry Authors
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. from logging import getLogger
  15. from os import environ
  16. from typing import TYPE_CHECKING, TypeVar, cast
  17. from opentelemetry.util._importlib_metadata import entry_points
  18. if TYPE_CHECKING:
  19. from opentelemetry.metrics import MeterProvider
  20. from opentelemetry.trace import TracerProvider
  21. Provider = TypeVar("Provider", "TracerProvider", "MeterProvider")
  22. logger = getLogger(__name__)
  23. def _load_provider(
  24. provider_environment_variable: str, provider: str
  25. ) -> Provider: # type: ignore[type-var]
  26. try:
  27. provider_name = cast(
  28. str,
  29. environ.get(provider_environment_variable, f"default_{provider}"),
  30. )
  31. return cast(
  32. Provider,
  33. next( # type: ignore
  34. iter( # type: ignore
  35. entry_points( # type: ignore
  36. group=f"opentelemetry_{provider}",
  37. name=provider_name,
  38. )
  39. )
  40. ).load()(),
  41. )
  42. except Exception: # pylint: disable=broad-exception-caught
  43. logger.exception("Failed to load configured provider %s", provider)
  44. raise