Packages

Web based metrics, monitoring, and observer.

Current section

Files

Jump to
wobserver_ng lib wobserver web router metrics.ex
Raw

lib/wobserver/web/router/metrics.ex

defmodule Wobserver.Web.Router.Metrics do
@moduledoc ~S"""
Metrics router.
Returns the following resources:
- `/` => All metrics for the local node.
- `/memory` => Memory metrics for the local node.
- `/io` => IO metrics for the local node.
"""
use Wobserver.Web.Router.Base
alias Wobserver.Util.Metrics
alias Wobserver.Util.Metrics.Formatter
alias Wobserver.Util.Node.Discovery
alias Wobserver.Util.Node.Remote
match "/" do
data =
Discovery.discover
|> Enum.map(&Remote.metrics/1)
|> Formatter.merge_metrics
case data do
:error -> send_resp(conn, 500, "Can not generate metrics.")
_ -> send_resp(conn, 200, data)
end
end
match "/n/:node_name" do
case Discovery.find(node_name) do
:local ->
Metrics.overview
|> send_metrics(conn)
{:remote, remote_node} ->
data =
remote_node
|> Remote.metrics
case data do
:error ->
conn
|> send_resp(500, "Node #{node_name} not responding.")
result ->
conn
|> send_resp(200, result)
end
:unknown ->
conn
|> send_resp(404, "Node #{node_name} not Found")
end
end
match "/memory" do
Metrics.memory
|> send_metrics(conn)
end
match "/io" do
Metrics.memory
|> send_metrics(conn)
end
match _ do
conn
|> send_resp(404, "Page not Found")
end
# Helpers
defp send_metrics(data, conn) do
case Formatter.format_all(data) do
:error -> send_resp(conn, 500, "Can not generate metrics.")
metrics -> send_resp(conn, 200, metrics)
end
end
end