Packages
wobserverfork
0.1.9
Web based metrics, monitoring, and observer (a temporary fork, not recommended for public use)
Current section
Files
Jump to
Current section
Files
lib/wobserver/web/client.ex
defmodule Wobserver.Web.Client do
@moduledoc ~S"""
Modules handles WebSocket connects to the client.
"""
use Wobserver.Web.ClientSocket
alias Wobserver.Allocator
alias Wobserver.Page
alias Wobserver.Table
alias Wobserver.System
alias Wobserver.Util.Application
alias Wobserver.Util.Process
alias Wobserver.Util.Node.Discovery
@doc ~S"""
Starts the websocket client.
Returns a map as state.
"""
@spec client_init :: {:ok, map}
def client_init do
{:ok, %{}}
end
@doc ~S"""
Handles the `command` given by the websocket interface.
The current `state` is passed and can be modified.
Returns a map as state.
"""
@spec client_handle(atom | list(atom), state :: map) ::
{:reply, atom | list(atom), map, map}
| {:reply, atom | list(atom), map}
| {:noreply, map}
def client_handle(command, state)
def client_handle(:hello, state) do
{:reply, :ehlo, Discovery.local, state}
end
def client_handle(:ping, state) do
{:reply, :pong, state}
end
def client_handle(:system, state) do
{:reply, :system, System.overview, state}
end
def client_handle(:about, state) do
{:reply, :about, Wobserver.about, state}
end
def client_handle(:application, state) do
{:reply, :application, Application.list, state}
end
def client_handle([:application, app], state) do
{:reply, [:application, app], Application.info(app), state}
end
def client_handle(:process, state) do
{:reply, :process, Process.list, state}
end
def client_handle([:process, process], state) do
data =
process
|> Atom.to_string
|> Process.info
{:reply, [:process, process], data, state}
end
def client_handle(:ports, state) do
{:reply, :ports, Wobserver.Port.list, state}
end
def client_handle(:allocators, state) do
{:reply, :allocators, Allocator.list, state}
end
def client_handle(:table, state) do
{:reply, :table, Table.list, state}
end
def client_handle([:table, table], state) do
data =
table
|> Atom.to_string
|> Table.sanitize
|> Table.info(true)
{:reply, [:table, table], data, state}
end
def client_handle(:custom, state) do
{:reply, :custom, Page.list, state}
end
def client_handle(custom, state) do
case Page.call(custom) do
:page_not_found -> {:noreply, state}
data -> {:reply, custom, data, state}
end
end
@doc ~S"""
Handles process messages.
Should not be used, the `do` is ignored and the `state` is returned unmodified.
"""
@spec client_info(any, state :: map) :: {:noreply, map}
def client_info(_do, state) do
{:noreply, state}
end
@doc false
@spec terminate(any, any, any) :: :ok
def terminate(_,_,_), do: :ok
@doc false
@spec handle(:cowboy_req.req, any) :: {:ok, :cowboy_req.req, any}
def handle(req, state), do: {:ok, req, state}
end