79 lines
2.1 KiB
Elixir
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
|