defmodule DashboardWeb.HostsLive do @moduledoc """ LiveView for real-time systant host monitoring. """ use DashboardWeb, :live_view alias Phoenix.PubSub alias Dashboard.MqttSubscriber @pubsub_topic "systant:hosts" @impl true def mount(_params, _session, socket) do if connected?(socket) do # Subscribe to host updates PubSub.subscribe(Dashboard.PubSub, @pubsub_topic) end # Get initial host data hosts = MqttSubscriber.get_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 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) %>