core/metrics/aggregate_strategy/gauge.ex

# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.

use Croma
alias AntikytheraCore.Metrics.AggregateStrategy, as: Strategy

defmodule Strategy.Gauge do
  @moduledoc """
  Aggregate strategy that simply takes the last value within each time window.
  """

  @behaviour Strategy.Behaviour

  @typep data_t :: number

  @impl true
  defun init(value :: v[number]) :: data_t, do: value

  @impl true
  defun merge(_old_value :: data_t, value :: v[number]) :: data_t, do: value

  @impl true
  defun results(value :: data_t) :: Strategy.results_t(), do: [value: value]
end