mirror of
https://github.com/benbusby/farside.git
synced 2025-04-19 23:05:56 -04:00
add 1 min fallback poll to recheck servers w/o instances
This commit is contained in:
parent
075f471358
commit
da4735fe2b
@ -6,6 +6,7 @@ defmodule Farside.Application do
|
||||
require Logger
|
||||
|
||||
alias Farside.LastUpdated
|
||||
alias Farside.Check
|
||||
alias Farside.Sync
|
||||
alias Farside.Http
|
||||
|
||||
@ -22,7 +23,7 @@ defmodule Farside.Application do
|
||||
maybe_loaded_children =
|
||||
case is_nil(System.get_env("FARSIDE_TEST")) do
|
||||
true ->
|
||||
[{Sync, []}]
|
||||
[{Check, []}, {Sync, []}]
|
||||
|
||||
false ->
|
||||
Logger.info("Skipping sync job setup...")
|
||||
@ -82,5 +83,4 @@ defmodule Farside.Application do
|
||||
|
||||
response
|
||||
end
|
||||
|
||||
end
|
||||
|
28
lib/farside/check.ex
Normal file
28
lib/farside/check.ex
Normal file
@ -0,0 +1,28 @@
|
||||
defmodule Farside.Check do
|
||||
use Task
|
||||
|
||||
def child_spec(args) do
|
||||
%{
|
||||
id: __MODULE__,
|
||||
start: {__MODULE__, :start_link, [args]},
|
||||
type: :worker
|
||||
}
|
||||
end
|
||||
|
||||
def start_link(_arg) do
|
||||
Task.start_link(&poll/0)
|
||||
end
|
||||
|
||||
def poll() do
|
||||
receive do
|
||||
after
|
||||
60_000 ->
|
||||
run()
|
||||
poll()
|
||||
end
|
||||
end
|
||||
|
||||
defp run() do
|
||||
Farside.Instance.Supervisor.sync_empty_instances()
|
||||
end
|
||||
end
|
@ -76,6 +76,25 @@ defmodule Farside.Instance do
|
||||
{:noreply, state}
|
||||
end
|
||||
|
||||
def handle_cast(
|
||||
:check,
|
||||
state
|
||||
) do
|
||||
service = :ets.lookup(String.to_atom(state.type), :default)
|
||||
|
||||
{_, service} = List.first(service)
|
||||
|
||||
if Enum.count(service.instances) == 0 do
|
||||
service = Http.fetch_instances(service)
|
||||
|
||||
:ets.delete(String.to_atom(state.type), :data)
|
||||
|
||||
:ets.insert(state.ref, {:data, service})
|
||||
end
|
||||
|
||||
{:noreply, state}
|
||||
end
|
||||
|
||||
@doc false
|
||||
def via_tuple(data, registry \\ @registry_name) do
|
||||
{:via, Registry, {registry, data}}
|
||||
|
@ -90,4 +90,12 @@ defmodule Farside.Instance.Supervisor do
|
||||
_ -> true
|
||||
end
|
||||
end
|
||||
|
||||
def sync_empty_instances() do
|
||||
list()
|
||||
|> Enum.each(fn x ->
|
||||
SERVER.via_tuple(x)
|
||||
|> GenServer.cast(:check)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user