newrelic_rpm 3.13.2.302 → 3.14.0.305

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +20 -0
  3. data/README.md +1 -13
  4. data/lib/new_relic/agent/agent.rb +40 -15
  5. data/lib/new_relic/agent/agent_logger.rb +1 -1
  6. data/lib/new_relic/agent/configuration/default_source.rb +16 -6
  7. data/lib/new_relic/agent/configuration/server_source.rb +2 -1
  8. data/lib/new_relic/agent/error_collector.rb +13 -21
  9. data/lib/new_relic/agent/error_event_aggregator.rb +124 -0
  10. data/lib/new_relic/agent/error_trace_aggregator.rb +15 -5
  11. data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +16 -2
  12. data/lib/new_relic/agent/new_relic_service.rb +11 -10
  13. data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +1 -1
  14. data/lib/new_relic/agent/payload_metric_mapping.rb +58 -0
  15. data/lib/new_relic/agent/sampled_buffer.rb +15 -1
  16. data/lib/new_relic/agent/supported_versions.rb +4 -4
  17. data/lib/new_relic/agent/transaction.rb +52 -44
  18. data/lib/new_relic/agent/transaction/request_attributes.rb +110 -0
  19. data/lib/new_relic/agent/transaction_event_aggregator.rb +4 -41
  20. data/lib/new_relic/noticed_error.rb +25 -9
  21. data/lib/new_relic/rack/agent_middleware.rb +5 -0
  22. data/lib/new_relic/version.rb +2 -2
  23. data/newrelic_rpm.gemspec +6 -0
  24. data/test/agent_helper.rb +16 -7
  25. data/test/environments/norails/Gemfile +1 -0
  26. data/test/multiverse/lib/multiverse/runner.rb +1 -1
  27. data/test/multiverse/lib/multiverse/suite.rb +6 -3
  28. data/test/multiverse/suites/agent_only/agent_attributes_test.rb +57 -0
  29. data/test/multiverse/suites/agent_only/audit_log_test.rb +1 -2
  30. data/test/multiverse/suites/agent_only/error_events_test.rb +82 -0
  31. data/test/multiverse/suites/agent_only/harvest_timestamps_test.rb +31 -6
  32. data/test/multiverse/suites/agent_only/logging_test.rb +2 -2
  33. data/test/multiverse/suites/agent_only/marshaling_test.rb +6 -0
  34. data/test/multiverse/suites/agent_only/set_transaction_name_test.rb +2 -2
  35. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +0 -20
  36. data/test/multiverse/suites/grape/grape_test.rb +16 -1
  37. data/test/multiverse/suites/no_json/Envfile +12 -0
  38. data/test/multiverse/suites/no_json/config/newrelic.yml +27 -0
  39. data/test/multiverse/suites/no_json/marshal_config_test.rb +22 -0
  40. data/test/multiverse/suites/rack/example_app.rb +19 -0
  41. data/test/multiverse/suites/rack/response_content_type_test.rb +50 -0
  42. data/test/multiverse/suites/rails/error_tracing_test.rb +12 -7
  43. data/test/multiverse/suites/rails/parameter_capture_test.rb +21 -1
  44. data/test/multiverse/suites/sinatra/sinatra_error_tracing_test.rb +5 -2
  45. data/test/multiverse/suites/sinatra/sinatra_parameter_capture_test.rb +16 -1
  46. data/test/multiverse/suites/sinatra/sinatra_test_cases.rb +4 -2
  47. data/test/new_relic/agent/agent_logger_test.rb +9 -0
  48. data/test/new_relic/agent/agent_test.rb +6 -4
  49. data/test/new_relic/agent/audit_logger_test.rb +0 -7
  50. data/test/new_relic/agent/error_collector_test.rb +20 -250
  51. data/test/new_relic/agent/error_event_aggregator_test.rb +294 -0
  52. data/test/new_relic/agent/error_trace_aggregator_test.rb +273 -5
  53. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -2
  54. data/test/new_relic/agent/new_relic_service_test.rb +8 -32
  55. data/test/new_relic/agent/payload_metric_mapping_test.rb +74 -0
  56. data/test/new_relic/agent/pipe_channel_manager_test.rb +6 -5
  57. data/test/new_relic/agent/sampled_buffer_test.rb +36 -0
  58. data/test/new_relic/agent/sql_sampler_test.rb +4 -14
  59. data/test/new_relic/agent/stats_engine/stats_hash_test.rb +5 -4
  60. data/test/new_relic/agent/threading/thread_profile_test.rb +1 -2
  61. data/test/new_relic/agent/transaction/request_attributes_test.rb +76 -0
  62. data/test/new_relic/agent/transaction_event_aggregator_test.rb +12 -1
  63. data/test/new_relic/agent/transaction_test.rb +60 -11
  64. data/test/new_relic/data_container_tests.rb +17 -6
  65. data/test/new_relic/fake_collector.rb +16 -21
  66. data/test/new_relic/marshalling_test_cases.rb +1 -0
  67. data/test/new_relic/noticed_error_test.rb +59 -0
  68. data/test/new_relic/rack/agent_hooks_test.rb +1 -1
  69. data/test/new_relic/rack/error_collector_test.rb +7 -5
  70. data/test/performance/suites/error_collector.rb +28 -0
  71. data/test/performance/suites/marshalling.rb +0 -8
  72. metadata +14 -3
  73. data/lib/new_relic/agent/new_relic_service/pruby_marshaller.rb +0 -56
