Skip to content

Simple

provide.foundation.metrics.simple

TODO: Add module docstring.

Classes

SimpleCounter

SimpleCounter(name: str, otel_counter: Any | None = None)

Counter metric that increments monotonically.

Source code in provide/foundation/metrics/simple.py
def __init__(self, name: str, otel_counter: Any | None = None) -> None:
    self.name = name
    self._otel_counter = otel_counter
    self._value: float = 0
    self._labels_values: dict[str, float] = defaultdict(float)
Attributes
value property
value: float

Get the current counter value.

Functions
inc
inc(value: float = 1, **labels: Any) -> None

Increment the counter.

Parameters:

Name Type Description Default
value float

Amount to increment by (default: 1)

1
**labels Any

Label key-value pairs

{}
Source code in provide/foundation/metrics/simple.py
def inc(self, value: float = 1, **labels: Any) -> None:
    """Increment the counter.

    Args:
        value: Amount to increment by (default: 1)
        **labels: Label key-value pairs

    """
    self._value += value

    # Track per-label values for simple mode
    if labels:
        labels_key = ",".join(f"{k}={v}" for k, v in sorted(labels.items()))
        self._labels_values[labels_key] += value

    # Use OpenTelemetry counter if available
    if self._otel_counter:
        try:
            self._otel_counter.add(value, attributes=labels)
        except Exception as e:
            log.debug(f"📊⚠️ Failed to record OpenTelemetry counter: {e}")

SimpleGauge

SimpleGauge(name: str, otel_gauge: Any | None = None)

Gauge metric that can go up or down.

Source code in provide/foundation/metrics/simple.py
def __init__(self, name: str, otel_gauge: Any | None = None) -> None:
    self.name = name
    self._otel_gauge = otel_gauge
    self._value: float = 0
    self._labels_values: dict[str, float] = defaultdict(float)
Attributes
value property
value: float

Get the current gauge value.

Functions
dec
dec(value: float = 1, **labels: Any) -> None

Decrement the gauge value.

Parameters:

Name Type Description Default
value float

Amount to decrement by

1
**labels Any

Label key-value pairs

{}
Source code in provide/foundation/metrics/simple.py
def dec(self, value: float = 1, **labels: Any) -> None:
    """Decrement the gauge value.

    Args:
        value: Amount to decrement by
        **labels: Label key-value pairs

    """
    self.inc(-value, **labels)
inc
inc(value: float = 1, **labels: Any) -> None

Increment the gauge value.

Parameters:

Name Type Description Default
value float

Amount to increment by

1
**labels Any

Label key-value pairs

{}
Source code in provide/foundation/metrics/simple.py
def inc(self, value: float = 1, **labels: Any) -> None:
    """Increment the gauge value.

    Args:
        value: Amount to increment by
        **labels: Label key-value pairs

    """
    self._value += value

    if labels:
        labels_key = ",".join(f"{k}={v}" for k, v in sorted(labels.items()))
        self._labels_values[labels_key] += value

    if self._otel_gauge:
        try:
            self._otel_gauge.add(value, attributes=labels)
        except Exception as e:
            log.debug(f"📊⚠️ Failed to increment OpenTelemetry gauge: {e}")
set
set(value: float, **labels: Any) -> None

Set the gauge value.

Parameters:

Name Type Description Default
value float

Value to set

required
**labels Any

Label key-value pairs

{}
Source code in provide/foundation/metrics/simple.py
def set(self, value: float, **labels: Any) -> None:
    """Set the gauge value.

    Args:
        value: Value to set
        **labels: Label key-value pairs

    """
    self._value = value

    # Track per-label values for simple mode
    if labels:
        labels_key = ",".join(f"{k}={v}" for k, v in sorted(labels.items()))
        self._labels_values[labels_key] = value

    # Use OpenTelemetry gauge if available
    if self._otel_gauge:
        try:
            self._otel_gauge.add(
                value
                - self._labels_values.get(
                    ",".join(f"{k}={v}" for k, v in sorted(labels.items())) if labels else "",
                    0,
                ),
                attributes=labels,
            )
        except Exception as e:
            log.debug(f"📊⚠️ Failed to record OpenTelemetry gauge: {e}")

SimpleHistogram

SimpleHistogram(
    name: str, otel_histogram: Any | None = None
)

Histogram metric for recording distributions of values.

Source code in provide/foundation/metrics/simple.py
def __init__(self, name: str, otel_histogram: Any | None = None) -> None:
    self.name = name
    self._otel_histogram = otel_histogram
    self._observations: list[float] = []
    self._labels_observations: dict[str, list[float]] = defaultdict(list)
Attributes
avg property
avg: float

Get the average of all observations.

count property
count: int

Get the number of observations.

sum property
sum: float

Get the sum of all observations.

Functions
observe
observe(value: float, **labels: Any) -> None

Record an observation.

Parameters:

Name Type Description Default
value float

Value to observe

required
**labels Any

Label key-value pairs

{}
Source code in provide/foundation/metrics/simple.py
def observe(self, value: float, **labels: Any) -> None:
    """Record an observation.

    Args:
        value: Value to observe
        **labels: Label key-value pairs

    """
    self._observations.append(value)

    # Track per-label observations for simple mode
    if labels:
        labels_key = ",".join(f"{k}={v}" for k, v in sorted(labels.items()))
        self._labels_observations[labels_key].append(value)

    # Use OpenTelemetry histogram if available
    if self._otel_histogram:
        try:
            self._otel_histogram.record(value, attributes=labels)
        except Exception as e:
            log.debug(f"📊⚠️ Failed to record OpenTelemetry histogram: {e}")

Functions