Current section

Files

Jump to
ex_esdb lib repl event_stream_monitor.ex
Raw

lib/repl/event_stream_monitor.ex

defmodule ExESDB.Repl.EventStreamMonitor do
@moduledoc false
use GenServer
require Logger
alias Phoenix.PubSub, as: PubSub
defp subscribe(store) do
:ex_esdb_pubsub
|> PubSub.subscribe("#{store}")
end
@impl true
def handle_info({:event_seen, event}, state) do
IO.puts "Seen event #{inspect event}"
{:noreply, state}
end
@impl true
def handle_info(unknown, state) do
IO.puts "Unknown message #{inspect unknown}"
{:noreply, state}
end
@impl true
def init(%{store_id: store} = args) do
Logger.info("#{Colors.store_theme(self())} => Starting monitor for #{inspect(store, pretty: true)}")
store
|> subscribe
{:ok, args}
end
def start_link(args) do
GenServer.start_link(
__MODULE__,
args,
name: __MODULE__
)
end
def child_spec(args) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [args]},
restart: :permanent,
shutdown: 5000,
type: :worker,
}
end
end