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]).
-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]).
-type metric_error() :: {invalid_metric_name, binary()} |
{invalid_word_in_name, binary()}.
-opaque metric_name() :: {metric_name, binary()}.
-file("/git/Themis/src/themis/internal/metric.gleam", 60).
-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("/git/Themis/src/themis/internal/metric.gleam", 71).
-spec name_to_string(metric_name()) -> binary().
name_to_string(From) ->
erlang:element(2, From).
-file("/git/Themis/src/themis/internal/metric.gleam", 32).
-spec is_valid_name(binary()) -> boolean().
is_valid_name(Name) ->
_assert_subject = begin
_pipe = <<"^[a-zA-Z][a-zA-Z0-9_:]*$"/utf8>>,
gleam@regexp:from_string(_pipe)
end,
{ok, Reg} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
value => _assert_fail,
module => <<"themis/internal/metric"/utf8>>,
function => <<"is_valid_name"/utf8>>,
line => 33})
end,
begin
_pipe@1 = Reg,
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("/git/Themis/src/themis/internal/metric.gleam", 42).
-spec new_name(binary(), list(binary())) -> {ok, metric_name()} |
{error, metric_error()}.
new_name(From, Blacklist) ->
R = (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
)),
gleam@result:'try'(R, fun(_) -> case is_valid_name(From) of
false ->
{error, {invalid_metric_name, From}};
true ->
{ok, {metric_name, From}}
end end).