pinchflat/lib/pinchflat_web/controllers/settings/diagnostics_html.ex
Daniel Da Cunha 0c3c19febd Use Enum.map_join instead of Enum.map |> Enum.join
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 22:25:01 +08:00

79 lines
2.1 KiB
Elixir

defmodule PinchflatWeb.Settings.DiagnosticsHTML do
use PinchflatWeb, :html
alias Pinchflat.Diagnostics.QueueDiagnostics
embed_templates "diagnostics_html/*"
def queue_stats do
QueueDiagnostics.get_all_queue_stats()
end
def retryable_jobs do
QueueDiagnostics.get_retryable_jobs(20)
end
def stuck_jobs do
QueueDiagnostics.get_stuck_jobs(30)
end
def system_stats do
QueueDiagnostics.get_system_stats()
end
def format_worker_name(worker) do
worker
|> String.split(".")
|> Enum.at(-1)
|> format_worker_short_name()
end
defp format_worker_short_name("FastIndexingWorker"), do: "Fast Indexing"
defp format_worker_short_name("MediaDownloadWorker"), do: "Download"
defp format_worker_short_name("MediaCollectionIndexingWorker"), do: "Indexing"
defp format_worker_short_name("MediaQualityUpgradeWorker"), do: "Quality Upgrade"
defp format_worker_short_name("SourceMetadataStorageWorker"), do: "Metadata"
defp format_worker_short_name(other), do: other
def format_queue_name(queue) do
queue
|> Atom.to_string()
|> String.replace("_", " ")
|> String.split(" ")
|> Enum.map_join(" ", &String.capitalize/1)
end
def format_datetime(nil), do: "-"
def format_datetime(datetime) do
Calendar.strftime(datetime, "%Y-%m-%d %H:%M:%S")
end
def extract_last_error(errors) when is_list(errors) and length(errors) > 0 do
errors
|> List.last()
|> Map.get("error", "Unknown error")
|> String.slice(0, 200)
end
def extract_last_error(_), do: "No error details"
def queue_health_class(stats) do
cond do
stats.paused -> "bg-yellow-500/20 border-yellow-500"
stats.retryable > 0 -> "bg-red-500/20 border-red-500"
stats.running >= stats.limit and stats.available > 0 -> "bg-blue-500/20 border-blue-500"
true -> "bg-green-500/20 border-green-500"
end
end
def queue_status_text(stats) do
cond do
stats.paused -> "Paused"
stats.retryable > 0 -> "Has Failures"
stats.running >= stats.limit -> "At Capacity"
stats.running > 0 -> "Active"
true -> "Idle"
end
end
end