Current section

Files

Jump to
event_bus_metrics lib event_bus_metrics web sse_controller.ex
Raw

lib/event_bus_metrics/web/sse_controller.ex

defmodule EventBus.Metrics.Web.SSEController do
@moduledoc """
Router for sse events
"""
use Plug.Router
import EventBus.Metrics.Web.BaseRouter
alias EventBus.Metrics
alias SSE.Chunk
@topic :eb_sse_streamed
plug(:match)
plug(:dispatch)
get "/" do
data = {@topic, sse_chunk()}
conn
|> put_cross_origin_header()
|> SSE.stream(data)
end
match(_, do: send_not_found(conn, "path"))
defp sse_chunk do
%Chunk{
comment: "Streaming event_bus metrics...",
id: UUID.uuid4(),
event: "init",
data: prepare_data(),
retry: 15_000,
}
end
defp prepare_data do
case Poison.encode(init_data()) do
{:ok, data} -> data
{:error, _} -> nil
end
end
defp init_data do
[
Metrics.list_topics(),
Metrics.list_subscribers(),
Metrics.list_events()
]
end
end