Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
__init__.py267 linesDownload Raw Back to _events
1# Copyright The OpenTelemetry Authors2#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 at6#7#     http://www.apache.org/licenses/LICENSE-2.08#9# Unless required by applicable law or agreed to in writing, software10# 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 and13# limitations under the License.14 15from abc import ABC, abstractmethod16from logging import getLogger17from os import environ18from typing import Optional, cast19 20from typing_extensions import deprecated21 22from opentelemetry._logs import LogRecord23from opentelemetry._logs.severity import SeverityNumber24from opentelemetry.environment_variables import (25    _OTEL_PYTHON_EVENT_LOGGER_PROVIDER,26)27from opentelemetry.trace.span import TraceFlags28from opentelemetry.util._once import Once29from opentelemetry.util._providers import _load_provider30from opentelemetry.util.types import AnyValue, _ExtendedAttributes31 32_logger = getLogger(__name__)33 34 35@deprecated(36    "You should use `LogRecord` with the `event_name` field set instead. "37    "Deprecated since version 1.39.0 and will be removed in a future release."38)39class Event(LogRecord):40    def __init__(41        self,42        name: str,43        timestamp: Optional[int] = None,44        trace_id: Optional[int] = None,45        span_id: Optional[int] = None,46        trace_flags: Optional["TraceFlags"] = None,47        body: Optional[AnyValue] = None,48        severity_number: Optional[SeverityNumber] = None,49        attributes: Optional[_ExtendedAttributes] = None,50    ):51        attributes = attributes or {}52        event_attributes = {53            **attributes,54            "event.name": name,55        }56        super().__init__(57            timestamp=timestamp,58            trace_id=trace_id,59            span_id=span_id,60            trace_flags=trace_flags,61            body=body,62            severity_number=severity_number,63            attributes=event_attributes,64        )65        self.name = name66 67 68@deprecated(69    "You should use `Logger` instead. "70    "Deprecated since version 1.39.0 and will be removed in a future release."71)72class EventLogger(ABC):73    def __init__(74        self,75        name: str,76        version: Optional[str] = None,77        schema_url: Optional[str] = None,78        attributes: Optional[_ExtendedAttributes] = None,79    ):80        self._name = name81        self._version = version82        self._schema_url = schema_url83        self._attributes = attributes84 85    @abstractmethod86    def emit(self, event: "Event") -> None:87        """Emits a :class:`Event` representing an event."""88 89 90@deprecated(91    "You should use `NoOpLogger` instead. "92    "Deprecated since version 1.39.0 and will be removed in a future release."93)94class NoOpEventLogger(EventLogger):95    def emit(self, event: Event) -> None:96        pass97 98 99@deprecated(100    "You should use `ProxyLogger` instead. "101    "Deprecated since version 1.39.0 and will be removed in a future release."102)103class ProxyEventLogger(EventLogger):104    def __init__(105        self,106        name: str,107        version: Optional[str] = None,108        schema_url: Optional[str] = None,109        attributes: Optional[_ExtendedAttributes] = None,110    ):111        super().__init__(112            name=name,113            version=version,114            schema_url=schema_url,115            attributes=attributes,116        )117        self._real_event_logger: Optional[EventLogger] = None118        self._noop_event_logger = NoOpEventLogger(name)119 120    @property121    def _event_logger(self) -> EventLogger:122        if self._real_event_logger:123            return self._real_event_logger124 125        if _EVENT_LOGGER_PROVIDER:126            self._real_event_logger = _EVENT_LOGGER_PROVIDER.get_event_logger(127                self._name,128                self._version,129                self._schema_url,130                self._attributes,131            )132            return self._real_event_logger133        return self._noop_event_logger134 135    def emit(self, event: Event) -> None:136        self._event_logger.emit(event)137 138 139@deprecated(140    "You should use `LoggerProvider` instead. "141    "Deprecated since version 1.39.0 and will be removed in a future release."142)143class EventLoggerProvider(ABC):144    @abstractmethod145    def get_event_logger(146        self,147        name: str,148        version: Optional[str] = None,149        schema_url: Optional[str] = None,150        attributes: Optional[_ExtendedAttributes] = None,151    ) -> EventLogger:152        """Returns an EventLoggerProvider for use."""153 154 155@deprecated(156    "You should use `NoOpLoggerProvider` instead. "157    "Deprecated since version 1.39.0 and will be removed in a future release."158)159class NoOpEventLoggerProvider(EventLoggerProvider):160    def get_event_logger(161        self,162        name: str,163        version: Optional[str] = None,164        schema_url: Optional[str] = None,165        attributes: Optional[_ExtendedAttributes] = None,166    ) -> EventLogger:167        return NoOpEventLogger(168            name, version=version, schema_url=schema_url, attributes=attributes169        )170 171 172@deprecated(173    "You should use `ProxyLoggerProvider` instead. "174    "Deprecated since version 1.39.0 and will be removed in a future release."175)176class ProxyEventLoggerProvider(EventLoggerProvider):177    def get_event_logger(178        self,179        name: str,180        version: Optional[str] = None,181        schema_url: Optional[str] = None,182        attributes: Optional[_ExtendedAttributes] = None,183    ) -> EventLogger:184        if _EVENT_LOGGER_PROVIDER:185            return _EVENT_LOGGER_PROVIDER.get_event_logger(186                name,187                version=version,188                schema_url=schema_url,189                attributes=attributes,190            )191        return ProxyEventLogger(192            name,193            version=version,194            schema_url=schema_url,195            attributes=attributes,196        )197 198 199_EVENT_LOGGER_PROVIDER_SET_ONCE = Once()200_EVENT_LOGGER_PROVIDER: Optional[EventLoggerProvider] = None201_PROXY_EVENT_LOGGER_PROVIDER = ProxyEventLoggerProvider()202 203 204@deprecated(205    "You should use `get_logger_provider` instead. "206    "Deprecated since version 1.39.0 and will be removed in a future release."207)208def get_event_logger_provider() -> EventLoggerProvider:209    global _EVENT_LOGGER_PROVIDER  # pylint: disable=global-variable-not-assigned210    if _EVENT_LOGGER_PROVIDER is None:211        if _OTEL_PYTHON_EVENT_LOGGER_PROVIDER not in environ:212            return _PROXY_EVENT_LOGGER_PROVIDER213 214        event_logger_provider: EventLoggerProvider = _load_provider(  # type: ignore215            _OTEL_PYTHON_EVENT_LOGGER_PROVIDER, "event_logger_provider"216        )217 218        _set_event_logger_provider(event_logger_provider, log=False)219 220    return cast("EventLoggerProvider", _EVENT_LOGGER_PROVIDER)221 222 223def _set_event_logger_provider(224    event_logger_provider: EventLoggerProvider, log: bool225) -> None:226    def set_elp() -> None:227        global _EVENT_LOGGER_PROVIDER  # pylint: disable=global-statement228        _EVENT_LOGGER_PROVIDER = event_logger_provider229 230    did_set = _EVENT_LOGGER_PROVIDER_SET_ONCE.do_once(set_elp)231 232    if log and not did_set:233        _logger.warning(234            "Overriding of current EventLoggerProvider is not allowed"235        )236 237 238@deprecated(239    "You should use `set_logger_provider` instead. "240    "Deprecated since version 1.39.0 and will be removed in a future release."241)242def set_event_logger_provider(243    event_logger_provider: EventLoggerProvider,244) -> None:245    _set_event_logger_provider(event_logger_provider, log=True)246 247 248@deprecated(249    "You should use `get_logger` instead. "250    "Deprecated since version 1.39.0 and will be removed in a future release."251)252def get_event_logger(253    name: str,254    version: Optional[str] = None,255    schema_url: Optional[str] = None,256    attributes: Optional[_ExtendedAttributes] = None,257    event_logger_provider: Optional[EventLoggerProvider] = None,258) -> "EventLogger":259    if event_logger_provider is None:260        event_logger_provider = get_event_logger_provider()261    return event_logger_provider.get_event_logger(262        name,263        version,264        schema_url,265        attributes,266    )267 
codekingpro/portable-devtools · Team Ai