Current section

Files

Jump to
caffeine_lang src caffeine_lang@codegen@dynatrace.erl
Raw

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", 39).
?DOC(false).
-spec terraform_settings() -> terra_madre@terraform:terraform_settings().
terraform_settings() ->
caffeine_lang@codegen@generator_utils:build_terraform_settings(
<<"dynatrace"/utf8>>,
<<"dynatrace-oss/dynatrace"/utf8>>,
<<"~> 1.0"/utf8>>
).
-file("src/caffeine_lang/codegen/dynatrace.gleam", 49).
?DOC(false).
-spec provider() -> terra_madre@terraform:provider().
provider() ->
caffeine_lang@codegen@generator_utils:build_provider(
<<"dynatrace"/utf8>>,
[{<<"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", 61).
?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", 140).
?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", 87).
?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) ->
Resource_name = terra_madre@common:sanitize_terraform_identifier(
erlang:element(3, Ir)
),
gleam@result:'try'(
caffeine_lang@codegen@generator_utils:require_slo_fields(
Ir,
<<"dynatrace"/utf8>>
),
fun(Slo) ->
gleam@result:'try'(
caffeine_lang@codegen@generator_utils:require_evaluation(
Slo,
Ir,
<<"dynatrace"/utf8>>
),
fun(Evaluation_expr) ->
gleam@result:'try'(
caffeine_lang@codegen@generator_utils:resolve_cql_expression(
Evaluation_expr,
erlang:element(3, Slo),
Ir,
<<"dynatrace"/utf8>>
),
fun(Metric_expression) ->
Evaluation_window = window_to_evaluation_window(
erlang:element(4, Slo)
),
Description = caffeine_lang@codegen@generator_utils:build_description(
Ir,
Slo
),
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", 28).
?DOC(false).
-spec generate_resources(
list(caffeine_lang@linker@ir:intermediate_representation())
) -> {ok, {list(terra_madre@terraform:resource()), list(binary())}} |
{error, caffeine_lang@errors:compilation_error()}.
generate_resources(Irs) ->
caffeine_lang@codegen@generator_utils:generate_resources_simple(
Irs,
fun ir_to_terraform_resource/1
).
-file("src/caffeine_lang/codegen/dynatrace.gleam", 14).
?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) ->
caffeine_lang@codegen@generator_utils:generate_terraform(
Irs,
terraform_settings(),
provider(),
variables(),
fun generate_resources/1
).