defmodule ToweropsWeb.DeviceLive.Components.PreseemTab do @moduledoc """ LiveComponent for the device Preseem integration tab. Displays Preseem access point data, subscriber metrics, and device insights. """ use ToweropsWeb, :live_component alias ToweropsWeb.DeviceLive.Helpers.DataLoaders @impl true def update(assigns, socket) do {:ok, socket |> assign(assigns) |> load_preseem_data()} end defp load_preseem_data(socket) do device = socket.assigns.device preseem_data = DataLoaders.load_preseem_data(device) socket |> assign(:preseem_access_point, preseem_data.preseem_access_point) |> assign(:preseem_metrics, preseem_data.preseem_metrics) |> assign(:preseem_insights, preseem_data.preseem_insights) end @impl true def render(assigns) do ~H"""
{insight.title}
{insight.description}
| {t("Time")} | {t("Latency (ms)")} | {t("P95 Latency")} | {t("Jitter (ms)")} | {t("Loss (%)")} | {t("Throughput")} | {t("Subscribers")} |
|---|---|---|---|---|---|---|
| {ToweropsWeb.TimeHelpers.format_iso8601( metric.recorded_at, @current_scope.timezone, @current_scope.time_format )} | {if metric.avg_latency, do: Float.round(metric.avg_latency, 1), else: "---"} | {if metric.p95_latency, do: Float.round(metric.p95_latency, 1), else: "---"} | {if metric.avg_jitter, do: Float.round(metric.avg_jitter, 1), else: "---"} | {if metric.avg_loss, do: Float.round(metric.avg_loss, 2), else: "---"} | {if metric.avg_throughput, do: "#{Float.round(metric.avg_throughput, 1)} Mbps", else: "---"} | {metric.subscriber_count || "---"} |
{t("No Preseem data linked to this device.")}