src/lightspeed@integration@ops.erl

-module(lightspeed@integration@ops).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/integration/ops.gleam").
-export([production_pattern/0, mixed_runtime_pattern/0, local_dev_pattern/0, valid/1, backend_label/1, signature/1, backend/1, name/1]).
-export_type([backend/0, pattern/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.

?MODULEDOC(" Operator tooling integration patterns for ecosystem compatibility (M26).\n").

-type backend() :: beam_observer |
    {telemetry_bridge, binary()} |
    {mixed_telemetry, binary(), binary()}.

-type pattern() :: {pattern,
        binary(),
        backend(),
        boolean(),
        boolean(),
        boolean(),
        boolean(),
        boolean()}.

-file("src/lightspeed/integration/ops.gleam", 24).
?DOC(" Production operator pattern.\n").
-spec production_pattern() -> pattern().
production_pattern() ->
    {pattern,
        <<"production_ops"/utf8>>,
        {mixed_telemetry,
            <<"MyApp.TelemetryMetrics"/utf8>>,
            <<"MyApp.TelemetryTraces"/utf8>>},
        true,
        true,
        true,
        true,
        true}.

-file("src/lightspeed/integration/ops.gleam", 40).
?DOC(" Mixed-runtime operator pattern.\n").
-spec mixed_runtime_pattern() -> pattern().
mixed_runtime_pattern() ->
    {pattern,
        <<"mixed_runtime_ops"/utf8>>,
        {telemetry_bridge, <<"MyApp.TelemetryBridge"/utf8>>},
        true,
        true,
        true,
        true,
        true}.

-file("src/lightspeed/integration/ops.gleam", 53).
?DOC(" Local development operator pattern.\n").
-spec local_dev_pattern() -> pattern().
local_dev_pattern() ->
    {pattern,
        <<"local_dev_ops"/utf8>>,
        beam_observer,
        true,
        true,
        true,
        true,
        true}.

-file("src/lightspeed/integration/ops.gleam", 113).
-spec backend_valid(backend()) -> boolean().
backend_valid(Backend) ->
    case Backend of
        beam_observer ->
            true;

        {telemetry_bridge, Module} ->
            Module /= <<""/utf8>>;

        {mixed_telemetry, Metrics_module, Traces_module} ->
            (Metrics_module /= <<""/utf8>>) andalso (Traces_module /= <<""/utf8>>)
    end.

-file("src/lightspeed/integration/ops.gleam", 66).
?DOC(" Validate operator integration constraints.\n").
-spec valid(pattern()) -> boolean().
valid(Pattern) ->
    ((((backend_valid(erlang:element(3, Pattern)) andalso erlang:element(
        4,
        Pattern
    ))
    andalso erlang:element(5, Pattern))
    andalso erlang:element(6, Pattern))
    andalso erlang:element(7, Pattern))
    andalso erlang:element(8, Pattern).

-file("src/lightspeed/integration/ops.gleam", 76).
?DOC(" Stable backend label.\n").
-spec backend_label(backend()) -> binary().
backend_label(Backend) ->
    case Backend of
        beam_observer ->
            <<"beam_observer"/utf8>>;

        {telemetry_bridge, Module} ->
            <<"telemetry_bridge:"/utf8, Module/binary>>;

        {mixed_telemetry, Metrics_module, Traces_module} ->
            <<<<<<"mixed_telemetry:"/utf8, Metrics_module/binary>>/binary,
                    ":"/utf8>>/binary,
                Traces_module/binary>>
    end.

-file("src/lightspeed/integration/ops.gleam", 122).
-spec bool_label(boolean()) -> binary().
bool_label(Value) ->
    case Value of
        true ->
            <<"true"/utf8>>;

        false ->
            <<"false"/utf8>>
    end.

-file("src/lightspeed/integration/ops.gleam", 86).
?DOC(" Stable pattern signature.\n").
-spec signature(pattern()) -> binary().
signature(Pattern) ->
    <<<<<<<<<<<<<<<<<<<<<<<<<<"ops:"/utf8, (erlang:element(2, Pattern))/binary>>/binary,
                                                    "|backend="/utf8>>/binary,
                                                (backend_label(
                                                    erlang:element(3, Pattern)
                                                ))/binary>>/binary,
                                            "|runbook_ready="/utf8>>/binary,
                                        (bool_label(erlang:element(4, Pattern)))/binary>>/binary,
                                    "|monitor_ready="/utf8>>/binary,
                                (bool_label(erlang:element(5, Pattern)))/binary>>/binary,
                            "|rollback_ready="/utf8>>/binary,
                        (bool_label(erlang:element(6, Pattern)))/binary>>/binary,
                    "|incident_ready="/utf8>>/binary,
                (bool_label(erlang:element(7, Pattern)))/binary>>/binary,
            "|slo_burn_rate_ready="/utf8>>/binary,
        (bool_label(erlang:element(8, Pattern)))/binary>>.

-file("src/lightspeed/integration/ops.gleam", 104).
?DOC(" Pattern backend.\n").
-spec backend(pattern()) -> backend().
backend(Pattern) ->
    erlang:element(3, Pattern).

-file("src/lightspeed/integration/ops.gleam", 109).
?DOC(" Pattern name.\n").
-spec name(pattern()) -> binary().
name(Pattern) ->
    erlang:element(2, Pattern).