Skip to content

Commit eb64467

Browse files
committed
Add error and abort handling messages for #enqueue_at + tests
1 parent ea9d8d6 commit eb64467

File tree

2 files changed

+87
-2
lines changed

2 files changed

+87
-2
lines changed

lib/rails_semantic_logger/active_job/log_subscriber.rb

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,23 @@ def enqueue(event)
2525
end
2626

2727
def enqueue_at(event)
28-
log_with_formatter event: event do |fmt|
29-
{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
3045
end
3146
end
3247

test/active_job_test.rb

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,76 @@ def id
191191
end
192192
end
193193

194+
describe "#enqueue_at with exception object" do
195+
let(:event_name) { "enqueue.active_job" }
196+
197+
let(:payload) do
198+
{
199+
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
200+
job: job,
201+
exception_object: ArgumentError.new("error")
202+
}
203+
end
204+
205+
it "logs message" do
206+
messages = semantic_logger_events do
207+
subscriber.enqueue_at(event)
208+
end
209+
assert_equal 1, messages.count, messages
210+
211+
assert_semantic_logger_event(
212+
messages[0],
213+
level: :error,
214+
name: "Rails",
215+
message_includes: "Failed enqueuing ActiveJobTest::MyJob",
216+
payload_includes: {
217+
job_class: "ActiveJobTest::MyJob",
218+
queue: "my_jobs",
219+
event_name: "enqueue.active_job"
220+
}
221+
)
222+
assert_includes messages[0].payload, :job_id
223+
224+
exception = messages[0].exception
225+
assert exception.is_a?(ArgumentError)
226+
assert_equal "error", exception.message
227+
end
228+
end
229+
230+
describe "#enqueue_at with throwing :abort" do
231+
let(:event_name) { "enqueue.active_job" }
232+
233+
let(:payload) do
234+
{
235+
adapter: ActiveJob::QueueAdapters::InlineAdapter.new,
236+
job: job,
237+
aborted: true
238+
}
239+
end
240+
241+
it "logs message" do
242+
messages = semantic_logger_events do
243+
subscriber.enqueue_at(event)
244+
end
245+
assert_equal 1, messages.count, messages
246+
247+
assert_semantic_logger_event(
248+
messages[0],
249+
level: :info,
250+
name: "Rails",
251+
message_includes: "Failed enqueuing ActiveJobTest::MyJob",
252+
payload_includes: {
253+
job_class: "ActiveJobTest::MyJob",
254+
queue: "my_jobs",
255+
event_name: "enqueue.active_job"
256+
}
257+
)
258+
assert_match /Failed enqueuing .*, a before_enqueue callback halted the enqueuing execution/, messages[0].message
259+
assert_includes messages[0].payload, :job_id
260+
end
261+
end
262+
263+
194264
describe "ActiveJob::Logging::LogSubscriber::EventFormatter" do
195265
let(:formatter) do
196266
RailsSemanticLogger::ActiveJob::LogSubscriber::EventFormatter.new(event: event, log_duration: true)

0 commit comments

Comments
 (0)