Skip to content

Commit

Permalink
Merge pull request #1257 from ruby-agent/RUBY-1528-resque-error-events
Browse files Browse the repository at this point in the history
RUBY-1528 Add error_event_data endpoint to PipeService
  • Loading branch information
Karl Sandwich committed Dec 4, 2015
2 parents ac415fc + 91bd591 commit a8212c3
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 1 deletion.
6 changes: 5 additions & 1 deletion CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,12 @@

* Bugfix for NewRelic::Agent.notice_error

Fixes issue introduced in v3.14.0 where calling NewRelic::Agent.notice_error outside of an active transaction results in a NoMethodError.
Fixes issue introduced in v3.14.0 where calling NewRelic::Agent.notice_error outside of an active
transaction results in a NoMethodError.

* Bugfix for Resque TransactionError events

Fixes error preventing Transaction Error events generated in Resque tasks from being sent to New Relic.

## v3.14.0 ##

Expand Down
4 changes: 4 additions & 0 deletions lib/new_relic/agent/pipe_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ def error_data(errors)
write_to_pipe(:error_data, errors) if errors
end

def error_event_data(events)
write_to_pipe(:error_event_data, events) if events
end

def sql_trace_data(sql)
write_to_pipe(:sql_trace_data, sql) if sql
end
Expand Down
7 changes: 7 additions & 0 deletions test/new_relic/agent/pipe_service_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ def test_error_data
assert_equal ['err'], received_data[:error_data]
end

def test_error_event_data
received_data = data_from_forked_process do
@service.error_event_data(['err_ev'])
end
assert_equal ['err_ev'], received_data[:error_event_data]
end

def test_sql_trace_data
received_data = data_from_forked_process do
@service.sql_trace_data(['sql'])
Expand Down
42 changes: 42 additions & 0 deletions test/new_relic/marshalling_test_cases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,41 @@ def test_sends_custom_events
assert_equal(expected_event, events.first)
end

def test_sends_error_events
t0 = freeze_time(Time.at(Time.now.to_i))

with_around_hook do
Transactioner.new.break_it
end

transmit_data

result = $collector.calls_for('error_event_data')

assert_equal 1, result.length
events = result.first.error_events
assert_equal 1, events.length

expected_event = [
{
"type" => "TransactionError",
"error.class" => "StandardError",
"error.message" => "Sorry!",
"timestamp" => t0.to_f,
"transactionName" => "TestTransaction/break_it",
"duration" => 0.0
},
{},
{}
]

event = events.first
# this is only present on REE, and we don't really care - the point of this
# test is just to validate basic marshalling
event[0].delete("gcCumulative")
assert_equal(expected_event, event)
end

class Transactioner
include NewRelic::Agent::Instrumentation::ControllerInstrumentation

Expand All @@ -115,6 +150,13 @@ def do_it
end

add_transaction_tracer :do_it

def break_it
NewRelic::Agent.set_transaction_name("break_it", :category => "TestTransaction")
NewRelic::Agent.notice_error StandardError.new("Sorry!")
end

add_transaction_tracer :break_it
end

def with_around_hook(&blk)
Expand Down

0 comments on commit a8212c3

Please sign in to comment.