Packages
tai
0.0.69
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/events_logger.ex
defmodule Tai.EventsLogger do
use GenServer
@type event :: struct
@type level :: TaiEvents.level()
@callback log(level, event) :: term
defmodule State do
@type t :: %State{
id: atom,
events: module,
logger: module
}
@enforce_keys ~w[id events logger]a
defstruct ~w[id events logger]a
end
@default_id :default
@default_events TaiEvents
@default_logger Tai.EventsLogger.DefaultLogger
def start_link(args) do
id = Keyword.get(args, :id, @default_id)
name = :"#{__MODULE__}_#{id}"
events = Keyword.get(args, :events, @default_events)
logger = Keyword.get(args, :logger) || @default_logger
state = %State{id: id, events: events, logger: logger}
GenServer.start_link(__MODULE__, state, name: name)
end
@spec init(State.t()) :: {:ok, State.t()}
def init(state) do
state.events.firehose_subscribe()
{:ok, state}
end
@spec handle_info({TaiEvents.Event, event, level}, State.t()) :: {:noreply, State.t()}
def handle_info({TaiEvents.Event, event, level}, state) do
state.logger.log(level, event)
{:noreply, state}
end
end
defmodule Tai.EventsLogger.DefaultLogger do
@behaviour Tai.EventsLogger
require Logger
def log(:error, event) do
event |> TaiEvents.Event.encode!() |> Logger.error()
end
def log(:warn, event) do
event |> TaiEvents.Event.encode!() |> Logger.warn()
end
def log(:info, event) do
event |> TaiEvents.Event.encode!() |> Logger.info()
end
def log(:debug, event) do
event |> TaiEvents.Event.encode!() |> Logger.debug()
end
end