@@ -82,9 +82,10 @@ class NewRelic::Agent::PipeChannelManagerTest < Minitest::Test
82
82
  sampler.notice_error(Exception.new("message"), :uri => '/myurl/',
83
83
  :metric => 'path', :referer => 'test_referer',
84
84
  :request_params => {:x => 'y'})
85
- NewRelic::Agent.agent.merge_data_for_endpoint(:error_data, sampler.errors)
85
+ NewRelic::Agent.agent.merge_data_for_endpoint(:error_data, sampler.error_trace_aggregator.harvest!)
86
86
 
87
- assert_equal(1, NewRelic::Agent.agent.error_collector.errors.size)
87
+ errors = NewRelic::Agent.agent.error_collector.error_trace_aggregator.instance_variable_get :@errors
88
+ assert_equal(1, errors.size)
88
89
 
89
90
  start_listener_with_pipe(668)
90
91
 
@@ -95,10 +96,10 @@ class NewRelic::Agent::PipeChannelManagerTest < Minitest::Test
95
96
  :metric => 'path', :referer => 'test_referer',
96
97
  :request_params => {:x => 'y'})
97
98
  service = NewRelic::Agent::PipeService.new(668)
98
- service.error_data(new_sampler.harvest!)
99
+ service.error_data(new_sampler.error_trace_aggregator.harvest!)
99
100
  end
100
-
101
- assert_equal(2, NewRelic::Agent.agent.error_collector.errors.size)
101
+ errors = NewRelic::Agent.agent.error_collector.error_trace_aggregator.instance_variable_get :@errors
102
+ assert_equal(2, errors.size)
102
103
  end
103
104
 
104
105
  def test_listener_merges_analytics_events
@@ -102,5 +102,41 @@ module NewRelic::Agent
102
102
  buffer.reset!
103
103
  assert_equal(0.5, buffer.sample_rate_lifetime)
104
104
  end
