diff --git a/lib/towerops_web/live/agent_live/index.ex b/lib/towerops_web/live/agent_live/index.ex index 25ff0e6f..1d8cb3cb 100644 --- a/lib/towerops_web/live/agent_live/index.ex +++ b/lib/towerops_web/live/agent_live/index.ex @@ -32,6 +32,18 @@ defmodule ToweropsWeb.AgentLive.Index do {token.id, %{direct: direct, total: total}} end) + # device counts for cloud pollers (if superuser) + cloud_poller_counts = + if is_superuser do + Map.new(cloud_pollers, fn token -> + direct = Agents.count_assigned_devices(token.id) + total = length(Agents.list_agent_polling_targets(token.id)) + {token.id, %{direct: direct, total: total}} + end) + else + %{} + end + # Get organization-wide agent health statistics agent_health_stats = Stats.get_organization_agent_health(organization.id) assignment_breakdown = Stats.get_device_assignment_breakdown(organization.id) @@ -50,6 +62,7 @@ defmodule ToweropsWeb.AgentLive.Index do |> assign(:global_default_cloud_poller_id, global_default_cloud_poller_id) |> assign(:selected_global_default, global_default_cloud_poller_id || "") |> assign(:device_counts, equipment_counts) + |> assign(:cloud_poller_counts, cloud_poller_counts) |> assign(:agent_health_stats, agent_health_stats) |> assign(:assignment_breakdown, assignment_breakdown) |> assign(:offline_agents, offline_agents) @@ -162,6 +175,8 @@ defmodule ToweropsWeb.AgentLive.Index do {token.id, %{direct: direct, total: total}} end) + cloud_poller_counts = calculate_cloud_poller_counts(cloud_pollers) + # Refresh health statistics agent_health_stats = Stats.get_organization_agent_health(organization.id) assignment_breakdown = Stats.get_device_assignment_breakdown(organization.id) @@ -174,6 +189,7 @@ defmodule ToweropsWeb.AgentLive.Index do |> assign(:global_default_cloud_poller_id, global_default_cloud_poller_id) |> assign(:selected_global_default, global_default_cloud_poller_id || "") |> assign(:device_counts, equipment_counts) + |> assign(:cloud_poller_counts, cloud_poller_counts) |> assign(:agent_health_stats, agent_health_stats) |> assign(:assignment_breakdown, assignment_breakdown) |> assign(:offline_agents, offline_agents) @@ -258,6 +274,7 @@ defmodule ToweropsWeb.AgentLive.Index do cloud_pollers = load_cloud_pollers_if_superuser(socket.assigns.current_scope) equipment_counts = calculate_device_counts(agent_tokens) + cloud_poller_counts = calculate_cloud_poller_counts(cloud_pollers) agent_health_stats = Stats.get_organization_agent_health(organization.id) assignment_breakdown = Stats.get_device_assignment_breakdown(organization.id) @@ -270,6 +287,7 @@ defmodule ToweropsWeb.AgentLive.Index do |> assign(:agent_tokens, agent_tokens) |> assign(:cloud_pollers, cloud_pollers) |> assign(:device_counts, equipment_counts) + |> assign(:cloud_poller_counts, cloud_poller_counts) |> assign(:agent_health_stats, agent_health_stats) |> assign(:assignment_breakdown, assignment_breakdown) |> assign(:offline_agents, offline_agents) @@ -291,6 +309,14 @@ defmodule ToweropsWeb.AgentLive.Index do end) end + defp calculate_cloud_poller_counts(cloud_pollers) do + Map.new(cloud_pollers, fn t -> + direct = Agents.count_assigned_devices(t.id) + total = length(Agents.list_agent_polling_targets(t.id)) + {t.id, %{direct: direct, total: total}} + end) + end + defp get_success_message(is_cloud_poller) do if is_cloud_poller, do: "Cloud poller created successfully", diff --git a/lib/towerops_web/live/agent_live/index.html.heex b/lib/towerops_web/live/agent_live/index.html.heex index a8c6bebf..9502b8ad 100644 --- a/lib/towerops_web/live/agent_live/index.html.heex +++ b/lib/towerops_web/live/agent_live/index.html.heex @@ -214,6 +214,19 @@ + <:col :let={agent} label="Device"> + <% counts = Map.get(@cloud_poller_counts, agent.id, %{direct: 0, total: 0}) %> +