Packages
caffeine_lang
4.3.7
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang@codegen@dynatrace.erl
-module(caffeine_lang@codegen@dynatrace).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/codegen/dynatrace.gleam").
-export([terraform_settings/0, provider/0, variables/0, window_to_evaluation_window/1, ir_to_terraform_resource/1, generate_resources/1, generate_terraform/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/caffeine_lang/codegen/dynatrace.gleam", 40).
?DOC(false).
-spec terraform_settings() -> terra_madre@terraform:terraform_settings().
terraform_settings() ->
{terraform_settings,
none,
maps:from_list(
[{<<"dynatrace"/utf8>>,
{provider_requirement,
<<"dynatrace-oss/dynatrace"/utf8>>,
{some, <<"~> 1.0"/utf8>>}}}]
),
none,
none}.
-file("src/caffeine_lang/codegen/dynatrace.gleam", 59).
?DOC(false).
-spec provider() -> terra_madre@terraform:provider().
provider() ->
{provider,
<<"dynatrace"/utf8>>,
none,
maps:from_list(
[{<<"dt_env_url"/utf8>>,
terra_madre@hcl:ref(<<"var.dynatrace_env_url"/utf8>>)},
{<<"dt_api_token"/utf8>>,
terra_madre@hcl:ref(<<"var.dynatrace_api_token"/utf8>>)}]
),
[]}.
-file("src/caffeine_lang/codegen/dynatrace.gleam", 73).
?DOC(false).
-spec variables() -> list(terra_madre@terraform:variable()).
variables() ->
[{variable,
<<"dynatrace_env_url"/utf8>>,
{some, {identifier, <<"string"/utf8>>}},
none,
{some, <<"Dynatrace environment URL"/utf8>>},
none,
none,
[]},
{variable,
<<"dynatrace_api_token"/utf8>>,
{some, {identifier, <<"string"/utf8>>}},
none,
{some, <<"Dynatrace API token"/utf8>>},
{some, true},
none,
[]}].
-file("src/caffeine_lang/codegen/dynatrace.gleam", 164).
?DOC(" Build a description string for the SLO.\n").
-spec build_description(caffeine_lang@linker@ir:intermediate_representation()) -> binary().
build_description(Ir) ->
Runbook = case caffeine_lang@linker@ir:get_slo_fields(erlang:element(6, Ir)) of
{some, Slo} ->
erlang:element(7, Slo);
none ->
none
end,
case Runbook of
{some, Url} ->
<<<<"[Runbook]("/utf8, Url/binary>>/binary, ")"/utf8>>;
none ->
<<<<<<<<<<<<"Managed by Caffeine ("/utf8,
(erlang:element(3, erlang:element(2, Ir)))/binary>>/binary,
"/"/utf8>>/binary,
(erlang:element(6, erlang:element(2, Ir)))/binary>>/binary,
"/"/utf8>>/binary,
(erlang:element(4, erlang:element(2, Ir)))/binary>>/binary,
")"/utf8>>
end.
-file("src/caffeine_lang/codegen/dynatrace.gleam", 186).
?DOC(false).
-spec window_to_evaluation_window(integer()) -> binary().
window_to_evaluation_window(Days) ->
<<<<"-"/utf8, (erlang:integer_to_binary(Days))/binary>>/binary, "d"/utf8>>.
-file("src/caffeine_lang/codegen/dynatrace.gleam", 99).
?DOC(false).
-spec ir_to_terraform_resource(
caffeine_lang@linker@ir:intermediate_representation()
) -> {ok, terra_madre@terraform:resource()} |
{error, caffeine_lang@errors:compilation_error()}.
ir_to_terraform_resource(Ir) ->
Identifier = caffeine_lang@linker@ir:ir_to_identifier(Ir),
Resource_name = terra_madre@common:sanitize_terraform_identifier(
erlang:element(3, Ir)
),
gleam@result:'try'(
begin
_pipe = caffeine_lang@linker@ir:get_slo_fields(
erlang:element(6, Ir)
),
gleam@option:to_result(
_pipe,
{generator_terraform_resolution_error,
<<"dynatrace"/utf8>>,
<<<<"expectation '"/utf8, Identifier/binary>>/binary,
"' - missing SLO artifact data"/utf8>>,
caffeine_lang@errors:empty_context()}
)
end,
fun(Slo) ->
gleam@result:'try'(
begin
_pipe@1 = erlang:element(5, Slo),
gleam@option:to_result(
_pipe@1,
{generator_terraform_resolution_error,
<<"dynatrace"/utf8>>,
<<<<"expectation '"/utf8, Identifier/binary>>/binary,
"' - missing evaluation for Dynatrace SLO"/utf8>>,
caffeine_lang@errors:empty_context()}
)
end,
fun(Evaluation_expr) ->
gleam@result:'try'(
begin
_pipe@2 = caffeine_query_language@generator:resolve_slo_to_expression(
Evaluation_expr,
erlang:element(3, Slo)
),
gleam@result:map_error(
_pipe@2,
fun(Err) ->
{generator_terraform_resolution_error,
<<"dynatrace"/utf8>>,
<<<<<<"expectation '"/utf8,
Identifier/binary>>/binary,
"' - "/utf8>>/binary,
Err/binary>>,
caffeine_lang@errors:empty_context()}
end
)
end,
fun(Metric_expression) ->
Evaluation_window = window_to_evaluation_window(
erlang:element(4, Slo)
),
Description = build_description(Ir),
Resource = {resource,
<<"dynatrace_slo_v2"/utf8>>,
Resource_name,
maps:from_list(
[{<<"name"/utf8>>,
{string_literal,
erlang:element(
2,
erlang:element(2, Ir)
)}},
{<<"enabled"/utf8>>,
{bool_literal, true}},
{<<"custom_description"/utf8>>,
{string_literal, Description}},
{<<"evaluation_type"/utf8>>,
{string_literal,
<<"AGGREGATE"/utf8>>}},
{<<"evaluation_window"/utf8>>,
{string_literal, Evaluation_window}},
{<<"metric_expression"/utf8>>,
{string_literal, Metric_expression}},
{<<"metric_name"/utf8>>,
{string_literal, Resource_name}},
{<<"target_success"/utf8>>,
{float_literal,
erlang:element(2, Slo)}}]
),
[],
terra_madre@hcl:empty_meta(),
none},
{ok, Resource}
end
)
end
)
end
).
-file("src/caffeine_lang/codegen/dynatrace.gleam", 32).
?DOC(false).
-spec generate_resources(
list(caffeine_lang@linker@ir:intermediate_representation())
) -> {ok, list(terra_madre@terraform:resource())} |
{error, caffeine_lang@errors:compilation_error()}.
generate_resources(Irs) ->
_pipe = Irs,
gleam@list:try_map(_pipe, fun ir_to_terraform_resource/1).
-file("src/caffeine_lang/codegen/dynatrace.gleam", 18).
?DOC(" Generate Terraform HCL from a list of Dynatrace IntermediateRepresentations.\n").
-spec generate_terraform(
list(caffeine_lang@linker@ir:intermediate_representation())
) -> {ok, binary()} | {error, caffeine_lang@errors:compilation_error()}.
generate_terraform(Irs) ->
gleam@result:'try'(
generate_resources(Irs),
fun(Resources) ->
{ok,
caffeine_lang@codegen@generator_utils:render_terraform_config(
Resources,
terraform_settings(),
[provider()],
variables()
)}
end
).