digitalorigin/pg-elixir-tools

View on GitHub
lib/metrix/supervisor.ex

Summary

Maintainability
Test Coverage
B
87%
defmodule ElixirTools.Metrix.Supervisor do
  @moduledoc false

  use Supervisor

  require Logger

  @typep child :: Supervisor.child_spec() | module | {module, []}

  @recurrent_metrics Application.get_env(:pagantis_elixir_tools, ElixirTools.Metrix)[
                       :recurrent_metrics
                     ]

  @spec start_link(any) :: {:ok, pid} | {:error, term}
  def start_link(_ \\ []) do
    if metrix_enabled?() do
      Supervisor.start_link(__MODULE__, :ok, name: __MODULE__)
    else
      Logger.info("Metrix did not start because it's disabled.")
      :ignore
    end
  end

  @impl true
  def init(:ok) do
    children =
      []
      |> add_metrix_child
      |> add_recurrent_metric_children

    Supervisor.init(children, strategy: :one_for_one)
  end

  @spec add_metrix_child([child]) :: [child]
  defp add_metrix_child(children), do: [{ElixirTools.Metrix, []} | children]

  @spec add_recurrent_metric_children([child]) :: [child]
  defp add_recurrent_metric_children(children), do: children ++ @recurrent_metrics

  @spec metrix_enabled? :: boolean
  defp metrix_enabled? do
    enabled_values = [nil, true, "true"]
    Application.get_env(:pagantis_elixir_tools, ElixirTools.Metrix)[:enabled] in enabled_values
  end
end