105
+
106
+ def test_append_with_block
107
+ buffer = buffer_class.new(5)
108
+ 5.times do |i|
109
+ buffer.append { i }
110
+ end
111
+
112
+ assert_equal [0, 1, 2, 3, 4], buffer.to_a
113
+ end
114
+
115
+ def test_append_with_block_while_sampling
116
+ buffer = buffer_class.new(5)
117
+ buffer.stubs(:rand).returns(0)
118
+
119
+ 10.times do |i|
120
+ buffer.append { i }
121
+ end
122
+
123
+ assert_equal [9, 1, 2, 3, 4], buffer.to_a
124
+ end
125
+
126
+ def test_append_with_block_increments_seen
127
+ buffer = buffer_class.new(5)
128
+ 10.times do |i|
129
+ buffer.append { i }
130
+ end
131
+
132
+ assert_equal 10, buffer.num_seen
133
+ end
134
+
135
+ def test_append_does_not_allow_an_argument_and_block
136
+ assert_raises ArgumentError do
137
+ buffer = buffer_class.new 5
138
+ buffer.append(4) { 5 }
139
+ end
140
+ end
105
141
  end
106
142
  end
@@ -328,13 +328,8 @@ class NewRelic::Agent::SqlSamplerTest < Minitest::Test
328
328
  @sampler.save_slow_sql(data)
329
329
  sql_traces = @sampler.harvest!
330
330
 
331
- if NewRelic::Agent::NewRelicService::JsonMarshaller.is_supported?
332
- marshaller = NewRelic::Agent::NewRelicService::JsonMarshaller.new
333
- params = "eJyrrgUAAXUA+Q==\n"
334
- else
335
- marshaller = NewRelic::Agent::NewRelicService::PrubyMarshaller.new
336
- params = {}
337
- end
331
+ marshaller = NewRelic::Agent::NewRelicService::JsonMarshaller.new
332
+ params = "eJyrrgUAAXUA+Q==\n"
338
333
 
339
334
  expected = [ 'WebTransaction/Controller/c/a', '/c/a', 526336943,
340
335
  'select * from test', 'Database/test/select',
@@ -351,13 +346,8 @@ class NewRelic::Agent::SqlSamplerTest < Minitest::Test
351
346
  trace.call_count = Rational(10, 1)
352
347
  trace.instance_variable_set(:@sql_id, "1234")
353
348
 
354
- if NewRelic::Agent::NewRelicService::JsonMarshaller.is_supported?
355
- marshaller = NewRelic::Agent::NewRelicService::JsonMarshaller.new
356
- params = "eJyrrgUAAXUA+Q==\n"
357
- else
358
- marshaller = NewRelic::Agent::NewRelicService::PrubyMarshaller.new
359
- params = {}
360
- end
349
+ marshaller = NewRelic::Agent::NewRelicService::JsonMarshaller.new
350
+ params = "eJyrrgUAAXUA+Q==\n"
361
351
 
362
352
  expected = [ "path", "uri", 1234, "query", "transaction",
363
353
  10, 12000, 12000, 12000, params]
@@ -7,7 +7,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..','tes
7
7
  class NewRelic::Agent::StatsHashTest < Minitest::Test
8
8
  def setup
9
9
  @hash = NewRelic::Agent::StatsHash.new
10
- NewRelic::Agent.instance.error_collector.errors.clear
10
+ reset_error_traces!
11
11
  end
12
12
 
13
13
  def test_creates_default_entries
@@ -170,17 +170,18 @@ class NewRelic::Agent::StatsHashTest < Minitest::Test
170
170
 
171
171
  @hash.record(DEFAULT_SPEC, 1)
172
172
 
173
- assert_has_error NewRelic::Agent::StatsHash::StatsHashLookupError
173
+ assert_has_traced_error NewRelic::Agent::StatsHash::StatsHashLookupError
174
174
  end
175
175
 
176
176
  def test_borked_default_proc_heals_thyself
177
177
  fake_borked_default_proc(@hash)
178
178
 
179
179
  @hash.record(DEFAULT_SPEC, 1)
180
- NewRelic::Agent.instance.error_collector.errors.clear
180
+ reset_error_traces!
181
181
 
182
182
  @hash.record(NewRelic::MetricSpec.new('something/else/entirely'), 1)
183
- assert_equal 0, NewRelic::Agent.instance.error_collector.errors.size
183
+ errors = harvest_error_traces!
184
+ assert_equal 0, errors.size
184
185
  end
185
186
  end
186
187
 
@@ -123,8 +123,7 @@ if NewRelic::Agent::Threading::BacktraceService.is_supported?
123
123
  0
124
124
  ]
