Current section
Files
Jump to
Current section
Files
test/shared/test_helpers.ex
defmodule Peep.Test do
@moduledoc false
alias Telemetry.Metrics
require Peep.Persistent
def insert_metric(name, metric, value, tags) when is_number(value) do
case Peep.Persistent.fetch(name) do
Peep.Persistent.persistent(
storage: {storage_mod, storage},
ids_to_metrics: ids_to_metrics
) ->
case find_metric_id(ids_to_metrics, metric) do
{:ok, id} ->
storage
|> storage_mod.resolve()
|> storage_mod.insert_metric(id, metric, value, tags)
:error ->
nil
end
_ ->
nil
end
end
def insert_metric(_name, _metric, _value, _tags), do: nil
defp find_metric_id(ids_to_metrics, metric) do
find_metric_id(ids_to_metrics, metric, tuple_size(ids_to_metrics), 0)
end
defp find_metric_id(_tuple, _metric, size, size), do: :error
defp find_metric_id(tuple, metric, size, idx) do
case elem(tuple, idx) do
^metric -> {:ok, idx}
_ -> find_metric_id(tuple, metric, size, idx + 1)
end
end
def fresh_id do
:"#{System.unique_integer([:positive])}"
end
def start_peep!(options) do
name = fresh_id()
{:ok, _pid} = Peep.start_link(Keyword.put(options, :name, name))
name
end
def get_metric(all_metrics, metric, tags) do
tags = to_map(tags)
tags_map = Map.get(all_metrics, metric, %{})
case metric do
%Metrics.Counter{} -> Map.get(tags_map, tags, 0)
%Metrics.Sum{} -> Map.get(tags_map, tags, 0)
_other -> Map.get(tags_map, tags)
end
end
defp to_map(tags) when is_map(tags), do: tags
defp to_map(tags) when is_list(tags), do: Map.new(tags)
end