Packages

An Elixir library for generating logs in compliance with the Elastic Common Schema (ECS) standard.

Current section

Files

Jump to
ecs_elixir_core lib application shared supervisor.ex
Raw

lib/application/shared/supervisor.ex

defmodule EcsElixirCore.Supervisor do
@moduledoc """
Supervisor for the EcsElixirCore application.
This supervisor is responsible for starting and supervising the main components of the EcsElixirCore application.
"""
use Supervisor
alias EcsElixirCore.Application.Features.BasicInfo.BasicInfoConfig
alias EcsElixirCore.Application.Features.Masking.MaskingConfig
alias EcsElixirCore.Application.Features.Request.RequestConfig
alias EcsElixirCore.Application.Features.Response.ResponseConfig
alias EcsElixirCore.Application.Features.Sampling.SamplingConfig
alias EcsElixirCore.Domain.Shared.InternalLogging
@ecs_error_code "ECS_ER32000-01"
def start_link(opts \\ []) do
Supervisor.start_link(__MODULE__, opts, name: __MODULE__)
end
@impl true
def init(_opts) do
case validate_startup_config() do
:ok ->
children =
[
EcsElixirCore.Application.EcsMiddleware.PlugHandlerConfig,
{Task.Supervisor, name: EcsLoggerTaskSupervisor}
] ++ resolver_supervisor_children()
Supervisor.init(children, strategy: :one_for_one)
{:error, reason} ->
InternalLogging.log_error(
"Startup configuration validation failed: #{reason}",
__MODULE__
)
raise ArgumentError, reason
end
end
defp validate_startup_config do
with :ok <- MaskingConfig.validate_startup_config(),
:ok <- SamplingConfig.validate_startup_config(),
:ok <- RequestConfig.validate_startup_config(),
:ok <- BasicInfoConfig.validate_startup_config(),
:ok <- ResponseConfig.validate_startup_config() do
:ok
else
{:error, reason} ->
{:error, "#{@ecs_error_code}: #{reason}"}
end
end
defp resolver_supervisor_children do
[
%{
enable: SamplingConfig.sampling_enabled?(),
children: [
EcsElixirCore.Infra.DrivenAdapters.EtsGenServer.Features.Sampling.Infra.EtsSamplingGenServer
]
}
]
|> Enum.filter(fn %{enable: enable} -> enable end)
|> Enum.reduce([], fn %{children: children}, acc -> acc ++ children end)
end
end