defmodule SuperCache.Queue.Worker do
@moduledoc """
Pushs data from queue to database (disk)
"""
use GenServer
require Logger
alias __MODULE__
alias SuperCache.Queue
## API
@doc """
Gets number of record has push to database.
"""
def get_counter() do
end
def start_link([counter]) do
Logger.info("start store data to db worker")
GenServer.start_link(__MODULE__, counter)
end
## callbacks
@impl true
def init(counter) do
alias Db.Storage
:ok = Storage.initDb()
schedule_work(100)
{:ok, counter}
end
@impl true
def handle_info(:work, counter) do
counter =
case Queue.get() do
nil ->
# sleep more if queue doesn't have data.
schedule_work(1000)
counter
student ->
schedule_work(0)
counter + 1
end
{:noreply, counter}
end
defp schedule_work(time) do
# TO-DO: improve this.
Process.send_after(self(), :work , time)
end
end