defmodule Prymn.Agents do alias Prymn.Messaging alias Prymn.Agents def from_server(%Prymn.Servers.Server{} = server) do agent_id = to_string(server.id) Phoenix.PubSub.subscribe(Prymn.PubSub, "agent:#{agent_id}") Agents.Store.get_or_default(agent_id) end def from_servers(servers) when is_list(servers) do Enum.reduce(servers, [], fn server, acc -> [{server.id, from_server(server)} | acc] end) |> Map.new() end def update_health(agent_id, health) when is_binary(agent_id) do agent = Agents.Store.update_health(agent_id, health) Phoenix.PubSub.broadcast!(Prymn.PubSub, "agent:#{agent_id}", agent) end def open_terminal(%Agents.Agent{id: id}) do Messaging.open_terminal(id) end def close_terminal(%Agents.Agent{id: id}) do Messaging.close_terminal(id) end def resize_terminal(%Agents.Agent{id: id}, rows, cols) do Messaging.resize_terminal(id, rows, cols) end def send_terminal_input(%Agents.Agent{id: id}, input) do Messaging.send_terminal_input(id, input) end end