Current section

Files

Jump to
caffeine_lang src caffeine_lang@phase_4@slo_resolver.erl
Raw

src/caffeine_lang@phase_4@slo_resolver.erl

-module(caffeine_lang@phase_4@slo_resolver).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/phase_4/slo_resolver.gleam").
-export([resolve_sli/2, resolve_slo/3, resolve_slos/1]).
-file("src/caffeine_lang/phase_4/slo_resolver.gleam", 123).
-spec resolve_primary(
caffeine_lang@cql@parser:primary(),
gleam@dict:dict(binary(), binary())
) -> {ok, caffeine_lang@cql@parser:primary()} | {error, binary()}.
resolve_primary(Primary, Resolved_queries) ->
case Primary of
{primary_word, Word} ->
case Word of
{word, Word_value} ->
case gleam_stdlib:map_get(Resolved_queries, Word_value) of
{ok, Resolved_value} ->
case caffeine_lang@cql@parser:parse_expr(
Resolved_value
) of
{ok, Parsed_exp} ->
case Parsed_exp of
{exp_container, Exp} ->
{ok, {primary_exp, Exp}}
end;
{error, _} ->
{ok, {primary_word, {word, Resolved_value}}}
end;
{error, _} ->
{ok, {primary_word, Word}}
end
end;
{primary_exp, Exp@1} ->
gleam@result:'try'(
resolve_exp(Exp@1, Resolved_queries),
fun(Resolved_exp) -> {ok, {primary_exp, Resolved_exp}} end
)
end.
-file("src/caffeine_lang/phase_4/slo_resolver.gleam", 106).
-spec resolve_exp(
caffeine_lang@cql@parser:exp(),
gleam@dict:dict(binary(), binary())
) -> {ok, caffeine_lang@cql@parser:exp()} | {error, binary()}.
resolve_exp(Exp, Resolved_queries) ->
case Exp of
{operator_expr, Left, Right, Op} ->
gleam@result:'try'(
resolve_exp(Left, Resolved_queries),
fun(Resolved_left) ->
gleam@result:'try'(
resolve_exp(Right, Resolved_queries),
fun(Resolved_right) ->
{ok,
{operator_expr,
Resolved_left,
Resolved_right,
Op}}
end
)
end
);
{primary, Primary} ->
gleam@result:'try'(
resolve_primary(Primary, Resolved_queries),
fun(Resolved_primary) -> {ok, {primary, Resolved_primary}} end
)
end.
-file("src/caffeine_lang/phase_4/slo_resolver.gleam", 94).
-spec resolve_cql_query(
caffeine_lang@cql@parser:exp_container(),
gleam@dict:dict(binary(), binary())
) -> {ok, caffeine_lang@cql@parser:exp_container()} | {error, binary()}.
resolve_cql_query(Query, Resolved_queries) ->
case Query of
{exp_container, Exp} ->
gleam@result:'try'(
resolve_exp(Exp, Resolved_queries),
fun(Resolved_exp) -> {ok, {exp_container, Resolved_exp}} end
)
end.
-file("src/caffeine_lang/phase_4/slo_resolver.gleam", 59).
-spec resolve_sli(
gleam@dict:dict(binary(), binary()),
caffeine_lang@types@ast@sli_type:sli_type()
) -> {ok, caffeine_lang@types@resolved@resolved_sli:sli()} | {error, binary()}.
resolve_sli(Filters, Sli_type) ->
Resolved_queries = begin
_pipe = erlang:element(4, Sli_type),
_pipe@1 = caffeine_lang@types@common@generic_dictionary:to_string_dict(
_pipe
),
_pipe@2 = maps:to_list(_pipe@1),
_pipe@4 = gleam@list:map(
_pipe@2,
fun(Pair) ->
{Metric_attribute, Template} = Pair,
Filter_names = maps:keys(Filters),
_pipe@3 = gleam@list:fold(
Filter_names,
Template,
fun(Acc, Name) ->
case gleam_stdlib:map_get(Filters, Name) of
{ok, Value} ->
gleam@string:replace(
Acc,
<<<<"$$"/utf8, Name/binary>>/binary,
"$$"/utf8>>,
Value
);
{error, _} ->
Acc
end
end
),
(fun(Processed) -> {Metric_attribute, Processed} end)(_pipe@3)
end
),
maps:from_list(_pipe@4)
end,
gleam@result:'try'(
resolve_cql_query(
erlang:element(4, erlang:element(3, Sli_type)),
Resolved_queries
),
fun(Resolved_query) ->
{ok,
{sli,
erlang:element(3, Sli_type),
Resolved_queries,
Resolved_query}}
end
).
-file("src/caffeine_lang/phase_4/slo_resolver.gleam", 33).
-spec resolve_slo(
caffeine_lang@types@ast@slo:slo(),
binary(),
list(caffeine_lang@types@ast@sli_type:sli_type())
) -> {ok, caffeine_lang@types@resolved@resolved_slo:slo()} | {error, binary()}.
resolve_slo(Slo, Team_name, Sli_types) ->
Sli_type@2 = case begin
_pipe = Sli_types,
gleam@list:find(
_pipe,
fun(Sli_type) ->
erlang:element(2, Sli_type) =:= erlang:element(4, Slo)
end
)
end of
{ok, Sli_type@1} -> Sli_type@1;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/phase_4/slo_resolver"/utf8>>,
function => <<"resolve_slo"/utf8>>,
line => 38,
value => _assert_fail,
start => 998,
'end' => 1102,
pattern_start => 1009,
pattern_end => 1021})
end,
Filters_dict = caffeine_lang@types@common@generic_dictionary:to_string_dict(
erlang:element(2, Slo)
),
gleam@result:'try'(
resolve_sli(Filters_dict, Sli_type@2),
fun(Resolve_sli) ->
{ok,
{slo,
erlang:element(6, Slo),
erlang:element(3, Slo),
erlang:element(5, Slo),
Team_name,
Resolve_sli}}
end
).
-file("src/caffeine_lang/phase_4/slo_resolver.gleam", 13).
-spec resolve_slos(caffeine_lang@types@ast@organization:organization()) -> {ok,
list(caffeine_lang@types@resolved@resolved_slo:slo())} |
{error, binary()}.
resolve_slos(Organization) ->
Sli_types = begin
_pipe = erlang:element(3, Organization),
_pipe@1 = gleam@list:flat_map(
_pipe,
fun(Service_definition) -> erlang:element(3, Service_definition) end
),
gleam@list:unique(_pipe@1)
end,
_pipe@2 = erlang:element(2, Organization),
_pipe@5 = gleam@list:map(
_pipe@2,
fun(Team) -> _pipe@3 = erlang:element(3, Team),
_pipe@4 = gleam@list:map(
_pipe@3,
fun(Slo) ->
resolve_slo(Slo, erlang:element(2, Team), Sli_types)
end
),
gleam@result:all(_pipe@4) end
),
_pipe@6 = gleam@result:all(_pipe@5),
gleam@result:map(_pipe@6, fun lists:append/1).