Skip to content

Commit 48c96d5

Browse files
committed
Provide API for manipulating various jobs
* Including retries, scheduled, failed, and regular jobs * Add tests
1 parent 7705985 commit 48c96d5

File tree

12 files changed

+648
-171
lines changed

12 files changed

+648
-171
lines changed

lib/exq/api.ex

Lines changed: 132 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,38 +8,93 @@ defmodule Exq.Api do
88
Exq.start_link(Keyword.put(opts, :mode, :api))
99
end
1010

11+
@doc """
12+
List of queues with jobs (empty queues are deleted)
13+
14+
Expected args:
15+
* `pid` - Exq.Api process
16+
17+
Returns:
18+
* `{:ok, queues}` - list of queue
19+
"""
1120
def queues(pid) do
1221
GenServer.call(pid, :queues)
1322
end
1423

24+
@doc """
25+
Clear / Remove queue
26+
27+
Expected args:
28+
* `pid` - Exq.Api process
29+
* `queue` - Queue name
30+
31+
Returns:
32+
* `{:ok, queues}` - list of queue
33+
"""
34+
def remove_queue(pid, queue) do
35+
GenServer.call(pid, {:remove_queue, queue})
36+
end
37+
38+
39+
@doc """
40+
Number of busy workers
41+
42+
Expected args:
43+
* `pid` - Exq.Api process
44+
45+
Returns:
46+
* `{:ok, num_busy}` - number of busy workers
47+
"""
1548
def busy(pid) do
1649
GenServer.call(pid, :busy)
1750
end
1851

19-
def stats(pid, key) do
20-
GenServer.call(pid, {:stats, key})
21-
end
52+
@doc """
53+
Number of processes
2254
23-
def stats(pid, key, date) do
24-
GenServer.call(pid, {:stats, key, date})
25-
end
55+
Expected args:
56+
* `pid` - Exq.Api process
57+
* `key` - Key for stat
58+
* `queue` - Queue name
2659
60+
Returns:
61+
* `{:ok, stat}` stat for key
62+
"""
2763
def processes(pid) do
2864
GenServer.call(pid, :processes)
2965
end
3066

67+
def clear_processes(pid) do
68+
GenServer.call(pid, :clear_processes)
69+
end
70+
71+
@doc """
72+
List jobs enqueued
73+
74+
Expected args:
75+
* `pid` - Exq.Api process
76+
77+
Returns:
78+
* `{:ok, [{queue, [jobs]}, {queue, [jobs]}]}`
79+
"""
3180
def jobs(pid) do
3281
GenServer.call(pid, :jobs)
3382
end
3483

84+
@doc """
85+
List jobs enqueued
86+
87+
Expected args:
88+
* `pid` - Exq.Api process
89+
* `queue` - Queue name
90+
91+
Returns:
92+
* `{:ok, [jobs]}`
93+
"""
3594
def jobs(pid, queue) do
3695
GenServer.call(pid, {:jobs, queue})
3796
end
3897

39-
def failed(pid) do
40-
GenServer.call(pid, :failed)
41-
end
42-
4398
def retries(pid) do
4499
GenServer.call(pid, :retries)
45100
end
@@ -48,26 +103,31 @@ defmodule Exq.Api do
48103
GenServer.call(pid, {:jobs, :scheduled})
49104
end
50105

106+
def scheduled_with_scores(pid) do
107+
GenServer.call(pid, {:jobs, :scheduled_with_scores})
108+
end
109+
110+
def find_job(pid, queue, jid) do
111+
GenServer.call(pid, {:find_job, queue, jid})
112+
end
113+
114+
def remove_job(pid, queue, jid) do
115+
GenServer.call(pid, {:remove_job, queue, jid})
116+
end
117+
51118
def queue_size(pid) do
52119
GenServer.call(pid, :queue_size)
53120
end
54-
def queue_size(pid, :scheduled) do
55-
GenServer.call(pid, {:queue_size, :scheduled})
56-
end
57121
def queue_size(pid, queue) do
58122
GenServer.call(pid, {:queue_size, queue})
59123
end
60124

61-
def find_failed(pid, jid) do
62-
GenServer.call(pid, {:find_failed, jid})
63-
end
64-
65-
def find_job(pid, queue, jid) do
66-
GenServer.call(pid, {:find_job, queue, jid})
125+
def failed(pid) do
126+
GenServer.call(pid, :failed)
67127
end
68128

69-
def remove_queue(pid, queue) do
70-
GenServer.call(pid, {:remove_queue, queue})
129+
def find_failed(pid, jid) do
130+
GenServer.call(pid, {:find_failed, jid})
71131
end
72132

73133
def remove_failed(pid, jid) do
@@ -78,12 +138,59 @@ defmodule Exq.Api do
78138
GenServer.call(pid, :clear_failed)
79139
end
80140

81-
def clear_processes(pid) do
82-
GenServer.call(pid, :clear_processes)
141+
def failed_size(pid) do
142+
GenServer.call(pid, :failed_size)
143+
end
144+
145+
def find_retry(pid, jid) do
146+
GenServer.call(pid, {:find_retry, jid})
147+
end
148+
149+
def remove_retry(pid, jid) do
150+
GenServer.call(pid, {:remove_retry, jid})
83151
end
84152

85-
def retry_failed(pid, jid) do
86-
GenServer.call(pid, {:retry_failed, jid})
153+
def clear_retries(pid) do
154+
GenServer.call(pid, :clear_retries)
155+
end
156+
157+
def retry_size(pid) do
158+
GenServer.call(pid, :retry_size)
159+
end
160+
161+
def find_scheduled(pid, jid) do
162+
GenServer.call(pid, {:find_scheduled, jid})
163+
end
164+
165+
def remove_scheduled(pid, jid) do
166+
GenServer.call(pid, {:remove_scheduled, jid})
167+
end
168+
169+
def clear_scheduled(pid) do
170+
GenServer.call(pid, :clear_scheduled)
171+
end
172+
173+
def scheduled_size(pid) do
174+
GenServer.call(pid, :scheduled_size)
175+
end
176+
177+
@doc """
178+
Return stat for given key
179+
Examples of keys are `processed`, `failed`
180+
181+
Expected args:
182+
* `pid` - Exq.Api process
183+
* `key` - Key for stat
184+
* `queue` - Queue name
185+
186+
Returns:
187+
* `{:ok, stat}` stat for key
188+
"""
189+
def stats(pid, key) do
190+
GenServer.call(pid, {:stats, key})
191+
end
192+
def stats(pid, key, date) do
193+
GenServer.call(pid, {:stats, key, date})
87194
end
88195

89196
def realtime_stats(pid) do

0 commit comments

Comments
 (0)