Current section
Files
Jump to
Current section
Files
lib/fluent/client.ex
defmodule Fluent.Client do
use GenServer
def start_link(options) do
GenServer.start_link(__MODULE__, options)
end
def start_link(name, options) do
GenServer.start_link(__MODULE__, options, name: name)
end
def init(options) do
socket = Socket.TCP.connect!(options[:host] || "localhost",options[:port] || 24224, packet: 0)
serializer = serializer(options[:serializer] || :msgpack)
{:ok, {socket, serializer}}
end
def handle_cast({:send, tag, data}, {socket, serializer} = state) do
packet = serializer.([tag, now, data])
Socket.Stream.send!(socket, packet)
{:noreply, state}
end
defp serializer(:msgpack), do: &Msgpax.pack!/1
defp serializer(:json), do: &Poison.encode!/1
defp serializer(f) when is_function(f, 1), do: f
defp now do
{msec, sec, _ } = :os.timestamp
msec * 1000000 + sec
end
end