Current section
Files
Jump to
Current section
Files
src/themis@internal@metric.erl
-module(themis@internal@metric).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/themis/internal/metric.gleam").
-export([make_histogram_metric_names/1, name_to_string/1, is_valid_name/1, new_name/2]).
-export_type([metric_error/0, metric_name/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type metric_error() :: {invalid_metric_name, binary()} |
{invalid_word_in_name, binary()}.
-opaque metric_name() :: {metric_name, binary()}.
-file("src/themis/internal/metric.gleam", 60).
?DOC(false).
-spec make_histogram_metric_names(metric_name()) -> {metric_name(),
metric_name(),
metric_name()}.
make_histogram_metric_names(From) ->
Base_name = erlang:element(2, From),
{{metric_name, <<Base_name/binary, "_bucket"/utf8>>},
{metric_name, <<Base_name/binary, "_count"/utf8>>},
{metric_name, <<Base_name/binary, "_sum"/utf8>>}}.
-file("src/themis/internal/metric.gleam", 71).
?DOC(false).
-spec name_to_string(metric_name()) -> binary().
name_to_string(From) ->
erlang:element(2, From).
-file("src/themis/internal/metric.gleam", 32).
?DOC(false).
-spec is_valid_name(binary()) -> boolean().
is_valid_name(Name) ->
Reg@1 = case begin
_pipe = <<"^[a-zA-Z][a-zA-Z0-9_:]*$"/utf8>>,
gleam@regexp:from_string(_pipe)
end of
{ok, Reg} -> Reg;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"themis/internal/metric"/utf8>>,
function => <<"is_valid_name"/utf8>>,
line => 33,
value => _assert_fail,
start => 616,
'end' => 685,
pattern_start => 627,
pattern_end => 634})
end,
begin
_pipe@1 = Reg@1,
gleam@regexp:check(_pipe@1, Name)
end
andalso begin
_pipe@2 = gleam@list:map(
[<<"_count"/utf8>>, <<"_sum"/utf8>>, <<"_bucket"/utf8>>],
fun(Word) -> not gleam_stdlib:string_ends_with(Name, Word) end
),
gleam@list:all(_pipe@2, fun gleam@function:identity/1)
end.
-file("src/themis/internal/metric.gleam", 42).
?DOC(false).
-spec new_name(binary(), list(binary())) -> {ok, metric_name()} |
{error, metric_error()}.
new_name(From, Blacklist) ->
R = begin
gleam@list:try_each(
Blacklist,
fun(Word) -> case gleam_stdlib:contains_string(From, Word) of
false ->
{ok, nil};
true ->
{error, {invalid_word_in_name, Word}}
end end
)
end,
gleam@result:'try'(R, fun(_) -> case is_valid_name(From) of
false ->
{error, {invalid_metric_name, From}};
true ->
{ok, {metric_name, From}}
end end).