diff --git a/lib/towerops/job_monitoring.ex b/lib/towerops/job_monitoring.ex index a0117503..c8a683ed 100644 --- a/lib/towerops/job_monitoring.ex +++ b/lib/towerops/job_monitoring.ex @@ -53,6 +53,7 @@ defmodule Towerops.JobMonitoring do order_by: [asc: j.attempted_at] ) |> Repo.all() + |> preload_device_context() end @doc """ @@ -69,6 +70,7 @@ defmodule Towerops.JobMonitoring do limit: 100 ) |> Repo.all() + |> preload_device_context() end @doc """ diff --git a/lib/towerops_web/live/admin/monitoring_live.ex b/lib/towerops_web/live/admin/monitoring_live.ex index f345fd1d..a232aad2 100644 --- a/lib/towerops_web/live/admin/monitoring_live.ex +++ b/lib/towerops_web/live/admin/monitoring_live.ex @@ -26,7 +26,9 @@ defmodule ToweropsWeb.Admin.MonitoringLive do |> assign(:page_title, "Job Monitoring") |> assign(:active_jobs, []) |> assign(:executing_jobs, []) + |> assign(:stuck_jobs, []) |> assign(:stuck_jobs_count, 0) + |> assign(:failed_jobs, []) |> assign(:failed_jobs_count, 0) |> assign(:recent_jobs, []) |> assign(:health_metrics, %{}) @@ -68,7 +70,9 @@ defmodule ToweropsWeb.Admin.MonitoringLive do socket |> assign(:executing_jobs, executing_jobs) + |> assign(:stuck_jobs, stuck_jobs) |> assign(:stuck_jobs_count, length(stuck_jobs)) + |> assign(:failed_jobs, failed_jobs) |> assign(:failed_jobs_count, length(failed_jobs)) |> assign(:recent_jobs, recent_jobs) |> assign(:health_metrics, metrics) @@ -77,4 +81,15 @@ defmodule ToweropsWeb.Admin.MonitoringLive do defp worker_name("Towerops.Workers.DevicePollerWorker"), do: "Device Poll" defp worker_name("Towerops.Workers.DiscoveryWorker"), do: "SNMP Discovery" defp worker_name(worker), do: worker + + defp duration_in_words(started_at) do + seconds = DateTime.diff(DateTime.utc_now(), started_at) + minutes = div(seconds, 60) + + cond do + minutes < 1 -> "#{seconds}s" + minutes < 60 -> "#{minutes}m" + true -> "#{div(minutes, 60)}h #{rem(minutes, 60)}m" + end + end end diff --git a/lib/towerops_web/live/admin/monitoring_live.html.heex b/lib/towerops_web/live/admin/monitoring_live.html.heex index 4cfe7124..3785e8fe 100644 --- a/lib/towerops_web/live/admin/monitoring_live.html.heex +++ b/lib/towerops_web/live/admin/monitoring_live.html.heex @@ -87,30 +87,77 @@ -
- No problems detected -
- <% else %> -- Problems section coming soon -
+ <%= if length(@stuck_jobs) > 0 or length(@failed_jobs) > 0 do %> ++ <%= if job.device do %> + <%= job.device.name %> + <% else %> + Device #{get_in(job.args, ["device_id"])} + <% end %> +
++ <%= worker_name(job.worker) %> +
++ Running for <%= duration_in_words(job.attempted_at) %> +
++ <%= if job.device do %> + <%= job.device.name %> + <% else %> + Device #{get_in(job.args, ["device_id"])} + <% end %> +
++ <%= worker_name(job.worker) %> - Attempt <%= job.attempt %>/<%= job.max_attempts %> +
+ <%= if job.errors && length(job.errors) > 0 do %> ++ <%= hd(job.errors)["error"] || "Unknown error" %> +
+ <% end %> +