feat(server): GET /api/hosts/:name returns latest fast/medium/slow samples
This commit is contained in:
parent
f09a77996b
commit
30b507ba6b
3 changed files with 71 additions and 4 deletions
30
server/lib/server_web/controllers/host_controller.ex
Normal file
30
server/lib/server_web/controllers/host_controller.ex
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
defmodule ServerWeb.HostController do
|
||||
use ServerWeb, :controller
|
||||
|
||||
alias Server.{Metrics, Repo, Schema.Host}
|
||||
|
||||
def show(conn, %{"name" => name}) do
|
||||
case Repo.get_by(Host, name: name) do
|
||||
nil ->
|
||||
conn
|
||||
|> put_status(:not_found)
|
||||
|> json(%{error: "host_not_found"})
|
||||
|
||||
%Host{} = host ->
|
||||
samples =
|
||||
for interval <- ~w(fast medium slow),
|
||||
sample = Metrics.latest_sample(host.id, interval),
|
||||
into: %{} do
|
||||
{interval, %{collected_at: sample.collected_at, payload: sample.payload}}
|
||||
end
|
||||
|
||||
json(conn, %{
|
||||
name: host.name,
|
||||
status: host.status,
|
||||
agent_version: host.agent_version,
|
||||
last_seen_at: host.last_seen_at,
|
||||
samples: samples
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -20,10 +20,11 @@ defmodule ServerWeb.Router do
|
|||
get "/", PageController, :home
|
||||
end
|
||||
|
||||
# Other scopes may use custom stacks.
|
||||
# scope "/api", ServerWeb do
|
||||
# pipe_through :api
|
||||
# end
|
||||
scope "/api", ServerWeb do
|
||||
pipe_through :api
|
||||
|
||||
get "/hosts/:name", HostController, :show
|
||||
end
|
||||
|
||||
# Enable LiveDashboard in development
|
||||
if Application.compile_env(:server, :dev_routes) do
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue