defmodule DashboardWeb.HostsLive do @moduledoc """ LiveView for real-time systant host monitoring. """ use DashboardWeb, :live_view alias Phoenix.PubSub @pubsub_topic "systant:hosts" @impl true def mount(_params, _session, socket) do if connected?(socket) do # Subscribe to host updates from MQTT PubSub.subscribe(Dashboard.PubSub, @pubsub_topic) end # Start with empty hosts - will be populated by MQTT hosts = %{} socket = socket |> assign(:hosts, hosts) |> assign(:page_title, "Systant Hosts") {:ok, socket} end @impl true def handle_info({:host_update, hostname, host_data}, socket) do require Logger Logger.info("LiveView received host update for #{hostname}: #{inspect(host_data)}") updated_hosts = Map.put(socket.assigns.hosts, hostname, host_data) {:noreply, assign(socket, :hosts, updated_hosts)} end @impl true def render(assigns) do ~H"""
Real-time system monitoring across all hosts
Live MQTT-powered dashboard showing statistics from all your systant-enabled hosts.
Waiting for systant hosts to publish data via MQTT...
Last seen: <%= format_datetime(@data["last_seen"]) %>
<%= Jason.encode!(@data, pretty: true) %>