1
0
Fork 0
mirror of https://github.com/benbusby/farside.git synced 2025-06-08 02:16:36 +00:00

add 1 min fallback poll to recheck servers w/o instances

This commit is contained in:
mithereal 2022-07-31 16:42:14 -07:00
parent 075f471358
commit da4735fe2b
4 changed files with 57 additions and 2 deletions

View file

@ -6,6 +6,7 @@ defmodule Farside.Application do
require Logger require Logger
alias Farside.LastUpdated alias Farside.LastUpdated
alias Farside.Check
alias Farside.Sync alias Farside.Sync
alias Farside.Http alias Farside.Http
@ -22,7 +23,7 @@ defmodule Farside.Application do
maybe_loaded_children = maybe_loaded_children =
case is_nil(System.get_env("FARSIDE_TEST")) do case is_nil(System.get_env("FARSIDE_TEST")) do
true -> true ->
[{Sync, []}] [{Check, []}, {Sync, []}]
false -> false ->
Logger.info("Skipping sync job setup...") Logger.info("Skipping sync job setup...")
@ -82,5 +83,4 @@ defmodule Farside.Application do
response response
end end
end end

28
lib/farside/check.ex Normal file
View 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

View file

@ -76,6 +76,25 @@ defmodule Farside.Instance do
{:noreply, state} {:noreply, state}
end 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 @doc false
def via_tuple(data, registry \\ @registry_name) do def via_tuple(data, registry \\ @registry_name) do
{:via, Registry, {registry, data}} {:via, Registry, {registry, data}}

View file

@ -90,4 +90,12 @@ defmodule Farside.Instance.Supervisor do
_ -> true _ -> true
end end
end end
def sync_empty_instances() do
list()
|> Enum.each(fn x ->
SERVER.via_tuple(x)
|> GenServer.cast(:check)
end)
end
end end