defmodule AgentSea.Web.Telemetry.Bridge do @moduledoc """ Forwards every `AgentSea.Telemetry` event onto `Phoenix.PubSub` so LiveViews (the dashboard) can render fleet activity in real time without any bespoke event bus. """ @handler_id "agentsea-web-bridge" @topic "agentsea:events" @doc "The PubSub topic dashboard LiveViews subscribe to." def topic, do: @topic @doc "Attach the bridge to all AgentSea telemetry events." def attach do :telemetry.attach_many( @handler_id, AgentSea.Telemetry.events(), &__MODULE__.handle_event/4, nil ) end def detach, do: :telemetry.detach(@handler_id) @doc false def handle_event(event, measurements, metadata, _config) do message = {:agentsea_event, %{ event: event, measurements: measurements, metadata: metadata, at: System.system_time(:millisecond) }} Phoenix.PubSub.broadcast(AgentSea.PubSub, @topic, message) end end