Refresh token more often if disconnected

This commit is contained in:
Connor Rigby 2017-12-11 19:15:02 -08:00
parent d0cf1b9110
commit e66bce633b
2 changed files with 30 additions and 3 deletions

View file

@ -12,6 +12,10 @@ defmodule Farmbot.Bootstrap.AuthTask do
GenServer.start_link(__MODULE__, [], [name: __MODULE__])
end
def force_refresh do
GenServer.call(__MODULE__, :force_refresh)
end
def init([]) do
timer = Process.send_after(self(), :refresh, @refresh_time)
{:ok, timer, :hibernate}
@ -32,10 +36,19 @@ defmodule Farmbot.Bootstrap.AuthTask do
refresh_timer(self())
{:error, reason} ->
Logger.error(1, "Token failed to reauthorize: #{auth_task} - #{email} - #{server} #{inspect reason}")
refresh_timer(self())
refresh_timer(self(), 30_000)
end
end
def handle_call(:force_refresh, _, old_timer) do
Logger.info 1, "Forcing a token refresh."
if Process.read_timer(old_timer) do
Process.cancel_timer(old_timer)
end
send self(), :refresh
{:reply, :ok, nil}
end
defp restart_transports do
:ok = Supervisor.terminate_child(Farmbot.Bootstrap.Supervisor, Farmbot.BotState.Transport.Supervisor)
case Supervisor.restart_child(Farmbot.Bootstrap.Supervisor, Farmbot.BotState.Transport.Supervisor) do
@ -46,8 +59,8 @@ defmodule Farmbot.Bootstrap.AuthTask do
end
end
defp refresh_timer(pid) do
timer = Process.send_after(pid, :refresh, @refresh_time)
defp refresh_timer(pid, ms \\ @refresh_time) do
timer = Process.send_after(pid, :refresh, ms)
{:noreply, timer, :hibernate}
end

View file

@ -48,6 +48,20 @@ defmodule Farmbot.BotState.Transport.AMQP do
end
end
def terminate(_reason, state) do
if state.chan do
AMQP.Channel.close(state.chan)
end
if state.conn do
AMQP.Connection.close(state.conn)
end
if Process.whereis(Farmbot.Bootstrap.AuthTask) do
Farmbot.Bootstrap.AuthTask.force_refresh()
end
end
def handle_events(events, {pid, _}, state) do
case Process.info(pid)[:registered_name] do
Farmbot.Logger -> handle_log_events(events, state)