Current section
Files
Jump to
Current section
Files
src/observatory.erl
-module(observatory).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([init/0, collect/1, counter_init/2, counter_inc_by/3, counter_inc/2]).
-export_type([observatory/0, collector/0]).
-type observatory() :: {observatory, gleam@dict:dict(binary(), collector())}.
-type collector() :: {a_counter, float()}.
-spec init() -> observatory().
init() ->
{observatory, gleam@dict:new()}.
-spec collect(observatory()) -> list({binary(), float()}).
collect(Observatory) ->
_pipe = maps:to_list(erlang:element(2, Observatory)),
gleam@list:map(_pipe, fun(Entry) -> case gleam@pair:second(Entry) of
{a_counter, Counter} ->
{gleam@pair:first(Entry), Counter}
end end).
-spec counter_init(observatory(), binary()) -> observatory().
counter_init(Observatory, Name) ->
{observatory,
gleam@dict:insert(
erlang:element(2, Observatory),
Name,
{a_counter, +0.0}
)}.
-spec inc_collector_by(float()) -> fun((gleam@option:option(collector())) -> collector()).
inc_collector_by(Increment) ->
fun(Opt_collector) -> case Opt_collector of
{some, Collector} ->
case Collector of
{a_counter, Collector@1} ->
{a_counter, Collector@1 + Increment}
end;
none ->
{a_counter, Increment}
end end.
-spec counter_inc_by(observatory(), binary(), float()) -> observatory().
counter_inc_by(Observatory, Name, Increment) ->
{observatory,
gleam@dict:update(
erlang:element(2, Observatory),
Name,
inc_collector_by(Increment)
)}.
-spec counter_inc(observatory(), binary()) -> observatory().
counter_inc(Observatory, Name) ->
counter_inc_by(Observatory, Name, 1.0).