diff --git a/lib/obanalyze/dashboard.ex b/lib/obanalyze/dashboard.ex index 617954e..5d5fe9f 100644 --- a/lib/obanalyze/dashboard.ex +++ b/lib/obanalyze/dashboard.ex @@ -26,7 +26,7 @@ defmodule Obanalyze.Dashboard do <.live_nav_bar id="oban_states" page={@page} nav_param="job_state" style={:bar} extra_params={["nav"]}> <:item :for={nav_item <- @nav_items} name={nav_item.name} label={nav_item.label} method="navigate"> - <.live_table id="oban_jobs" limit={per_page_limits()} dom_id={"oban-jobs-#{nav_item.name}"} page={@page} row_attrs={&row_attrs/1} row_fetcher={&row_fetcher(&1, &2, nav_item.name)} default_sort_by={@default_sort_by} title="" search={false}> + <.live_table id="oban_jobs" limit={per_page_limits()} dom_id={"oban-jobs-#{nav_item.name}"} page={@page} row_attrs={&row_attrs/1} row_fetcher={&row_fetcher(&1, &2, nav_item.name)} default_sort_by={@default_sort_by} title="" search={true}> <:col field={:id} sortable={:desc} /> <:col :let={job} field={:worker} sortable={:desc}>
<%= job.worker %>
diff --git a/lib/obanalyze/oban_jobs.ex b/lib/obanalyze/oban_jobs.ex index 5d6ae19..d10db64 100644 --- a/lib/obanalyze/oban_jobs.ex +++ b/lib/obanalyze/oban_jobs.ex @@ -44,11 +44,22 @@ defmodule Obanalyze.ObanJobs do {jobs, total_jobs} end - defp jobs_query(%{sort_by: sort_by, sort_dir: sort_dir, limit: limit}, job_state) do + defp jobs_query(%{sort_by: sort_by, sort_dir: sort_dir, limit: limit} = params, job_state) do Oban.Job |> limit(^limit) |> where([job], job.state == ^job_state) |> order_by({^sort_dir, ^sort_by}) + |> filter(params[:search]) + end + + defp filter(query, nil), do: query + + defp filter(query, term) do + like = "%#{term}%" + + from oj in query, + where: like(oj.worker, ^like), + or_where: like(oj.args, ^like) end defp jobs_count_query(job_state) do diff --git a/test/obanalyze/dashboard_test.exs b/test/obanalyze/dashboard_test.exs index 9b103d4..1deb47b 100644 --- a/test/obanalyze/dashboard_test.exs +++ b/test/obanalyze/dashboard_test.exs @@ -111,6 +111,42 @@ defmodule Obanalyze.DashboardTest do assert_patched(live, "/dashboard/obanalyze?") end + test "search" do + _json_job = + job_fixture(%{foo: "json"}, + state: "executing", + worker: "JsonWorker", + attempted_at: DateTime.utc_now() + ) + + _yaml_job = + job_fixture(%{foo: "yaml"}, + state: "executing", + worker: "YamlWorker", + attempted_at: DateTime.utc_now() + ) + + {:ok, _live, rendered} = live(build_conn(), "/dashboard/obanalyze?search=JsonWorker") + + assert rendered |> :binary.matches("