-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() -> {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", 58). ?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", 72). ?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", 151). ?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", 98). ?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 ), 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", 29). ?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) -> _pipe = Irs, _pipe@1 = gleam@list:try_map(_pipe, fun ir_to_terraform_resource/1), gleam@result:map(_pipe@1, fun(R) -> {R, []} end). -file("src/caffeine_lang/codegen/dynatrace.gleam", 15). ?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(_use0) -> {Resources, _} = _use0, {ok, caffeine_lang@codegen@generator_utils:render_terraform_config( Resources, terraform_settings(), [provider()], variables() )} end ).