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