defmodule AprsWeb.StatusLive.Index do @moduledoc """ LiveView for displaying real-time APRS-IS connection status """ use AprsWeb, :live_view # 30 seconds @refresh_interval 1_000 @impl true def mount(_params, _session, socket) do socket = assign(socket, page_title: "System Status", aprs_status: get_aprs_status(), version: get_app_version(), current_time: DateTime.utc_now(), auto_refresh: true, health_score: calculate_health_score(get_aprs_status()) ) if connected?(socket) do # Schedule the first refresh schedule_refresh() end {:ok, socket} end @impl true def handle_event("toggle_auto_refresh", _params, socket) do new_auto_refresh = !socket.assigns.auto_refresh socket = assign(socket, auto_refresh: new_auto_refresh) if new_auto_refresh do schedule_refresh() end {:noreply, socket} end @impl true def handle_event("refresh_now", _params, socket) do socket = refresh_status(socket) {:noreply, socket} end @impl true def handle_info(:refresh_status, socket) do socket = refresh_status(socket) # Schedule next refresh if auto-refresh is enabled if socket.assigns.auto_refresh do schedule_refresh() end {:noreply, socket} end @impl true def render(assigns) do ~H"""
The system is currently disconnected from the APRS-IS network. This may be due to network issues or server maintenance.
{get_health_description(@health_score, @aprs_status.connected)}
Auto-refresh: {if @auto_refresh, do: "ON", else: "OFF"} <%= if @auto_refresh do %> (every second) <% end %>