defmodule Mobius.MetricsTable.Monitor do @moduledoc false # module to save the metrics table to disk when shutting down Mobius use GenServer alias Mobius.MetricsTable @spec start_link([Mobius.arg()]) :: GenServer.on_start() def start_link(args) do GenServer.start_link(__MODULE__, args) end @impl GenServer def init(args) do Process.flag(:trap_exit, true) state = args |> Keyword.take([:name, :persistence_dir]) |> Enum.into(%{}) {:ok, state} end @impl GenServer def terminate(_reason, state) do MetricsTable.save(state.name, state.persistence_dir) end end