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