From 0ffba18d52b394413d608da4db5318debee4f4e6 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Sat, 5 Jul 2025 12:56:30 -0500 Subject: [PATCH] status page cards --- .../status_live/connection_card_component.ex | 198 +++++----- lib/aprsme_web/live/status_live/index.ex | 360 +++++++----------- 2 files changed, 236 insertions(+), 322 deletions(-) diff --git a/lib/aprsme_web/live/status_live/connection_card_component.ex b/lib/aprsme_web/live/status_live/connection_card_component.ex index 3b9ac81..c8fdb3c 100644 --- a/lib/aprsme_web/live/status_live/connection_card_component.ex +++ b/lib/aprsme_web/live/status_live/connection_card_component.ex @@ -7,133 +7,135 @@ defmodule AprsmeWeb.StatusLive.ConnectionCardComponent do def render(assigns) do ~H"""
-

APRS-IS Connection

-
-
-
- Status: - <%= if @aprs_status.connected do %> - - - - - Connected - - <% else %> - - - - - Disconnected - - <% end %> -
- -
- Server: - - {@aprs_status.server}:{@aprs_status.port} - -
- -
- Login ID: - {@aprs_status.login_id} -
- -
- Connected Since: - - <%= if @aprs_status.connected_at do %> - {Calendar.strftime(@aprs_status.connected_at, "%Y-%m-%d %H:%M:%S UTC")} +

APRS-IS Connection

+
+
+
+
+ Status: + <%= if @aprs_status.connected do %> +
+
+ Connected +
<% else %> - Not connected +
+
+ Disconnected +
<% end %> - -
+
-
- Uptime: - - {AprsmeWeb.StatusLive.Index.format_uptime(@aprs_status.uptime_seconds)} - -
- -
- Filter: - - {@aprs_status.filter} - -
-
- - -
-

Packet Statistics

-
- Total Packets: - - {AprsmeWeb.StatusLive.Index.format_number(@aprs_status.packet_stats.total_packets)} + Server: + + {@aprs_status.server}:{@aprs_status.port}
- Packets/Sec: - - {@aprs_status.packet_stats.packets_per_second} - + Login ID: + {@aprs_status.login_id}
- Last Packet: - - <%= if @aprs_status.packet_stats.last_packet_at do %> - {AprsmeWeb.StatusLive.Index.format_time_ago( - @aprs_status.packet_stats.last_packet_at - )} + Connected Since: + + <%= if @aprs_status.connected_at do %> + {Calendar.strftime(@aprs_status.connected_at, "%Y-%m-%d %H:%M:%S UTC")} <% else %> - None + Not connected <% end %>
- Stored Packets: - - {AprsmeWeb.StatusLive.Index.format_number(@aprs_status.stored_packet_count)} + Uptime: + + {AprsmeWeb.StatusLive.Index.format_uptime(@aprs_status.uptime_seconds)}
-
-
-
+
+ Filter: +
+ {@aprs_status.filter} +
+
+
+ + +
+
+

Packet Statistics

+
+
+ Total Packets: + + {AprsmeWeb.StatusLive.Index.format_number(@aprs_status.packet_stats.total_packets)} + +
+ +
+ Packets/Sec: + + {@aprs_status.packet_stats.packets_per_second} + +
+ +
+ Packets/Min: + + {@aprs_status.packet_stats.packets_per_second * 60} + +
+ +
+ Last Packet: + + <%= if @aprs_status.packet_stats.last_packet_at do %> + {AprsmeWeb.StatusLive.Index.format_time_ago( + @aprs_status.packet_stats.last_packet_at + )} + <% else %> + None + <% end %> + +
+ +
+ Stored Packets: + + {AprsmeWeb.StatusLive.Index.format_number(@aprs_status.stored_packet_count)} + +
+
+
+ +
- Connection Health: + Connection Health:
-
+
<%= for i <- 1..5 do %> - - - + <% end %>
- + {@health_score}/5
-

+

{AprsmeWeb.StatusLive.Index.get_health_description(@health_score, @aprs_status.connected)}

diff --git a/lib/aprsme_web/live/status_live/index.ex b/lib/aprsme_web/live/status_live/index.ex index 4cfb644..2fc337a 100644 --- a/lib/aprsme_web/live/status_live/index.ex +++ b/lib/aprsme_web/live/status_live/index.ex @@ -15,7 +15,6 @@ defmodule AprsmeWeb.StatusLive.Index do 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()) ) @@ -27,46 +26,23 @@ defmodule AprsmeWeb.StatusLive.Index do {: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 - + # Schedule next refresh + schedule_refresh() {:noreply, socket} end @impl true def render(assigns) do ~H""" -
-
-
+
+
+
-

