Packages
exq
0.24.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.1
0.9.0
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.2
Exq is a job processing library compatible with Resque / Sidekiq for the Elixir language.
Current section
Files
Jump to
Current section
Files
lib/exq/heartbeat/server.ex
defmodule Exq.Heartbeat.Server do
use GenServer
require Logger
alias Exq.Support.Config
alias Exq.Redis.Heartbeat
defmodule State do
defstruct [:namespace, :node_id, :redis, :interval]
end
def start_link(options) do
GenServer.start_link(
__MODULE__,
%State{
namespace: Keyword.fetch!(options, :namespace),
node_id: Keyword.get(options, :node_id, Config.node_identifier().node_id()),
redis: Keyword.fetch!(options, :redis),
interval: Keyword.fetch!(options, :heartbeat_interval)
},
[]
)
end
def init(state) do
:ok = schedule_ping(0)
{:ok, state}
end
def handle_info(:ping, state) do
case Heartbeat.register(state.redis, state.namespace, state.node_id) do
:ok ->
:ok = schedule_ping(state.interval)
_error ->
:ok = schedule_ping(Enum.min([state.interval, 5000]))
end
{:noreply, state}
end
def handle_info(msg, state) do
Logger.error("Received unexpected info message in #{__MODULE__} #{inspect(msg)}")
{:noreply, state}
end
defp schedule_ping(interval) do
_reference = Process.send_after(self(), :ping, interval)
:ok
end
end