Skip to content

Commit 30e2d6c

Browse files
maltoeegze
andauthored
Allow searching on Postgres (#8)
* Allow searching on Postgres This patch changes the search implementation to explicitly cast the jsonb args column to `text` before passing it to `like/2`. * Update lib/obanalyze/oban_jobs.ex Co-authored-by: Aleksandr Lossenko <[email protected]> --------- Co-authored-by: Aleksandr Lossenko <[email protected]>
1 parent 8b76747 commit 30e2d6c

File tree

2 files changed

+25
-27
lines changed

2 files changed

+25
-27
lines changed

lib/obanalyze/oban_jobs.ex

+11-3
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,17 @@ defmodule Obanalyze.ObanJobs do
5757
defp filter(query, term) do
5858
like = "%#{term}%"
5959

60-
from oj in query,
61-
where: like(oj.worker, ^like),
62-
or_where: like(oj.args, ^like)
60+
case Oban.config() do
61+
%{engine: Oban.Engines.Basic} ->
62+
from oj in query,
63+
where: ilike(oj.worker, ^like),
64+
or_where: ilike(type(oj.args, :string), ^like)
65+
66+
_ ->
67+
from oj in query,
68+
where: like(oj.worker, ^like),
69+
or_where: like(oj.args, ^like)
70+
end
6371
end
6472

6573
defp jobs_count_query(job_state) do

test/obanalyze/dashboard_test.exs

+14-24
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,10 @@ defmodule Obanalyze.DashboardTest do
1818
test "shows jobs with limit" do
1919
for _ <- 1..110, do: job_fixture(%{}, state: "executing", attempted_at: DateTime.utc_now())
2020
{:ok, live, rendered} = live(build_conn(), "/dashboard/obanalyze")
21-
22-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
23-
20
21+
assert_count(rendered, "executing", 20)
2422

2523
rendered = render_patch(live, "/dashboard/obanalyze?limit=100")
26-
27-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
28-
100
24+
assert_count(rendered, "executing", 100)
2925
end
3026

3127
test "shows job info modal" do
@@ -51,28 +47,23 @@ defmodule Obanalyze.DashboardTest do
5147
conn = build_conn()
5248
{:ok, live, rendered} = live(conn, "/dashboard/obanalyze")
5349

54-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
55-
1
50+
assert_count(rendered, "executing", 1)
5651

5752
{:ok, live, rendered} =
5853
live
5954
|> element("a", "Completed (1)")
6055
|> render_click()
6156
|> follow_redirect(conn)
6257

63-
assert rendered
64-
|> :binary.matches("<td class=\"oban-jobs-completed-worker\"")
65-
|> length() == 1
58+
assert_count(rendered, "completed", 1)
6659

6760
{:ok, _live, rendered} =
6861
live
6962
|> element("a", "Scheduled (0)")
7063
|> render_click()
7164
|> follow_redirect(conn)
7265

73-
assert rendered
74-
|> :binary.matches("<td class=\"oban-jobs-scheduled-worker\"")
75-
|> length() == 0
66+
assert_count(rendered, "scheduled", 0)
7667
end
7768

7869
test "run now job" do
@@ -127,24 +118,23 @@ defmodule Obanalyze.DashboardTest do
127118
)
128119

129120
{:ok, _live, rendered} = live(build_conn(), "/dashboard/obanalyze?search=JsonWorker")
130-
131-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
132-
1
121+
assert_count(rendered, 1)
133122

134123
{:ok, _live, rendered} = live(build_conn(), "/dashboard/obanalyze?search=YamlWorker")
124+
assert_count(rendered, 1)
135125

136-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
137-
1
126+
{:ok, _live, rendered} = live(build_conn(), "/dashboard/obanalyze?search=yamlworker")
127+
assert_count(rendered, 1)
138128

139129
{:ok, _live, rendered} = live(build_conn(), "/dashboard/obanalyze?search=foo")
140-
141-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
142-
2
130+
assert_count(rendered, 2)
143131

144132
{:ok, _live, rendered} = live(build_conn(), "/dashboard/obanalyze?search=nothing")
133+
assert_count(rendered, 0)
134+
end
145135

146-
assert rendered |> :binary.matches("<td class=\"oban-jobs-executing-worker\"") |> length() ==
147-
0
136+
defp assert_count(rendered, state \\ "executing", n) do
137+
assert length(:binary.matches(rendered, "<td class=\"oban-jobs-#{state}-worker\"")) == n
148138
end
149139

150140
defp job_fixture(args, opts) do

0 commit comments

Comments
 (0)