-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 ).