125
125
 
126
- identity_encoder = NewRelic::Agent::NewRelicService::PrubyMarshaller.new.default_encoder
127
- assert_equal expected, @profile.to_collector_array(identity_encoder)
126
+ assert_equal expected, @profile.to_collector_array(NewRelic::Agent::NewRelicService::Encoders::Identity)
128
127
  end
129
128
 
130
129
  def test_to_collector_array_with_xray_session_id
@@ -0,0 +1,76 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..','..','test_helper'))
6
+ require 'new_relic/agent/transaction/request_attributes'
7
+
8
+ module NewRelic
9
+ module Agent
10
+ class Transaction
11
+ class RequestAttributesTest < Minitest::Test
12
+
13
+ def test_tolerates_request_without_desired_methods
14
+ request = stub 'request'
15
+ attrs = RequestAttributes.new request
16
+
17
+ assert_equal "/", attrs.request_path
18
+ assert_nil attrs.referer
19
+ assert_nil attrs.content_length
20
+ assert_nil attrs.host
21
+ assert_nil attrs.user_agent
22
+ assert_nil attrs.request_method
23
+ end
24
+
25
+ def test_sets_referer_from_request
26
+ request = stub 'request', :referer => "http://site.com/page"
27
+ attrs = RequestAttributes.new request
28
+
29
+ assert_equal "http://site.com/page", attrs.referer
30
+ end
31
+
32
+ def test_sets_accept_from_request_headers
33
+ request = stub 'request', :env => {"HTTP_ACCEPT" => "application/json"}
34
+ attrs = RequestAttributes.new request
35
+
36
+ assert_equal "application/json", attrs.accept
37
+ end
38
+
39
+ def test_sets_content_length_from_request
40
+ request = stub 'request', :content_length => "111"
41
+ attrs = RequestAttributes.new request
42
+
43
+ assert_equal 111, attrs.content_length
44
+ end
45
+
46
+ def test_sets_host_from_request
47
+ request = stub 'request', :host => "localhost"
48
+ attrs = RequestAttributes.new request
49
+
50
+ assert_equal "localhost", attrs.host
51
+ end
52
+
53
+ def test_sets_port_from_request
54
+ request = stub 'request', :port => "3000"
55
+ attrs = RequestAttributes.new request
56
+
57
+ assert_equal 3000, attrs.port
58
+ end
59
+
60
+ def test_sets_user_agent_from_request
61
+ request = stub 'request', :user_agent => "use this!"
62
+ attrs = RequestAttributes.new request
63
+
64
+ assert_equal "use this!", attrs.user_agent
65
+ end
66
+
67
+ def test_sets_method_from_request
68
+ request = stub 'request', :request_method => "POST"
69
+ attrs = RequestAttributes.new request
70
+
71
+ assert_equal "POST", attrs.request_method
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -68,6 +68,16 @@ class NewRelic::Agent::TransactionEventAggregatorTest < Minitest::Test
68
68
  end
69
69
  end
70
70
 
71
+ def test_error_is_included_in_event_data
72
+ with_sampler_config do
73
+ generate_request('whatever', :error => true)
74
+
75
+ event_data, *_ = captured_transaction_event
76
+
77
+ assert event_data['error']
78
+ end
79
+ end
80
+
71
81
  def test_includes_custom_attributes_in_event
72
82
  with_sampler_config do
73
83
  attributes.merge_custom_attributes('bing' => 2)
