diff --git a/lib/pinchflat/downloading/media_download_worker.ex b/lib/pinchflat/downloading/media_download_worker.ex index fc1bc99..42c5ca4 100644 --- a/lib/pinchflat/downloading/media_download_worker.ex +++ b/lib/pinchflat/downloading/media_download_worker.ex @@ -4,7 +4,7 @@ defmodule Pinchflat.Downloading.MediaDownloadWorker do use Oban.Worker, queue: :media_fetching, unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]], - tags: ["media_item", "media_fetching"] + tags: ["media_item", "media_fetching", "show_in_dashboard"] require Logger diff --git a/lib/pinchflat/downloading/media_quality_upgrade_worker.ex b/lib/pinchflat/downloading/media_quality_upgrade_worker.ex index ec325ef..4f554fa 100644 --- a/lib/pinchflat/downloading/media_quality_upgrade_worker.ex +++ b/lib/pinchflat/downloading/media_quality_upgrade_worker.ex @@ -4,7 +4,7 @@ defmodule Pinchflat.Downloading.MediaQualityUpgradeWorker do use Oban.Worker, queue: :media_fetching, unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]], - tags: ["media_item", "media_fetching"] + tags: ["media_item", "media_fetching", "show_in_dashboard"] require Logger diff --git a/lib/pinchflat/fast_indexing/fast_indexing_worker.ex b/lib/pinchflat/fast_indexing/fast_indexing_worker.ex index ccd7126..368da17 100644 --- a/lib/pinchflat/fast_indexing/fast_indexing_worker.ex +++ b/lib/pinchflat/fast_indexing/fast_indexing_worker.ex @@ -4,7 +4,7 @@ defmodule Pinchflat.FastIndexing.FastIndexingWorker do use Oban.Worker, queue: :fast_indexing, unique: [period: :infinity, states: [:available, :scheduled, :retryable]], - tags: ["media_source", "fast_indexing"] + tags: ["media_source", "fast_indexing", "show_in_dashboard"] require Logger diff --git a/lib/pinchflat/metadata/source_metadata_storage_worker.ex b/lib/pinchflat/metadata/source_metadata_storage_worker.ex index b922f62..52ec810 100644 --- a/lib/pinchflat/metadata/source_metadata_storage_worker.ex +++ b/lib/pinchflat/metadata/source_metadata_storage_worker.ex @@ -3,7 +3,7 @@ defmodule Pinchflat.Metadata.SourceMetadataStorageWorker do use Oban.Worker, queue: :remote_metadata, - tags: ["media_source", "source_metadata", "remote_metadata"], + tags: ["media_source", "source_metadata", "remote_metadata", "show_in_dashboard"], max_attempts: 3 require Logger diff --git a/lib/pinchflat/slow_indexing/media_collection_indexing_worker.ex b/lib/pinchflat/slow_indexing/media_collection_indexing_worker.ex index 50af81e..5dbac3e 100644 --- a/lib/pinchflat/slow_indexing/media_collection_indexing_worker.ex +++ b/lib/pinchflat/slow_indexing/media_collection_indexing_worker.ex @@ -4,7 +4,7 @@ defmodule Pinchflat.SlowIndexing.MediaCollectionIndexingWorker do use Oban.Worker, queue: :media_collection_indexing, unique: [period: :infinity, states: [:available, :scheduled, :retryable]], - tags: ["media_source", "media_collection_indexing"] + tags: ["media_source", "media_collection_indexing", "show_in_dashboard"] require Logger diff --git a/lib/pinchflat/tasks/tasks_query.ex b/lib/pinchflat/tasks/tasks_query.ex index cb2da78..64d35fb 100644 --- a/lib/pinchflat/tasks/tasks_query.ex +++ b/lib/pinchflat/tasks/tasks_query.ex @@ -28,7 +28,9 @@ defmodule Pinchflat.Tasks.TasksQuery do end def join_job(query) do - join(query, :inner, [t], j in assoc(t, :job)) + query + |> join(:left, [t], j in assoc(t, :job)) + |> preload([t, j], job: j) end def in_state(states) when is_list(states) do @@ -37,7 +39,7 @@ defmodule Pinchflat.Tasks.TasksQuery do def in_state(state), do: in_state([state]) - def has_worker(worker_name) do - dynamic([t, j], fragment("? LIKE ?", j.worker, ^"%.#{worker_name}")) + def has_tag(tag) do + dynamic([t, j], ^tag in j.tags) end end diff --git a/lib/pinchflat_web/controllers/pages/page_html/job_table_live.ex b/lib/pinchflat_web/controllers/pages/page_html/job_table_live.ex index 006d012..9be4f28 100644 --- a/lib/pinchflat_web/controllers/pages/page_html/job_table_live.ex +++ b/lib/pinchflat_web/controllers/pages/page_html/job_table_live.ex @@ -3,13 +3,13 @@ defmodule Pinchflat.Pages.JobTableLive do use Pinchflat.Tasks.TasksQuery alias Pinchflat.Repo - # alias Pinchflat.Utils.NumberUtils + alias Pinchflat.Tasks.Task alias PinchflatWeb.CustomComponents.TextComponents def render(%{tasks: []} = assigns) do ~H"""
-

Nothing Here!

+

Nothing here!

""" end @@ -19,8 +19,19 @@ defmodule Pinchflat.Pages.JobTableLive do
<.table rows={@tasks} table_class="text-white"> - <:col :let={task} label="Job ID"> - <%= task.job_id %> + <:col :let={task} label="Task"> + <%= worker_to_task_name(task.job.worker) %> + + <:col :let={task} label="Subject"> + <.subtle_link href={task_to_link(task)}> + <%= StringUtils.truncate(task_to_record_name(task), 35) %> + + + <:col :let={task} label="Attempt No."> + <%= task.job.attempt %> + + <:col :let={task} label="Started At"> + <%= format_datetime(task.job.attempted_at) %>
@@ -37,9 +48,42 @@ defmodule Pinchflat.Pages.JobTableLive do defp get_tasks do TasksQuery.new() |> TasksQuery.join_job() - |> where(^TasksQuery.in_state("completed")) - |> limit(5) + |> where(^TasksQuery.in_state(["executing", "completed"])) + |> where(^TasksQuery.has_tag("show_in_dashboard")) |> Repo.all() + |> Repo.preload([:media_item, :source]) + end + + defp worker_to_task_name(worker) do + final_module_part = + worker + |> String.split(".") + |> Enum.at(-1) + + map_worker_to_task_name(final_module_part) + end + + defp map_worker_to_task_name("FastIndexingWorker"), do: "Fast Indexing Source" + defp map_worker_to_task_name("MediaDownloadWorker"), do: "Download Media" + defp map_worker_to_task_name("MediaCollectionIndexingWorker"), do: "Indexing Source" + defp map_worker_to_task_name("MediaQualityUpgradeWorker"), do: "Upgrade Media Quality" + defp map_worker_to_task_name("SourceMetadataStorageWorker"), do: "Fetch Source Metadata" + defp map_worker_to_task_name(other), do: other <> " (Report to Devs)" + + defp task_to_record_name(%Task{} = task) do + case task do + %Task{source: source} when source != nil -> source.custom_name + %Task{media_item: mi} when mi != nil -> mi.title + _ -> "Unknown Record" + end + end + + defp task_to_link(%Task{} = task) do + case task do + %Task{source: source} when source != nil -> ~p"/sources/#{source.id}" + %Task{media_item: mi} when mi != nil -> ~p"/sources/#{mi.source_id}/media/#{mi}" + _ -> "#" + end end defp format_datetime(nil), do: ""