Otel.Metrics.Aggregation.LastValue (otel v0.4.1)

Copy Markdown View Source

Last value aggregation. Keeps the most recent measurement.

ETS entry format: {key, value, timestamp, start_time, reservoir_state}. Uses ets:insert_new + ets:update_element (overwrite) — last writer wins, which is the correct semantic for gauges.

The fifth slot holds the exemplar reservoir state (Otel.Metrics.Exemplar.Reservoir.SimpleFixedSize) so a single ETS row carries everything collect/3 needs.

Gauge data points have no aggregation temporality.

Summary

Functions

aggregate(metrics_tab, key, value, opts)

@spec aggregate(
  metrics_tab :: :ets.table(),
  key :: term(),
  value :: number(),
  opts :: map()
) :: :ok

collect(metrics_tab, stream_name, opts)

@spec collect(
  metrics_tab :: :ets.table(),
  stream_key :: String.t(),
  opts :: map()
) :: [Otel.Metrics.Aggregation.datapoint()]

offer_exemplar(metrics_tab, key, value, time, filtered_attrs, ctx)

@spec offer_exemplar(
  metrics_tab :: :ets.table(),
  key :: term(),
  value :: number(),
  time :: non_neg_integer(),
  filtered_attrs :: %{required(String.t()) => term()},
  ctx :: Otel.Ctx.t()
) :: :ok