-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([window_to_evaluation_window/1, ir_to_terraform_resource/1, generate_resources/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", 76). ?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", 27). ?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) ), Slo = erlang:element(5, Ir), 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 ). -file("src/caffeine_lang/codegen/dynatrace.gleam", 15). ?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 ).