-module(pharos@internal@supervisor). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/pharos/internal/supervisor.gleam"). -export([start_link/6]). -export_type([alert_manager_spec/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(false). -type alert_manager_spec() :: {alert_manager_spec, pharos@alert:alert_data(), gleam@erlang@process:name(pharos@alert_manager:message())}. -file("src/pharos/internal/supervisor.gleam", 138). ?DOC(false). -spec poller_supervisor_child(pharos@config:config()) -> gleam@otp@supervision:child_specification(gleam@otp@static_supervisor:supervisor()). poller_supervisor_child(Config) -> Specs = lists:append( pharos@internal@poller:child_specs( erlang:element(2, Config), erlang:element(14, Config) ), pharos@internal@poller:probe_child_specs( erlang:element(4, Config), erlang:element(14, Config) ) ), Inner = gleam@list:fold( Specs, gleam@otp@static_supervisor:new(one_for_one), fun(Builder, Spec) -> gleam@otp@static_supervisor:add(Builder, Spec) end ), gleam@otp@static_supervisor:supervised(Inner). -file("src/pharos/internal/supervisor.gleam", 164). ?DOC(false). -spec state_machine_error_to_string(eparch@state_machine:start_error()) -> binary(). state_machine_error_to_string(Error) -> case Error of init_timeout -> <<"alert manager init timeout"/utf8>>; {init_failed, Reason} -> Reason; {init_exited, _} -> <<"alert manager init exited"/utf8>>; {already_started, _} -> <<"alert manager name already registered"/utf8>> end. -file("src/pharos/internal/supervisor.gleam", 117). ?DOC(false). -spec alert_manager_child( pharos@alert:alert_data(), pharos@event_bus:event_bus(), gleam@erlang@process:name(pharos@alert_manager:message()) ) -> gleam@otp@supervision:child_specification(pharos@alert_manager:alert_manager()). alert_manager_child(Data, Bus, Name) -> gleam@otp@supervision:worker( fun() -> case pharos@alert_manager:start_link(Data, Bus, Name) of {ok, Handle} -> case gleam_erlang_ffi:process_named(Name) of {ok, Pid} -> {ok, {started, Pid, Handle}}; {error, _} -> {error, {init_failed, <<"alert manager registered name not found after start"/utf8>>}} end; {error, Error} -> {error, {init_failed, state_machine_error_to_string(Error)}} end end ). -file("src/pharos/internal/supervisor.gleam", 100). ?DOC(false). -spec alert_supervisor_child( gleam@erlang@process:name(pharos@alert:alert_event()), list(alert_manager_spec()) ) -> gleam@otp@supervision:child_specification(gleam@otp@static_supervisor:supervisor()). alert_supervisor_child(Bus_name, Manager_specs) -> Bus = pharos@event_bus:from_name(Bus_name), Inner = gleam@list:fold( Manager_specs, gleam@otp@static_supervisor:new(one_for_one), fun(Builder, Spec) -> {alert_manager_spec, Data, Name} = Spec, gleam@otp@static_supervisor:add( Builder, alert_manager_child(Data, Bus, Name) ) end ), gleam@otp@static_supervisor:supervised(Inner). -file("src/pharos/internal/supervisor.gleam", 157). ?DOC(false). -spec event_manager_error_to_string(eparch@event_manager:start_error()) -> binary(). event_manager_error_to_string(Error) -> case Error of {already_started, _} -> <<"event bus already started"/utf8>>; {start_failed, Reason} -> Reason end. -file("src/pharos/internal/supervisor.gleam", 90). ?DOC(false). -spec event_bus_child(gleam@erlang@process:name(pharos@alert:alert_event())) -> gleam@otp@supervision:child_specification(pharos@event_bus:event_bus()). event_bus_child(Bus_name) -> gleam@otp@supervision:worker( fun() -> case pharos@event_bus:start_link(Bus_name) of {ok, {Pid, Bus}} -> {ok, {started, Pid, Bus}}; {error, Error} -> {error, {init_failed, event_manager_error_to_string(Error)}} end end ). -file("src/pharos/internal/supervisor.gleam", 54). ?DOC(false). -spec start_link( pharos@config:config(), gleam@erlang@process:name(pharos@alert:alert_event()), list(alert_manager_spec()), gleam@otp@supervision:child_specification(pharos@internal@hot_buffer:hot_buffer()), gleam@option:option(gleam@otp@supervision:child_specification(pharos@internal@spillover:spillover())), gleam@option:option(gleam@otp@supervision:child_specification(pharos@internal@connection:connection())) ) -> {ok, gleam@otp@actor:started(gleam@otp@static_supervisor:supervisor())} | {error, gleam@otp@actor:start_error()}. start_link( Config, Bus_name, Manager_specs, Buffer_child, Spillover_child, Connection_child ) -> With_spillover = case Spillover_child of none -> _pipe = gleam@otp@static_supervisor:new(rest_for_one), _pipe@1 = gleam@otp@static_supervisor:add( _pipe, event_bus_child(Bus_name) ), gleam@otp@static_supervisor:add(_pipe@1, Buffer_child); {some, Child} -> _pipe@2 = gleam@otp@static_supervisor:new(rest_for_one), _pipe@3 = gleam@otp@static_supervisor:add( _pipe@2, event_bus_child(Bus_name) ), _pipe@4 = gleam@otp@static_supervisor:add(_pipe@3, Buffer_child), gleam@otp@static_supervisor:add(_pipe@4, Child) end, Base = begin _pipe@5 = With_spillover, _pipe@6 = gleam@otp@static_supervisor:add( _pipe@5, alert_supervisor_child(Bus_name, Manager_specs) ), gleam@otp@static_supervisor:add( _pipe@6, poller_supervisor_child(Config) ) end, _pipe@7 = case Connection_child of none -> Base; {some, Child@1} -> gleam@otp@static_supervisor:add(Base, Child@1) end, gleam@otp@static_supervisor:start(_pipe@7).