Current section

Files

Jump to
themis src themis.erl
Raw

src/themis.erl

-module(themis).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/0, insert_gauge_record/4, delete_gauge/2, int/1, dec/1, pos_inf/0, neg_inf/0, nan/0, print/1, add_gauge/3]).
-export_type([store/0, store_error/0]).
-opaque store() :: {store,
gleam@dict:dict(internal@metric:metric_name(), internal@metric:metric(internal@metric@gauge:gauge(), internal@prometheus:number_()))}.
-type store_error() :: metric_name_already_in_use |
metric_name_not_found |
{metric_error, internal@metric:metric_error()} |
{label_error, internal@label:label_error()}.
-file("/git/Themis/src/themis.gleam", 29).
-spec new() -> store().
new() ->
{store, maps:new()}.
-file("/git/Themis/src/themis.gleam", 87).
-spec insert_gauge_record(
store(),
binary(),
gleam@dict:dict(binary(), binary()),
internal@prometheus:number_()
) -> {ok, store()} | {error, store_error()}.
insert_gauge_record(Store, Name_string, Labels_dict, Value) ->
gleam@result:'try'(
begin
_pipe = internal@label:from_dict(Labels_dict),
gleam@result:try_recover(
_pipe,
fun(E) -> {error, {label_error, E}} end
)
end,
fun(Labels) ->
gleam@result:'try'(
begin
_pipe@1 = internal@metric:new_name(Name_string),
gleam@result:try_recover(
_pipe@1,
fun(E@1) -> {error, {metric_error, E@1}} end
)
end,
fun(Name) ->
gleam@result:'try'(
begin
_pipe@2 = gleam_stdlib:map_get(
erlang:element(2, Store),
Name
),
gleam@result:replace_error(
_pipe@2,
metric_name_not_found
)
end,
fun(Gauge) ->
Updated_gauge = internal@metric@gauge:insert_record(
Gauge,
Labels,
Value
),
{ok,
{store,
gleam@dict:insert(
erlang:element(2, Store),
Name,
Updated_gauge
)}}
end
)
end
)
end
).
-file("/git/Themis/src/themis.gleam", 120).
-spec delete_gauge(store(), binary()) -> {ok, store()} | {error, store_error()}.
delete_gauge(Store, Name_string) ->
gleam@result:'try'(
begin
_pipe = internal@metric:new_name(Name_string),
gleam@result:try_recover(
_pipe,
fun(E) -> {error, {metric_error, E}} end
)
end,
fun(Name) ->
gleam@bool:guard(
not gleam@dict:has_key(erlang:element(2, Store), Name),
{error, metric_name_not_found},
fun() ->
New_gauges = gleam@dict:delete(
erlang:element(2, Store),
Name
),
{ok, {store, New_gauges}}
end
)
end
).
-file("/git/Themis/src/themis.gleam", 152).
-spec int(integer()) -> internal@prometheus:number_().
int(Value) ->
{int, Value}.
-file("/git/Themis/src/themis.gleam", 157).
-spec dec(float()) -> internal@prometheus:number_().
dec(Value) ->
{dec, Value}.
-file("/git/Themis/src/themis.gleam", 162).
-spec pos_inf() -> internal@prometheus:number_().
pos_inf() ->
pos_inf.
-file("/git/Themis/src/themis.gleam", 167).
-spec neg_inf() -> internal@prometheus:number_().
neg_inf() ->
neg_inf.
-file("/git/Themis/src/themis.gleam", 172).
-spec nan() -> internal@prometheus:number_().
nan() ->
na_n.
-file("/git/Themis/src/themis.gleam", 176).
-spec print_gauges(
gleam@dict:dict(internal@metric:metric_name(), internal@metric:metric(internal@metric@gauge:gauge(), internal@prometheus:number_()))
) -> binary().
print_gauges(Gauges) ->
_pipe = (gleam@dict:fold(
Gauges,
[],
fun(Current, Gauge, Name) ->
[<<(internal@metric@gauge:print(Name, Gauge))/binary, "\n"/utf8>> |
Current]
end
)),
_pipe@1 = lists:reverse(_pipe),
_pipe@2 = gleam_stdlib:identity(_pipe@1),
unicode:characters_to_binary(_pipe@2).
-file("/git/Themis/src/themis.gleam", 147).
-spec print(store()) -> binary().
print(Store) ->
print_gauges(erlang:element(2, Store)).
-file("/git/Themis/src/themis.gleam", 188).
-spec is_metric_name_used(store(), internal@metric:metric_name()) -> boolean().
is_metric_name_used(Store, Name) ->
gleam@bool:guard(
gleam@dict:has_key(erlang:element(2, Store), Name),
true,
fun() -> false end
).
-file("/git/Themis/src/themis.gleam", 50).
-spec add_gauge(store(), binary(), binary()) -> {ok, store()} |
{error, store_error()}.
add_gauge(Store, Name_string, Description) ->
gleam@result:'try'(
begin
_pipe = internal@metric:new_name(Name_string),
gleam@result:try_recover(
_pipe,
fun(E) -> {error, {metric_error, E}} end
)
end,
fun(Name) ->
gleam@bool:guard(
is_metric_name_used(Store, Name),
{error, metric_name_already_in_use},
fun() ->
Gauge = internal@metric@gauge:new(Description),
{ok,
{store,
gleam@dict:insert(
erlang:element(2, Store),
Name,
Gauge
)}}
end
)
end
).