41 lines
931 B
Elixir
41 lines
931 B
Elixir
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 |