@@ -396,7 +406,8 @@ class NewRelic::Agent::TransactionEventAggregatorTest < Minitest::Test
396
406
  :type => :controller,
397
407
  :start_timestamp => options[:timestamp] || Time.now.to_f,
398
408
  :duration => 0.1,
399
- :attributes => attributes
409
+ :attributes => attributes,
410
+ :error => false
400
411
  }.merge(options)
401
412
  @event_listener.notify(:transaction_finished, payload)
402
413
  end
@@ -9,7 +9,7 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
9
9
  def setup
10
10
  @stats_engine = NewRelic::Agent.instance.stats_engine
11
11
  @stats_engine.reset!
12
- NewRelic::Agent.instance.error_collector.reset!
12
+ NewRelic::Agent.instance.error_collector.drop_buffered_data
13
13
  end
14
14
 
15
15
  def teardown
@@ -698,8 +698,8 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
698
698
  txn = in_transaction('oops') do
699
699
  NewRelic::Agent::Transaction.notice_error("wat?")
700
700
  end
701
-
702
- error = NewRelic::Agent.instance.error_collector.errors.first
701
+ errors = harvest_error_traces!
702
+ error = errors.first
703
703
  assert_equal txn.attributes, error.attributes
704
704
  end
705
705
 
@@ -708,13 +708,15 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
708
708
  # no-op
709
709
  end
710
710
  NewRelic::Agent::Transaction.notice_error("")
711
- assert_equal 1, NewRelic::Agent.instance.error_collector.errors.count
711
+ errors = harvest_error_traces!
712
+ assert_equal 1, errors.count
712
713
  end
713
714
 
714
715
  def test_notice_error_without_transaction_notifies_error_collector
715
716
  cleanup_transaction
716
717
  NewRelic::Agent::Transaction.notice_error("")
717
- assert_equal 1, NewRelic::Agent.instance.error_collector.errors.count
718
+ errors = harvest_error_traces!
719
+ assert_equal 1, errors.count
718
720
  end
719
721
 
720
722
  def test_notice_error_sends_uri_and_referer_from_request
@@ -723,8 +725,10 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
723
725
  NewRelic::Agent::Transaction.notice_error("wat")
724
726
  end
725
727
 
726
- assert_equal 1, NewRelic::Agent.instance.error_collector.errors.count
727
- error = NewRelic::Agent.instance.error_collector.errors.first
728
+ errors = harvest_error_traces!
729
+ assert_equal 1, errors.count
730
+
731
+ error = errors.first
728
732
  assert_equal "/here", error.request_uri
729
733
  end
730
734
 
@@ -1407,8 +1411,8 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
1407
1411
  end
1408
1412
 
1409
1413
  def test_http_response_code_included_in_agent_attributes
1410
- txn = in_transaction do |txn|
1411
- txn.http_response_code = 418
1414
+ txn = in_transaction do |t|
1415
+ t.http_response_code = 418
1412
1416
  end
1413
1417
 
1414
1418
  actual = txn.attributes.agent_attributes_for(NewRelic::Agent::AttributeFilter::DST_TRANSACTION_TRACER)
@@ -1417,7 +1421,7 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
1417
1421
 
1418
1422
  def test_referer_in_agent_attributes
1419
1423
  request = stub('request', :referer => "/referered", :path => "/")
1420
- txn = in_transaction(:request => request) do |txn|
1424
+ txn = in_transaction(:request => request) do
1421
1425
  end
1422
1426
 
1423
1427
  actual = txn.attributes.agent_attributes_for(NewRelic::Agent::AttributeFilter::DST_ERROR_COLLECTOR)
@@ -1426,10 +1430,55 @@ class NewRelic::Agent::TransactionTest < Minitest::Test
1426
1430
 
1427
1431
  def test_referer_omitted_if_not_on_request
1428
1432
  request = stub('request', :path => "/")
1429
- txn = in_transaction(:request => request) do |txn|
1433
+ txn = in_transaction(:request => request) do
1430
1434
  end
