Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 13 additions & 31 deletions logfire/_internal/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
ObservableGauge,
ObservableUpDownCounter,
UpDownCounter,
_Gauge as Gauge,
)
from opentelemetry.sdk.metrics import MeterProvider as SDKMeterProvider
from opentelemetry.trace import get_current_span
Expand All @@ -27,14 +28,6 @@
from .tracer import _LogfireWrappedSpan # type: ignore
from .utils import handle_internal_errors

try:
# This only exists in opentelemetry-sdk>=1.23.0
from opentelemetry.metrics import _Gauge

Gauge = _Gauge
except ImportError: # pragma: no cover
Gauge = None


# The following proxy classes are adapted from OTEL's SDK
@dataclasses.dataclass
Expand Down Expand Up @@ -160,14 +153,7 @@ def create_gauge(
name: str,
unit: str = '',
description: str = '',
) -> _Gauge:
if Gauge is None:
# This only exists in opentelemetry-sdk>=1.23.0
raise RuntimeError(
'Gauge is not available in this version of OpenTelemetry SDK.\n'
'You should upgrade to 1.23.0 or newer:\n'
' pip install opentelemetry-sdk>=1.23.0'
)
) -> Gauge:
return self._add_proxy_instrument(_ProxyGauge, name=name, unit=unit, description=description)

def create_observable_gauge(
Expand Down Expand Up @@ -280,19 +266,15 @@ def _create_real_instrument(self, meter: Meter) -> UpDownCounter:
return meter.create_up_down_counter(**self._kwargs)


if Gauge is not None: # pragma: no branch

class _ProxyGauge(_ProxyInstrument[Gauge], Gauge):
def set(
self,
amount: int | float,
attributes: Attributes | None = None,
*args: Any,
**kwargs: Any,
) -> None:
self._instrument.set(amount, attributes, *args, **kwargs)
class _ProxyGauge(_ProxyInstrument[Gauge], Gauge):
def set(
self,
amount: int | float,
attributes: Attributes | None = None,
*args: Any,
**kwargs: Any,
) -> None:
self._instrument.set(amount, attributes, *args, **kwargs)

def _create_real_instrument(self, meter: Meter):
return meter.create_gauge(**self._kwargs)
else: # pragma: no cover
_ProxyGauge = None # type: ignore
def _create_real_instrument(self, meter: Meter):
return meter.create_gauge(**self._kwargs)
12 changes: 0 additions & 12 deletions tests/test_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
)

import logfire
import logfire._internal.metrics
from logfire._internal.config import METRICS_PREFERRED_TEMPORALITY
from logfire._internal.exporters.quiet_metrics import QuietMetricExporter
from logfire._internal.exporters.test import TestExporter
Expand Down Expand Up @@ -205,17 +204,6 @@ def test_create_metric_gauge(metrics_reader: InMemoryMetricReader) -> None:
)


def test_create_metric_gauge_old_opentelemetry_sdk(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(logfire._internal.metrics, 'Gauge', None)
with pytest.raises(RuntimeError) as exc_info:
logfire.metric_gauge('gauge')
assert str(exc_info.value) == snapshot("""\
Gauge is not available in this version of OpenTelemetry SDK.
You should upgrade to 1.23.0 or newer:
pip install opentelemetry-sdk>=1.23.0\
""")


def test_create_metric_up_down_counter(metrics_reader: InMemoryMetricReader) -> None:
counter = logfire.metric_up_down_counter('up_down_counter')
counter.add(1)
Expand Down
Loading