adding :ets to keep track of current value
This commit is contained in:
41
lib/clip/currents.ex
Normal file
41
lib/clip/currents.ex
Normal file
@ -0,0 +1,41 @@
|
||||
defmodule Clip.Currents do
|
||||
use GenServer
|
||||
require Logger
|
||||
|
||||
@purge_interval :timer.minutes(60)
|
||||
|
||||
def start_link(_) do
|
||||
GenServer.start_link(__MODULE__, %{}, name: ClipCurrents)
|
||||
end
|
||||
|
||||
def init(opts) do
|
||||
:ets.new(:users_clips, [:set, :named_table, :public])
|
||||
state = %{
|
||||
interval: opts[:purge_interval] || @purge_interval,
|
||||
timer: nil
|
||||
}
|
||||
{:ok, schedule_purge(state)}
|
||||
end
|
||||
|
||||
def set(email_addr, value) do
|
||||
:ets.insert(:users_clips, {email_addr, value})
|
||||
:ok
|
||||
end
|
||||
|
||||
def get(email_addr) do
|
||||
cur_val = case :ets.lookup(:users_clips, email_addr) do
|
||||
[{^email_addr, value}] -> value
|
||||
[] -> ""
|
||||
end
|
||||
{:ok, cur_val}
|
||||
end
|
||||
|
||||
def handle_info(:purge, state) do
|
||||
Logger.info("should purge old entries but doesn't, yet")
|
||||
{:noreply, schedule_purge(state)}
|
||||
end
|
||||
|
||||
defp schedule_purge(state) do
|
||||
%{state | timer: Process.send_after(self(), :purge, state.interval)}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user