1431
1435
 
1432
1436
  actual = txn.attributes.agent_attributes_for(NewRelic::Agent::AttributeFilter::DST_TRANSACTION_TRACER)
1433
1437
  refute_includes actual, :'request.headers.referer'
1434
1438
  end
1439
+
1440
+ def test_error_recorded_predicate_false_by_default
1441
+ txn = in_transaction do
1442
+ end
1443
+
1444
+ refute txn.error_recorded?, "Did not expected error to be recorded"
1445
+ end
1446
+
1447
+ def test_error_recorded_predicate_true_when_error_recorded
1448
+ txn = in_transaction do |t|
1449
+ t.notice_error StandardError.new "Sorry!"
1450
+ end
1451
+
1452
+ assert txn.error_recorded?, "Expected error to be recorded"
1453
+ end
1454
+
1455
+ def test_error_recorded_predicate_abides_by_ignore_filter
1456
+ filter = Proc.new do |error|
1457
+ error.message == "Sorry!" ? nil : error
1458
+ end
1459
+
1460
+ with_ignore_error_filter filter do
1461
+ txn = in_transaction do |t|
1462
+ t.notice_error StandardError.new "Sorry!"
1463
+ end
1464
+
1465
+ refute txn.error_recorded?, "Expected error to be apologetic"
1466
+ end
1467
+ end
1468
+
1469
+ def test_error_recorded_with_ignore_filter_and_multiple_errors
1470
+ filter = Proc.new do |error|
1471
+ error.message == "Sorry!" ? nil : error
1472
+ end
1473
+
1474
+ with_ignore_error_filter filter do
1475
+ txn = in_transaction do |t|
1476
+ t.notice_error StandardError.new "Sorry!"
1477
+ t.notice_error StandardError.new "Not Sorry!"
1478
+ t.notice_error StandardError.new "Sorry!"
1479
+ end
1480
+
1481
+ assert txn.error_recorded?, "Expected error to be recorded"
1482
+ end
1483
+ end
1435
1484
  end
@@ -29,11 +29,19 @@ module NewRelic
29
29
  self.respond_to?(:max_data_items) ? max_data_items : 5
30
30
  end
31
31
 
32
+ def harvest_size container, items
33
+ if container.respond_to?(:has_metadata?) && container.has_metadata? && !items.empty?
34
+ items.last.size
35
+ else
36
+ items.size
37
+ end
38
+ end
39
+
32
40
  def test_harvest_should_return_all_data_items
33
41
  c = create_container
34
42
  populate_container(c, num_data_items)
35
43
  results = c.harvest!
36
- assert_equal(num_data_items, results.size)
44
+ assert_equal(num_data_items, harvest_size(c, results))
37
45
  end
38
46
 
39
47
  def test_calling_harvest_again_should_not_return_items_again
@@ -42,16 +50,18 @@ module NewRelic
42
50
 
43
51
  c.harvest! # clears container
44
52
  results = c.harvest!
45
- assert_equal(0, results.size)
53
+ assert_equal(0, harvest_size(c, results))
46
54
  end
47
55
 
48
56
  def test_calling_harvest_after_re_populating_works
49
57
  container = create_container
50
58
  populate_container(container, num_data_items)
51
- assert_equal(num_data_items, container.harvest!.size)
59
+ results = container.harvest!
60
+ assert_equal(num_data_items, harvest_size(container, results))
52
61
 
53
62
  populate_container(container, num_data_items)
54
- assert_equal(num_data_items, container.harvest!.size)
63
+ results = container.harvest!
64
+ assert_equal(num_data_items, harvest_size(container, results))
55
65
  end
56
66
  end
57
67
 
@@ -62,7 +72,8 @@ module NewRelic
62
72
  c = create_container
63
73
  populate_container(c, 5)
64
74
  c.reset!