APRS.me System Status

-
+

APRS.me System Status

+
Last updated: {Calendar.strftime(@current_time, "%H:%M:%S UTC")}
@@ -74,31 +50,24 @@ defmodule AprsmeWeb.StatusLive.Index do <%= if not @aprs_status.connected do %> -
-
-
- - - -
-
-

- APRS-IS Connection Issue -

-
-

- The system is currently disconnected from the APRS-IS network. This may be due to network issues or server maintenance. -

-
+
+ + + +
+

APRS-IS Connection Issue

+
+ The system is currently disconnected from the APRS-IS network. This may be due to network issues or server maintenance.
@@ -106,132 +75,134 @@ defmodule AprsmeWeb.StatusLive.Index do
-

APRS-IS Connection

-
-
-
- Status: - <%= if @aprs_status.connected do %> - - - - - Connected - - <% else %> - - - - - Disconnected - - <% end %> -
- -
- Server: - - {@aprs_status.server}:{@aprs_status.port} - -
- -
- Login ID: - {@aprs_status.login_id} -
- -
- Connected Since: - - <%= if @aprs_status.connected_at do %> - {Calendar.strftime(@aprs_status.connected_at, "%Y-%m-%d %H:%M:%S UTC")} +

APRS-IS Connection

+
+
+
+
+ Status: + <%= if @aprs_status.connected do %> +
+
+ Connected +
<% else %> - Not connected +
+
+ Disconnected +
<% end %> - -
+
-
- Uptime: - - {format_uptime(@aprs_status.uptime_seconds)} - -
- -
- Filter: - - {@aprs_status.filter} - -
-
- - -
-

Packet Statistics

-
- Total Packets: - - {format_number(@aprs_status.packet_stats.total_packets)} + Server: + + {@aprs_status.server}:{@aprs_status.port}
- Packets/Sec: - - {@aprs_status.packet_stats.packets_per_second} - + Login ID: + {@aprs_status.login_id}
- Last Packet: - - <%= if @aprs_status.packet_stats.last_packet_at do %> - {format_time_ago(@aprs_status.packet_stats.last_packet_at)} + Connected Since: + + <%= if @aprs_status.connected_at do %> + {Calendar.strftime(@aprs_status.connected_at, "%Y-%m-%d %H:%M:%S UTC")} <% else %> - None + Not connected <% end %>
- Stored Packets: - - {format_number(@aprs_status.stored_packet_count)} + Uptime: + + {format_uptime(@aprs_status.uptime_seconds)}
+ +
+ Filter: +
+ {@aprs_status.filter} +
+
-
- + + +
+
+

Packet Statistics

+
+
+ Total Packets: + + {format_number(@aprs_status.packet_stats.total_packets)} + +
+ +
+ Packets/Sec: + + {@aprs_status.packet_stats.packets_per_second} + +
+ +
+ Packets/Min: + + {@aprs_status.packet_stats.packets_per_second * 60} + +
+ +
+ Last Packet: + + <%= if @aprs_status.packet_stats.last_packet_at do %> + {format_time_ago(@aprs_status.packet_stats.last_packet_at)} + <% else %> + None + <% end %> + +
+ +
+ Stored Packets: + + {format_number(@aprs_status.stored_packet_count)} + +
+
+
+ -
+
- Connection Health: + Connection Health:
-
+
<%= for i <- 1..5 do %> - - - + <% end %>
- + {@health_score}/5
-

+

{get_health_description(@health_score, @aprs_status.connected)}

@@ -240,82 +211,23 @@ defmodule AprsmeWeb.StatusLive.Index do
-

Application Information

-
-
-
- Version: - {@version} -
+

Application Information

+
+
+
+
+ Version: + {@version} +
-
- Current Time: - - {Calendar.strftime(@current_time, "%Y-%m-%d %H:%M:%S UTC")} - -
-
-
-
- - -
-
-
-
- - - -
-
-

- Auto-refresh: - - {if @auto_refresh, do: "ON", else: "OFF"} +

+ Current Time: + + {Calendar.strftime(@current_time, "%Y-%m-%d %H:%M:%S UTC")} - <%= if @auto_refresh do %> - (every second) - <% end %> -

+
-
- - -