Packages
caffeine_lang
5.1.1
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@platforms.erl
-module(caffeine_lang@codegen@platforms).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/caffeine_lang/codegen/platforms.gleam").
-export([all/0, for_vendor/1, terraform_settings/1, provider/1, generate_terraform/2]).
-export_type([platform/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type platform() :: {platform,
caffeine_lang@analysis@vendor:vendor(),
binary(),
binary(),
binary(),
list({binary(), terra_madre@hcl:expr()}),
list(terra_madre@terraform:variable()),
fun((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()})}.
-file("src/caffeine_lang/codegen/platforms.gleam", 175).
-spec typed_var(binary(), binary(), binary(), boolean()) -> terra_madre@terraform:variable().
typed_var(Name, Type_, Description, Sensitive) ->
{variable,
Name,
{some, {identifier, Type_}},
none,
{some, Description},
case Sensitive of
true ->
{some, true};
false ->
none
end,
none,
[]}.
-file("src/caffeine_lang/codegen/platforms.gleam", 199).
-spec plain_string(binary(), binary()) -> terra_madre@terraform:variable().
plain_string(Name, Description) ->
typed_var(Name, <<"string"/utf8>>, Description, false).
-file("src/caffeine_lang/codegen/platforms.gleam", 195).
-spec sensitive_string(binary(), binary()) -> terra_madre@terraform:variable().
sensitive_string(Name, Description) ->
typed_var(Name, <<"string"/utf8>>, Description, true).
-file("src/caffeine_lang/codegen/platforms.gleam", 144).
-spec newrelic_platform() -> platform().
newrelic_platform() ->
{platform,
new_relic,
<<"newrelic"/utf8>>,
<<"newrelic/newrelic"/utf8>>,
<<"~> 3.0"/utf8>>,
[{<<"account_id"/utf8>>,
terra_madre@hcl:ref(<<"var.newrelic_account_id"/utf8>>)},
{<<"api_key"/utf8>>,
terra_madre@hcl:ref(<<"var.newrelic_api_key"/utf8>>)},
{<<"region"/utf8>>,
terra_madre@hcl:ref(<<"var.newrelic_region"/utf8>>)}],
[typed_var(
<<"newrelic_account_id"/utf8>>,
<<"number"/utf8>>,
<<"New Relic account ID"/utf8>>,
false
),
sensitive_string(
<<"newrelic_api_key"/utf8>>,
<<"New Relic API key"/utf8>>
),
{variable,
<<"newrelic_region"/utf8>>,
{some, {identifier, <<"string"/utf8>>}},
{some, {string_literal, <<"US"/utf8>>}},
{some, <<"New Relic region"/utf8>>},
none,
none,
[]},
plain_string(
<<"newrelic_entity_guid"/utf8>>,
<<"New Relic entity GUID"/utf8>>
)],
fun caffeine_lang@codegen@newrelic:generate_resources/1}.
-file("src/caffeine_lang/codegen/platforms.gleam", 126).
-spec dynatrace_platform() -> platform().
dynatrace_platform() ->
{platform,
dynatrace,
<<"dynatrace"/utf8>>,
<<"dynatrace-oss/dynatrace"/utf8>>,
<<"~> 1.0"/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>>)}],
[plain_string(
<<"dynatrace_env_url"/utf8>>,
<<"Dynatrace environment URL"/utf8>>
),
sensitive_string(
<<"dynatrace_api_token"/utf8>>,
<<"Dynatrace API token"/utf8>>
)],
fun caffeine_lang@codegen@dynatrace:generate_resources/1}.
-file("src/caffeine_lang/codegen/platforms.gleam", 111).
-spec honeycomb_platform() -> platform().
honeycomb_platform() ->
{platform,
honeycomb,
<<"honeycombio"/utf8>>,
<<"honeycombio/honeycombio"/utf8>>,
<<"~> 0.31"/utf8>>,
[{<<"api_key"/utf8>>,
terra_madre@hcl:ref(<<"var.honeycomb_api_key"/utf8>>)}],
[sensitive_string(
<<"honeycomb_api_key"/utf8>>,
<<"Honeycomb API key"/utf8>>
),
plain_string(
<<"honeycomb_dataset"/utf8>>,
<<"Honeycomb dataset slug"/utf8>>
)],
fun caffeine_lang@codegen@honeycomb:generate_resources/1}.
-file("src/caffeine_lang/codegen/platforms.gleam", 93).
-spec datadog_platform() -> platform().
datadog_platform() ->
{platform,
datadog,
<<"datadog"/utf8>>,
<<"DataDog/datadog"/utf8>>,
<<"~> 3.0"/utf8>>,
[{<<"api_key"/utf8>>,
terra_madre@hcl:ref(<<"var.datadog_api_key"/utf8>>)},
{<<"app_key"/utf8>>,
terra_madre@hcl:ref(<<"var.datadog_app_key"/utf8>>)}],
[sensitive_string(
<<"datadog_api_key"/utf8>>,
<<"Datadog API key"/utf8>>
),
sensitive_string(
<<"datadog_app_key"/utf8>>,
<<"Datadog Application key"/utf8>>
)],
fun caffeine_lang@codegen@datadog:generate_resources/1}.
-file("src/caffeine_lang/codegen/platforms.gleam", 34).
?DOC(" All supported platforms. Order is stable for deterministic output.\n").
-spec all() -> list(platform()).
all() ->
[datadog_platform(),
honeycomb_platform(),
dynatrace_platform(),
newrelic_platform()].
-file("src/caffeine_lang/codegen/platforms.gleam", 40).
?DOC(
" Look up the platform configuration for a given vendor.\n"
" Total: every Vendor variant has a corresponding Platform.\n"
).
-spec for_vendor(caffeine_lang@analysis@vendor:vendor()) -> platform().
for_vendor(V) ->
P@2 = case gleam@list:find(all(), fun(P) -> erlang:element(2, P) =:= V end) of
{ok, P@1} -> P@1;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"caffeine_lang/codegen/platforms"/utf8>>,
function => <<"for_vendor"/utf8>>,
line => 41,
value => _assert_fail,
start => 1484,
'end' => 1544,
pattern_start => 1495,
pattern_end => 1500})
end,
P@2.
-file("src/caffeine_lang/codegen/platforms.gleam", 46).
?DOC(" Derive the TerraformSettings block for a platform.\n").
-spec terraform_settings(platform()) -> terra_madre@terraform:terraform_settings().
terraform_settings(P) ->
{terraform_settings,
none,
maps:from_list(
[{erlang:element(3, P),
{provider_requirement,
erlang:element(4, P),
{some, erlang:element(5, P)}}}]
),
none,
none}.
-file("src/caffeine_lang/codegen/platforms.gleam", 64).
?DOC(" Derive the Provider block for a platform.\n").
-spec provider(platform()) -> terra_madre@terraform:provider().
provider(P) ->
{provider,
erlang:element(3, P),
none,
maps:from_list(erlang:element(6, P)),
[]}.
-file("src/caffeine_lang/codegen/platforms.gleam", 75).
?DOC(
" Generate complete Terraform output (boilerplate + resources) for a platform.\n"
" Used in tests to produce full HCL for a single vendor in isolation.\n"
).
-spec generate_terraform(
platform(),
list(caffeine_lang@linker@ir:intermediate_representation(caffeine_lang@linker@ir:resolved()))
) -> {ok, {binary(), list(binary())}} |
{error, caffeine_lang@errors:compilation_error()}.
generate_terraform(P, Irs) ->
gleam@result:'try'(
(erlang:element(8, P))(Irs),
fun(_use0) ->
{Resources, Warnings} = _use0,
{ok,
{caffeine_lang@codegen@generator_utils:render_terraform_config(
Resources,
terraform_settings(P),
[provider(P)],
erlang:element(7, P)
),
Warnings}}
end
).