mirror of
https://github.com/benbusby/farside.git
synced 2025-06-08 10:26:36 +00:00
add 1 min fallback poll to recheck servers w/o instances
This commit is contained in:
parent
075f471358
commit
da4735fe2b
4 changed files with 57 additions and 2 deletions
|
@ -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
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}
|
{: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}}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue