[WIP] hooked up tasks table with real data
This commit is contained in:
parent
726d236540
commit
d662d58dd5
7 changed files with 60 additions and 14 deletions
|
|
@ -4,7 +4,7 @@ defmodule Pinchflat.Downloading.MediaDownloadWorker do
|
||||||
use Oban.Worker,
|
use Oban.Worker,
|
||||||
queue: :media_fetching,
|
queue: :media_fetching,
|
||||||
unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]],
|
unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]],
|
||||||
tags: ["media_item", "media_fetching"]
|
tags: ["media_item", "media_fetching", "show_in_dashboard"]
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ defmodule Pinchflat.Downloading.MediaQualityUpgradeWorker do
|
||||||
use Oban.Worker,
|
use Oban.Worker,
|
||||||
queue: :media_fetching,
|
queue: :media_fetching,
|
||||||
unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]],
|
unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]],
|
||||||
tags: ["media_item", "media_fetching"]
|
tags: ["media_item", "media_fetching", "show_in_dashboard"]
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ defmodule Pinchflat.FastIndexing.FastIndexingWorker do
|
||||||
use Oban.Worker,
|
use Oban.Worker,
|
||||||
queue: :fast_indexing,
|
queue: :fast_indexing,
|
||||||
unique: [period: :infinity, states: [:available, :scheduled, :retryable]],
|
unique: [period: :infinity, states: [:available, :scheduled, :retryable]],
|
||||||
tags: ["media_source", "fast_indexing"]
|
tags: ["media_source", "fast_indexing", "show_in_dashboard"]
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ defmodule Pinchflat.Metadata.SourceMetadataStorageWorker do
|
||||||
|
|
||||||
use Oban.Worker,
|
use Oban.Worker,
|
||||||
queue: :remote_metadata,
|
queue: :remote_metadata,
|
||||||
tags: ["media_source", "source_metadata", "remote_metadata"],
|
tags: ["media_source", "source_metadata", "remote_metadata", "show_in_dashboard"],
|
||||||
max_attempts: 3
|
max_attempts: 3
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ defmodule Pinchflat.SlowIndexing.MediaCollectionIndexingWorker do
|
||||||
use Oban.Worker,
|
use Oban.Worker,
|
||||||
queue: :media_collection_indexing,
|
queue: :media_collection_indexing,
|
||||||
unique: [period: :infinity, states: [:available, :scheduled, :retryable]],
|
unique: [period: :infinity, states: [:available, :scheduled, :retryable]],
|
||||||
tags: ["media_source", "media_collection_indexing"]
|
tags: ["media_source", "media_collection_indexing", "show_in_dashboard"]
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,9 @@ defmodule Pinchflat.Tasks.TasksQuery do
|
||||||
end
|
end
|
||||||
|
|
||||||
def join_job(query) do
|
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
|
end
|
||||||
|
|
||||||
def in_state(states) when is_list(states) do
|
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 in_state(state), do: in_state([state])
|
||||||
|
|
||||||
def has_worker(worker_name) do
|
def has_tag(tag) do
|
||||||
dynamic([t, j], fragment("? LIKE ?", j.worker, ^"%.#{worker_name}"))
|
dynamic([t, j], ^tag in j.tags)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@ defmodule Pinchflat.Pages.JobTableLive do
|
||||||
use Pinchflat.Tasks.TasksQuery
|
use Pinchflat.Tasks.TasksQuery
|
||||||
|
|
||||||
alias Pinchflat.Repo
|
alias Pinchflat.Repo
|
||||||
# alias Pinchflat.Utils.NumberUtils
|
alias Pinchflat.Tasks.Task
|
||||||
alias PinchflatWeb.CustomComponents.TextComponents
|
alias PinchflatWeb.CustomComponents.TextComponents
|
||||||
|
|
||||||
def render(%{tasks: []} = assigns) do
|
def render(%{tasks: []} = assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<div class="mb-4 flex items-center">
|
<div class="mb-4 flex items-center">
|
||||||
<p class="ml-2">Nothing Here!</p>
|
<p>Nothing here!</p>
|
||||||
</div>
|
</div>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
@ -19,8 +19,19 @@ defmodule Pinchflat.Pages.JobTableLive do
|
||||||
<div>
|
<div>
|
||||||
<div class="max-w-full overflow-x-auto">
|
<div class="max-w-full overflow-x-auto">
|
||||||
<.table rows={@tasks} table_class="text-white">
|
<.table rows={@tasks} table_class="text-white">
|
||||||
<:col :let={task} label="Job ID">
|
<:col :let={task} label="Task">
|
||||||
<%= task.job_id %>
|
<%= worker_to_task_name(task.job.worker) %>
|
||||||
|
</:col>
|
||||||
|
<:col :let={task} label="Subject">
|
||||||
|
<.subtle_link href={task_to_link(task)}>
|
||||||
|
<%= StringUtils.truncate(task_to_record_name(task), 35) %>
|
||||||
|
</.subtle_link>
|
||||||
|
</:col>
|
||||||
|
<:col :let={task} label="Attempt No.">
|
||||||
|
<%= task.job.attempt %>
|
||||||
|
</:col>
|
||||||
|
<:col :let={task} label="Started At">
|
||||||
|
<%= format_datetime(task.job.attempted_at) %>
|
||||||
</:col>
|
</:col>
|
||||||
</.table>
|
</.table>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -37,9 +48,42 @@ defmodule Pinchflat.Pages.JobTableLive do
|
||||||
defp get_tasks do
|
defp get_tasks do
|
||||||
TasksQuery.new()
|
TasksQuery.new()
|
||||||
|> TasksQuery.join_job()
|
|> TasksQuery.join_job()
|
||||||
|> where(^TasksQuery.in_state("completed"))
|
|> where(^TasksQuery.in_state(["executing", "completed"]))
|
||||||
|> limit(5)
|
|> where(^TasksQuery.has_tag("show_in_dashboard"))
|
||||||
|> Repo.all()
|
|> 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
|
end
|
||||||
|
|
||||||
defp format_datetime(nil), do: ""
|
defp format_datetime(nil), do: ""
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue