-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(caffeine_lang@linker@ir:resolved()) ) -> {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, 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(caffeine_lang@linker@ir:resolved())) ) -> {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(caffeine_lang@linker@ir:resolved())) ) -> {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 ).