Current section
Files
Jump to
Current section
Files
lib/perf_agent/poller.ex
defmodule PerfAgent.Poller do
@moduledoc false
use GenServer
require Logger
alias PerfAgent.{Network, TransactionQueue}
@doc """
Starts the poller.
"""
def start_link(queue) do
GenServer.start_link(__MODULE__, queue, [])
end
def init(queue) do
timer = Process.send_after(self(), :batch_and_send_transactions, 1)
{:ok, %{timer: timer, queue: queue}}
end
def handle_info(:batch_and_send_transactions, %{timer: old_timer, queue: queue}) do
:erlang.cancel_timer(old_timer)
transactions = TransactionQueue.dequeue_all(queue)
count = Enum.count(transactions)
if PerfAgent.configured? && count > 0 do
Logger.debug("Reporting #{count} transactions")
Network.send_transactions(transactions)
end
# Check queue for requests to send every second
timer = Process.send_after(self(), :batch_and_send_transactions, 1000)
{:noreply, %{timer: timer, queue: queue}}
end
end