Dynamically supervise a GRPC connection and keep it alive for a while, using a timeout to kill the process on inactivity. The Connection GenServer keeps the connection alive, while listening to a health stream from the GRPC endpoint, notifying any subscribed listeners about changes to health. This health is then propagated to the main servers page. Also create a looping get_sys_info which retrieves some basic system information.
27 lines
785 B
Elixir
27 lines
785 B
Elixir
defmodule Prymn.Agents.Supervisor do
|
|
@moduledoc false
|
|
|
|
use Supervisor
|
|
|
|
@dynamic_supervisor Prymn.Agents.ConnectionSupervisor
|
|
|
|
def start_link(init_arg) do
|
|
Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
|
|
end
|
|
|
|
@impl true
|
|
def init(_init_arg) do
|
|
children = [
|
|
# The registry will be used to register `Connection` processes with their
|
|
# name as their address
|
|
{Registry, keys: :unique, name: Prymn.Agents.Registry},
|
|
# Dynamically start `Connection` processes
|
|
{DynamicSupervisor, name: @dynamic_supervisor, strategy: :one_for_one, max_seconds: 60}
|
|
]
|
|
|
|
# Register a "health" table that stores in-memory any agent health data
|
|
Prymn.Agents.Health.start()
|
|
|
|
Supervisor.init(children, strategy: :one_for_one)
|
|
end
|
|
end
|