65
- assert_equal(0, c.harvest!.size)
75
+ results = c.harvest!
76
+ assert_equal(0, harvest_size(c, results))
66
77
  end
67
78
 
68
79
  def test_merge_should_re_integrate_items
@@ -70,7 +81,7 @@ module NewRelic
70
81
  populate_container(c, 5)
71
82
  c.merge!(c.harvest!)
72
83
  results = c.harvest!
73
- assert_equal(5, results.size)
84
+ assert_equal(5, harvest_size(c, results))
74
85
  end
75
86
  end
76
87
  end
@@ -71,6 +71,7 @@ module NewRelic
71
71
  'shutdown' => Response.new(200, {'return_value' => nil}),
72
72
  'analytic_event_data' => Response.new(200, {'return_value' => nil}),
73
73
  'custom_event_data' => Response.new(200, {'return_value' => nil}),
74
+ 'error_event_data' => Response.new(200, {'return_value' => nil})
74
75
  }
75
76
  reset
76
77
  end
@@ -113,15 +114,10 @@ module NewRelic
113
114
 
114
115
  if uri.path =~ /agent_listener\/\d+\/.+\/(\w+)/
115
116
  method = $1
116
- format = json_format?(uri) ? :json : :pruby
117
117
  if @mock.keys.include? method
118
118
  status, body = @mock[method].evaluate
119
119
  res.status = status
120
- if format == :json
121
- res.write ::NewRelic::JSONWrapper.dump(body)
122
- else
123
- res.write Marshal.dump(body)
124
- end
120
+ res.write ::NewRelic::JSONWrapper.dump(body)
125
121
  else
126
122
  res.status = 500
127
123
  res.write "Method not found"
@@ -133,15 +129,7 @@ module NewRelic
133
129
  raw_body = req.body.read
134
130
  raw_body = Zlib::Inflate.inflate(raw_body) if req.env["HTTP_CONTENT_ENCODING"] == "deflate"
135
131
 
136
- body = if format == :json
137
- body = ::NewRelic::JSONWrapper.load(raw_body)
138
- else
139
- body = Marshal.load(raw_body)
140
-
141
- # Symbols remain in Ruby-marshalled data, so tidy up so tests can
142
- # rely on strings to compare against in fake collector results.
143
- body = NewRelic::Agent::EncodingNormalizer.normalize_object(body)
144
- end
132
+ body = ::NewRelic::JSONWrapper.load(raw_body)
145
133
  rescue
146
134
  body = "UNABLE TO DECODE BODY: #{raw_body}"
147
135
 
@@ -156,16 +144,12 @@ module NewRelic
156
144
  @agent_data << AgentPost.create(:action => method,
157
145
  :body => body,
158
146
  :run_id => run_id,
159
- :format => format,
147
+ :format => :json,
160
148
  :query_params => query_params)
161
149
  end
162
150
  res.finish
163
151
  end
164
152
 
165
- def json_format?(uri)
166
- uri.query && uri.query.include?('marshal_format=json')
167
- end
168
-
169
153
  def app
170
154
  self
171
155
  end
@@ -211,6 +195,8 @@ module NewRelic
211
195
  AnalyticEventDataPost.new(opts)
212
196
  when 'error_data'
213
197
  ErrorDataPost.new(opts)
198
+ when 'error_event_data'
199
+ ErrorEventDataPost.new(opts)
214
200
  else
215
201
  new(opts)
216
202
  end
@@ -397,6 +383,15 @@ module NewRelic
397
383
  @params["intrinsics"]
398
384
  end
399
385
  end
400
- end
401
386
 
387
+ class ErrorEventDataPost < AgentPost
388
+ attr_reader :reservoir_metadata, :error_events
389
+
390
+ def initialize opts={}
391
+ super
392
+ @reservoir_metadata = body[1]
393
+ @error_events = body[2]
394
+ end
395
+ end
396
+ end
402
397
  end