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.
- checksums.yaml +4 -4
- data/CHANGELOG +20 -0
- data/README.md +1 -13
- data/lib/new_relic/agent/agent.rb +40 -15
- data/lib/new_relic/agent/agent_logger.rb +1 -1
- data/lib/new_relic/agent/configuration/default_source.rb +16 -6
- data/lib/new_relic/agent/configuration/server_source.rb +2 -1
- data/lib/new_relic/agent/error_collector.rb +13 -21
- data/lib/new_relic/agent/error_event_aggregator.rb +124 -0
- data/lib/new_relic/agent/error_trace_aggregator.rb +15 -5
- data/lib/new_relic/agent/instrumentation/middleware_tracing.rb +16 -2
- data/lib/new_relic/agent/new_relic_service.rb +11 -10
- data/lib/new_relic/agent/new_relic_service/json_marshaller.rb +1 -1
- data/lib/new_relic/agent/payload_metric_mapping.rb +58 -0
- data/lib/new_relic/agent/sampled_buffer.rb +15 -1
- data/lib/new_relic/agent/supported_versions.rb +4 -4
- data/lib/new_relic/agent/transaction.rb +52 -44
- data/lib/new_relic/agent/transaction/request_attributes.rb +110 -0
- data/lib/new_relic/agent/transaction_event_aggregator.rb +4 -41
- data/lib/new_relic/noticed_error.rb +25 -9
- data/lib/new_relic/rack/agent_middleware.rb +5 -0
- data/lib/new_relic/version.rb +2 -2
- data/newrelic_rpm.gemspec +6 -0
- data/test/agent_helper.rb +16 -7
- data/test/environments/norails/Gemfile +1 -0
- data/test/multiverse/lib/multiverse/runner.rb +1 -1
- data/test/multiverse/lib/multiverse/suite.rb +6 -3
- data/test/multiverse/suites/agent_only/agent_attributes_test.rb +57 -0
- data/test/multiverse/suites/agent_only/audit_log_test.rb +1 -2
- data/test/multiverse/suites/agent_only/error_events_test.rb +82 -0
- data/test/multiverse/suites/agent_only/harvest_timestamps_test.rb +31 -6
- data/test/multiverse/suites/agent_only/logging_test.rb +2 -2
- data/test/multiverse/suites/agent_only/marshaling_test.rb +6 -0
- data/test/multiverse/suites/agent_only/set_transaction_name_test.rb +2 -2
- data/test/multiverse/suites/agent_only/thread_profiling_test.rb +0 -20
- data/test/multiverse/suites/grape/grape_test.rb +16 -1
- data/test/multiverse/suites/no_json/Envfile +12 -0
- data/test/multiverse/suites/no_json/config/newrelic.yml +27 -0
- data/test/multiverse/suites/no_json/marshal_config_test.rb +22 -0
- data/test/multiverse/suites/rack/example_app.rb +19 -0
- data/test/multiverse/suites/rack/response_content_type_test.rb +50 -0
- data/test/multiverse/suites/rails/error_tracing_test.rb +12 -7
- data/test/multiverse/suites/rails/parameter_capture_test.rb +21 -1
- data/test/multiverse/suites/sinatra/sinatra_error_tracing_test.rb +5 -2
- data/test/multiverse/suites/sinatra/sinatra_parameter_capture_test.rb +16 -1
- data/test/multiverse/suites/sinatra/sinatra_test_cases.rb +4 -2
- data/test/new_relic/agent/agent_logger_test.rb +9 -0
- data/test/new_relic/agent/agent_test.rb +6 -4
- data/test/new_relic/agent/audit_logger_test.rb +0 -7
- data/test/new_relic/agent/error_collector_test.rb +20 -250
- data/test/new_relic/agent/error_event_aggregator_test.rb +294 -0
- data/test/new_relic/agent/error_trace_aggregator_test.rb +273 -5
- data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -2
- data/test/new_relic/agent/new_relic_service_test.rb +8 -32
- data/test/new_relic/agent/payload_metric_mapping_test.rb +74 -0
- data/test/new_relic/agent/pipe_channel_manager_test.rb +6 -5
- data/test/new_relic/agent/sampled_buffer_test.rb +36 -0
- data/test/new_relic/agent/sql_sampler_test.rb +4 -14
- data/test/new_relic/agent/stats_engine/stats_hash_test.rb +5 -4
- data/test/new_relic/agent/threading/thread_profile_test.rb +1 -2
- data/test/new_relic/agent/transaction/request_attributes_test.rb +76 -0
- data/test/new_relic/agent/transaction_event_aggregator_test.rb +12 -1
- data/test/new_relic/agent/transaction_test.rb +60 -11
- data/test/new_relic/data_container_tests.rb +17 -6
- data/test/new_relic/fake_collector.rb +16 -21
- data/test/new_relic/marshalling_test_cases.rb +1 -0
- data/test/new_relic/noticed_error_test.rb +59 -0
- data/test/new_relic/rack/agent_hooks_test.rb +1 -1
- data/test/new_relic/rack/error_collector_test.rb +7 -5
- data/test/performance/suites/error_collector.rb +28 -0
- data/test/performance/suites/marshalling.rb +0 -8
- metadata +14 -3
- data/lib/new_relic/agent/new_relic_service/pruby_marshaller.rb +0 -56
@@ -126,6 +126,14 @@ class NewRelic::Agent::NoticedErrorTest < Minitest::Test
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
def test_long_message
|
130
|
+
#yes, times 500. it's a 5000 byte string. Assuming strings are
|
131
|
+
#still 1 byte / char.
|
132
|
+
err = create_error(StandardError.new("1234567890" * 500))
|
133
|
+
assert_equal 4096, err.message.length
|
134
|
+
assert_equal ('1234567890' * 500)[0..4095], err.message
|
135
|
+
end
|
136
|
+
|
129
137
|
def test_permits_messages_from_whitelisted_exceptions_in_high_security_mode
|
130
138
|
with_config(:'strip_exception_messages.whitelist' => 'NewRelic::TestHelpers::Exceptions::TestError') do
|
131
139
|
e = TestError.new('whitelisted test exception')
|
@@ -185,6 +193,57 @@ class NewRelic::Agent::NoticedErrorTest < Minitest::Test
|
|
185
193
|
end
|
186
194
|
end
|
187
195
|
|
196
|
+
def test_custom_attributes_sent_when_enabled
|
197
|
+
with_config :'error_collector.attributes.enabled' => true do
|
198
|
+
attributes = NewRelic::Agent::Transaction::Attributes.new(NewRelic::Agent.instance.attribute_filter)
|
199
|
+
custom_attrs = {"name" => "Ron Burgundy", "channel" => 4}
|
200
|
+
attributes.merge_custom_attributes(custom_attrs)
|
201
|
+
|
202
|
+
error = NewRelic::NoticedError.new(@path, Exception.new("O_o"))
|
203
|
+
error.attributes = attributes
|
204
|
+
|
205
|
+
assert_equal custom_attrs, error.custom_attributes
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_custom_attributes_not_sent_when_disabled
|
210
|
+
with_config :'error_collector.attributes.enabled' => false do
|
211
|
+
attributes = NewRelic::Agent::Transaction::Attributes.new(NewRelic::Agent.instance.attribute_filter)
|
212
|
+
custom_attrs = {"name" => "Ron Burgundy", "channel" => 4}
|
213
|
+
attributes.merge_custom_attributes(custom_attrs)
|
214
|
+
|
215
|
+
error = NewRelic::NoticedError.new(@path, Exception.new("O_o"))
|
216
|
+
error.attributes = attributes
|
217
|
+
|
218
|
+
assert_equal({}, error.custom_attributes)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_agent_attributes_sent_when_enabled
|
223
|
+
with_config :'error_collector.attributes.enabled' => true do
|
224
|
+
attributes = NewRelic::Agent::Transaction::Attributes.new(NewRelic::Agent.instance.attribute_filter)
|
225
|
+
attributes.add_agent_attribute :"request.headers.referer", "http://blog.site/home", NewRelic::Agent::AttributeFilter::DST_ALL
|
226
|
+
|
227
|
+
error = NewRelic::NoticedError.new(@path, Exception.new("O_o"))
|
228
|
+
error.attributes = attributes
|
229
|
+
|
230
|
+
expected = {:"request.headers.referer" => "http://blog.site/home"}
|
231
|
+
assert_equal expected, error.agent_attributes
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_agent_attributes_not_sent_when_disabled
|
236
|
+
with_config :'error_collector.attributes.enabled' => false do
|
237
|
+
attributes = NewRelic::Agent::Transaction::Attributes.new(NewRelic::Agent.instance.attribute_filter)
|
238
|
+
attributes.add_agent_attribute :"request.headers.referer", "http://blog.site/home", NewRelic::Agent::AttributeFilter::DST_ALL
|
239
|
+
|
240
|
+
error = NewRelic::NoticedError.new(@path, Exception.new("O_o"))
|
241
|
+
error.attributes = attributes
|
242
|
+
|
243
|
+
assert_equal({}, error.agent_attributes)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
188
247
|
def create_error(exception = StandardError.new)
|
189
248
|
noticed_error = NewRelic::NoticedError.new(@path, exception, @time)
|
190
249
|
noticed_error.attributes = @attributes
|
@@ -24,7 +24,7 @@ module NewRelic::Rack
|
|
24
24
|
def setup
|
25
25
|
NewRelic::Agent.reset_config
|
26
26
|
NewRelic::Agent.manual_start
|
27
|
-
NewRelic::Agent.instance.error_collector.
|
27
|
+
NewRelic::Agent.instance.error_collector.drop_buffered_data
|
28
28
|
|
29
29
|
# sanity checks
|
30
30
|
assert NewRelic::Agent.instance.error_collector.enabled?
|
@@ -49,7 +49,8 @@ module NewRelic::Rack
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
|
52
|
+
errors = harvest_error_traces!
|
53
|
+
assert(errors.empty?,
|
53
54
|
'noticed an error that should have been ignored')
|
54
55
|
end
|
55
56
|
|
@@ -63,14 +64,15 @@ module NewRelic::Rack
|
|
63
64
|
assert_raises RuntimeError do
|
64
65
|
get '/foo/bar?q=12'
|
65
66
|
end
|
67
|
+
error = last_error
|
66
68
|
|
67
|
-
assert_equal('unhandled error',
|
68
|
-
assert_equal('/foo/bar',
|
69
|
+
assert_equal('unhandled error', error.message)
|
70
|
+
assert_equal('/foo/bar', error.request_uri)
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
72
74
|
def last_error
|
73
|
-
|
75
|
+
harvest_error_traces!.last
|
74
76
|
end
|
75
77
|
end
|
76
78
|
end
|
@@ -0,0 +1,28 @@
|
|
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
|
+
class ErrorCollectorTests < Performance::TestCase
|
6
|
+
def setup
|
7
|
+
@txn_name = "Controller/blogs/index".freeze
|
8
|
+
@err_msg = "Sorry!".freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_notice_error
|
12
|
+
measure do
|
13
|
+
in_transaction :name => @txn_name do
|
14
|
+
NewRelic::Agent.notice_error StandardError.new @err_msg
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_notice_error_with_custom_attributes
|
20
|
+
opts = {:custom_params => {:name => "Wes Mantooth", :channel => 9}}
|
21
|
+
|
22
|
+
measure do
|
23
|
+
in_transaction :name => @txn_name do
|
24
|
+
NewRelic::Agent.notice_error StandardError.new(@err_msg), opts
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -56,14 +56,6 @@ class Marshalling < Performance::TestCase
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def test_basic_marshalling_pruby
|
60
|
-
marshaller = NewRelic::Agent::NewRelicService::PrubyMarshaller.new
|
61
|
-
measure do
|
62
|
-
marshaller.dump(@payload)
|
63
|
-
marshaller.dump(@tt_payload)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
59
|
# Skips Strings used as Hash keys, since they are frozen
|
68
60
|
def each_string(object, &blk)
|
69
61
|
case object
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic_rpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.14.0.305
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Krajcar
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-10-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
@@ -267,6 +267,7 @@ files:
|
|
267
267
|
- lib/new_relic/agent/deprecator.rb
|
268
268
|
- lib/new_relic/agent/encoding_normalizer.rb
|
269
269
|
- lib/new_relic/agent/error_collector.rb
|
270
|
+
- lib/new_relic/agent/error_event_aggregator.rb
|
270
271
|
- lib/new_relic/agent/error_trace_aggregator.rb
|
271
272
|
- lib/new_relic/agent/event_buffer.rb
|
272
273
|
- lib/new_relic/agent/event_listener.rb
|
@@ -348,10 +349,10 @@ files:
|
|
348
349
|
- lib/new_relic/agent/new_relic_service/encoders.rb
|
349
350
|
- lib/new_relic/agent/new_relic_service/json_marshaller.rb
|
350
351
|
- lib/new_relic/agent/new_relic_service/marshaller.rb
|
351
|
-
- lib/new_relic/agent/new_relic_service/pruby_marshaller.rb
|
352
352
|
- lib/new_relic/agent/null_logger.rb
|
353
353
|
- lib/new_relic/agent/obfuscator.rb
|
354
354
|
- lib/new_relic/agent/parameter_filtering.rb
|
355
|
+
- lib/new_relic/agent/payload_metric_mapping.rb
|
355
356
|
- lib/new_relic/agent/pipe_channel_manager.rb
|
356
357
|
- lib/new_relic/agent/pipe_service.rb
|
357
358
|
- lib/new_relic/agent/rules_engine.rb
|
@@ -385,6 +386,7 @@ files:
|
|
385
386
|
- lib/new_relic/agent/transaction.rb
|
386
387
|
- lib/new_relic/agent/transaction/attributes.rb
|
387
388
|
- lib/new_relic/agent/transaction/developer_mode_sample_buffer.rb
|
389
|
+
- lib/new_relic/agent/transaction/request_attributes.rb
|
388
390
|
- lib/new_relic/agent/transaction/slowest_sample_buffer.rb
|
389
391
|
- lib/new_relic/agent/transaction/synthetics_sample_buffer.rb
|
390
392
|
- lib/new_relic/agent/transaction/trace.rb
|
@@ -757,6 +759,7 @@ files:
|
|
757
759
|
- test/multiverse/suites/agent_only/custom_analytics_events_test.rb
|
758
760
|
- test/multiverse/suites/agent_only/custom_queue_time_test.rb
|
759
761
|
- test/multiverse/suites/agent_only/encoding_handling_test.rb
|
762
|
+
- test/multiverse/suites/agent_only/error_events_test.rb
|
760
763
|
- test/multiverse/suites/agent_only/exclusive_time_test.rb
|
761
764
|
- test/multiverse/suites/agent_only/harvest_timestamps_test.rb
|
762
765
|
- test/multiverse/suites/agent_only/http_response_code_test.rb
|
@@ -853,6 +856,9 @@ files:
|
|
853
856
|
- test/multiverse/suites/net_http/Envfile
|
854
857
|
- test/multiverse/suites/net_http/config/newrelic.yml
|
855
858
|
- test/multiverse/suites/net_http/net_http_test.rb
|
859
|
+
- test/multiverse/suites/no_json/Envfile
|
860
|
+
- test/multiverse/suites/no_json/config/newrelic.yml
|
861
|
+
- test/multiverse/suites/no_json/marshal_config_test.rb
|
856
862
|
- test/multiverse/suites/padrino/Envfile
|
857
863
|
- test/multiverse/suites/padrino/config/newrelic.yml
|
858
864
|
- test/multiverse/suites/padrino/padrino_test.rb
|
@@ -866,6 +872,7 @@ files:
|
|
866
872
|
- test/multiverse/suites/rack/rack_env_mutation_test.rb
|
867
873
|
- test/multiverse/suites/rack/rack_parameter_filtering_test.rb
|
868
874
|
- test/multiverse/suites/rack/rack_unsupported_version_test.rb
|
875
|
+
- test/multiverse/suites/rack/response_content_type_test.rb
|
869
876
|
- test/multiverse/suites/rack/url_map_test.rb
|
870
877
|
- test/multiverse/suites/rails/Envfile
|
871
878
|
- test/multiverse/suites/rails/action_controller_live_rum_test.rb
|
@@ -1005,6 +1012,7 @@ files:
|
|
1005
1012
|
- test/new_relic/agent/deprecator_test.rb
|
1006
1013
|
- test/new_relic/agent/encoding_normalizer_test.rb
|
1007
1014
|
- test/new_relic/agent/error_collector_test.rb
|
1015
|
+
- test/new_relic/agent/error_event_aggregator_test.rb
|
1008
1016
|
- test/new_relic/agent/error_trace_aggregator_test.rb
|
1009
1017
|
- test/new_relic/agent/event_buffer_test_cases.rb
|
1010
1018
|
- test/new_relic/agent/event_listener_test.rb
|
@@ -1043,6 +1051,7 @@ files:
|
|
1043
1051
|
- test/new_relic/agent/new_relic_service_test.rb
|
1044
1052
|
- test/new_relic/agent/obfuscator_test.rb
|
1045
1053
|
- test/new_relic/agent/parameter_filtering_test.rb
|
1054
|
+
- test/new_relic/agent/payload_metric_mapping_test.rb
|
1046
1055
|
- test/new_relic/agent/pipe_channel_manager_test.rb
|
1047
1056
|
- test/new_relic/agent/pipe_service_test.rb
|
1048
1057
|
- test/new_relic/agent/rpm_agent_test.rb
|
@@ -1072,6 +1081,7 @@ files:
|
|
1072
1081
|
- test/new_relic/agent/traced_method_stack_test.rb
|
1073
1082
|
- test/new_relic/agent/transaction/attributes_test.rb
|
1074
1083
|
- test/new_relic/agent/transaction/developer_mode_sample_buffer_test.rb
|
1084
|
+
- test/new_relic/agent/transaction/request_attributes_test.rb
|
1075
1085
|
- test/new_relic/agent/transaction/slowest_sample_buffer_test.rb
|
1076
1086
|
- test/new_relic/agent/transaction/synthetics_sample_buffer_test.rb
|
1077
1087
|
- test/new_relic/agent/transaction/trace_node_test.rb
|
@@ -1165,6 +1175,7 @@ files:
|
|
1165
1175
|
- test/performance/suites/active_record.rb
|
1166
1176
|
- test/performance/suites/agent_attributes.rb
|
1167
1177
|
- test/performance/suites/config.rb
|
1178
|
+
- test/performance/suites/error_collector.rb
|
1168
1179
|
- test/performance/suites/marshalling.rb
|
1169
1180
|
- test/performance/suites/queue_time.rb
|
1170
1181
|
- test/performance/suites/rack_middleware.rb
|
@@ -1,56 +0,0 @@
|
|
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 'new_relic/agent/new_relic_service/marshaller'
|
6
|
-
|
7
|
-
module NewRelic
|
8
|
-
module Agent
|
9
|
-
class NewRelicService
|
10
|
-
# Primitive Ruby Object Notation which complies JSON format data strutures
|
11
|
-
class PrubyMarshaller < Marshaller
|
12
|
-
def initialize
|
13
|
-
::NewRelic::Agent.logger.debug 'Using Pruby marshaller'
|
14
|
-
warn_for_pruby_deprecation
|
15
|
-
end
|
16
|
-
|
17
|
-
def warn_for_pruby_deprecation
|
18
|
-
if RUBY_VERSION < "1.9" && !defined?(::JSON)
|
19
|
-
NewRelic::Agent.logger.warn("Upcoming versions of the Ruby agent running on Ruby 1.8.7 will require the 'json' gem. To avoid interuption in reporting, please update your Gemfile. See http://docs.newrelic.com/docs/ruby/ruby-1.8.7-support for more information.")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def dump(ruby, opts={})
|
24
|
-
NewRelic::LanguageSupport.with_cautious_gc do
|
25
|
-
Marshal.dump(prepare(ruby, opts))
|
26
|
-
end
|
27
|
-
rescue => e
|
28
|
-
::NewRelic::Agent.logger.debug("#{e.class.name} : #{e.message} when marshalling #{ruby.inspect}")
|
29
|
-
raise
|
30
|
-
end
|
31
|
-
|
32
|
-
def load(data)
|
33
|
-
if data.nil? || data.empty?
|
34
|
-
::NewRelic::Agent.logger.error "Empty pruby response from collector: '#{data.inspect}'"
|
35
|
-
return nil
|
36
|
-
end
|
37
|
-
|
38
|
-
NewRelic::LanguageSupport.with_cautious_gc do
|
39
|
-
return_value(Marshal.load(data))
|
40
|
-
end
|
41
|
-
rescue
|
42
|
-
::NewRelic::Agent.logger.debug "Error encountered loading collector response: #{data}"
|
43
|
-
raise
|
44
|
-
end
|
45
|
-
|
46
|
-
def format
|
47
|
-
'pruby'
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.is_supported?
|
51
|
-
true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|