Packages

Providing a web interface to interact with mix xref graph output

Current section

Files

Jump to
ex_compile_graph lib ex_compile_graph_web server socket_handler.ex
Raw

lib/ex_compile_graph_web/server/socket_handler.ex

defmodule ExCompileGraphWeb.Server.SocketHandler do
@behaviour :cowboy_websocket
require Logger
def init(request, state) do
{:cowboy_websocket, request, state}
end
def websocket_init(state), do: {:ok, state}
def websocket_handle({:text, req_payload}, state) do
req_payload = Jason.decode!(req_payload)
%{
"sequence" => sequence,
"request" => %{"type" => req_type}
} = req_payload
res_payload =
case req_type do
"getGraph" ->
ExCompileGraph.get_graph()
"getDependencyExplanation" ->
%{"source" => source, "sink" => sink, "reason" => reason} =
req_payload["request"]["payload"]
ExCompileGraph.get_recompile_dependency_causes(source, sink, String.to_atom(reason))
end
serialized = Jason.encode!(%{sequence: sequence, payload: res_payload})
{:reply, {:text, serialized}, state}
rescue
error ->
Logger.error("""
#{__MODULE__}: error while handling socket requests
- error: #{inspect(error, pretty: true)}
- request: #{inspect(error, pretty: true)}
""")
{:reply, {:text, ""}, state}
end
def websocket_info(_info, state) do
{:ok, state}
end
end