Skip to content

Commit 26ff35f

Browse files
authored
Merge pull request reidmorrison#192 from claracodes/fix-enqueue-messages
Fix enqueue messages for ActiveJob
2 parents a800956 + d7ba5ad commit 26ff35f

File tree

2 files changed

+173
-4
lines changed

2 files changed

+173
-4
lines changed

lib/rails_semantic_logger/active_job/log_subscriber.rb

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,44 @@ module RailsSemanticLogger
44
module ActiveJob
55
class LogSubscriber < ::ActiveSupport::LogSubscriber
66
def enqueue(event)
7-
log_with_formatter event: event do |fmt|
8-
{message: "Enqueued #{fmt.job_info}"}
7+
ex = event.payload[:exception_object]
8+
9+
if ex
10+
log_with_formatter level: :error, event: event do |fmt|
11+
{
12+
message: "Failed enqueuing #{fmt.job_info} (#{ex.class} (#{ex.message})",
13+
exception: ex
14+
}
15+
end
16+
elsif event.payload[:aborted]
17+
log_with_formatter level: :info, event: event do |fmt|
18+
{ message: "Failed enqueuing #{fmt.job_info}, a before_enqueue callback halted the enqueuing execution." }
19+
end
20+
else
21+
log_with_formatter event: event do |fmt|
22+
{ message: "Enqueued #{fmt.job_info}" }
23+
end
924
end
1025
end
1126

1227
def enqueue_at(event)
13-
log_with_formatter event: event do |fmt|
14-
{message: "Enqueued #{fmt.job_info} at #{fmt.scheduled_at}"}
28+
ex = event.payload[:exception_object]
29+
30+
if ex
31+
log_with_formatter level: :error, event: event do |fmt|
32+
{
33+
message: "Failed enqueuing #{fmt.job_info} (#{ex.class} (#{ex.message})",
34+
exception: ex
35+
}
36+
end
37+
elsif event.payload[:aborted]
38+
log_with_formatter level: :info, event: event do |fmt|
39+
{ message: "Failed enqueuing #{fmt.job_info}, a before_enqueue callback halted the enqueuing execution." }
40+
end
41+
else
42+
log_with_formatter event: event do |fmt|
43+
{message: "Enqueued #{fmt.job_info} at #{fmt.scheduled_at}"}
44+
end
1545
end
1646
end
1747

test/active_job_test.rb

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,145 @@ def id
121121
end
122122
end
123123

124+
describe "#enqueue with exception object" do
125+
let(:event_name) { "enqueue.active_job" }
126+
127+
let(:payload) do
128+
{
129+
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
130+
job: job,
131+
exception_object: ArgumentError.new("error")
132+
}
133+
end
134+
135+
it "logs message" do
136+
messages = semantic_logger_events do
137+
subscriber.enqueue(event)
138+
end
139+
assert_equal 1, messages.count, messages
140+
141+
assert_semantic_logger_event(
142+
messages[0],
143+
level: :error,
144+
name: "Rails",
145+
message_includes: "Failed enqueuing ActiveJobTest::MyJob",
146+
payload_includes: {
147+
job_class: "ActiveJobTest::MyJob",
148+
queue: "my_jobs",
149+
event_name: "enqueue.active_job"
150+
}
151+
)
152+
assert_includes messages[0].payload, :job_id
153+
154+
exception = messages[0].exception
155+
assert exception.is_a?(ArgumentError)
156+
assert_equal "error", exception.message
157+
end
158+
end
159+
160+
describe "#enqueue with throwing :abort" do
161+
let(:event_name) { "enqueue.active_job" }
162+
163+
let(:payload) do
164+
{
165+
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
166+
job: job,
167+
aborted: true
168+
}
169+
end
170+
171+
it "logs message" do
172+
messages = semantic_logger_events do
173+
subscriber.enqueue(event)
174+
end
175+
assert_equal 1, messages.count, messages
176+
177+
assert_semantic_logger_event(
178+
messages[0],
179+
level: :info,
180+
name: "Rails",
181+
message_includes: "Failed enqueuing ActiveJobTest::MyJob",
182+
payload_includes: {
183+
job_class: "ActiveJobTest::MyJob",
184+
queue: "my_jobs",
185+
event_name: "enqueue.active_job"
186+
}
187+
)
188+
assert_match /Failed enqueuing .*, a before_enqueue callback halted the enqueuing execution/, messages[0].message
189+
assert_includes messages[0].payload, :job_id
190+
end
191+
end
192+
193+
describe "#enqueue_at with exception object" do
194+
let(:event_name) { "enqueue.active_job" }
195+
196+
let(:payload) do
197+
{
198+
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
199+
job: job,
200+
exception_object: ArgumentError.new("error")
201+
}
202+
end
203+
204+
it "logs message" do
205+
messages = semantic_logger_events do
206+
subscriber.enqueue_at(event)
207+
end
208+
assert_equal 1, messages.count, messages
209+
210+
assert_semantic_logger_event(
211+
messages[0],
212+
level: :error,
213+
name: "Rails",
214+
message_includes: "Failed enqueuing ActiveJobTest::MyJob",
215+
payload_includes: {
216+
job_class: "ActiveJobTest::MyJob",
217+
queue: "my_jobs",
218+
event_name: "enqueue.active_job"
219+
}
220+
)
221+
assert_includes messages[0].payload, :job_id
222+
223+
exception = messages[0].exception
224+
assert exception.is_a?(ArgumentError)
225+
assert_equal "error", exception.message
226+
end
227+
end
228+
229+
describe "#enqueue_at with throwing :abort" do
230+
let(:event_name) { "enqueue.active_job" }
231+
232+
let(:payload) do
233+
{
234+
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
235+
job: job,
236+
aborted: true
237+
}
238+
end
239+
240+
it "logs message" do
241+
messages = semantic_logger_events do
242+
subscriber.enqueue_at(event)
243+
end
244+
assert_equal 1, messages.count, messages
245+
246+
assert_semantic_logger_event(
247+
messages[0],
248+
level: :info,
249+
name: "Rails",
250+
message_includes: "Failed enqueuing ActiveJobTest::MyJob",
251+
payload_includes: {
252+
job_class: "ActiveJobTest::MyJob",
253+
queue: "my_jobs",
254+
event_name: "enqueue.active_job"
255+
}
256+
)
257+
assert_match /Failed enqueuing .*, a before_enqueue callback halted the enqueuing execution/, messages[0].message
258+
assert_includes messages[0].payload, :job_id
259+
end
260+
end
261+
262+
124263
describe "ActiveJob::Logging::LogSubscriber::EventFormatter" do
125264
let(:formatter) do
126265
RailsSemanticLogger::ActiveJob::LogSubscriber::EventFormatter.new(event: event, log_duration: true)

0 commit comments

Comments
 (0)