newrelic_rpm 3.5.7.59 → 3.5.8.64.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data.tar.gz.sig +3 -2
  2. data/CHANGELOG +34 -3
  3. data/LICENSE +23 -0
  4. data/lib/new_relic/agent.rb +50 -3
  5. data/lib/new_relic/agent/agent.rb +40 -60
  6. data/lib/new_relic/agent/configuration/defaults.rb +9 -3
  7. data/lib/new_relic/agent/configuration/server_source.rb +4 -0
  8. data/lib/new_relic/agent/cross_app_monitor.rb +230 -0
  9. data/lib/new_relic/agent/cross_app_tracing.rb +274 -0
  10. data/lib/new_relic/agent/database.rb +28 -10
  11. data/lib/new_relic/agent/error_collector.rb +5 -0
  12. data/lib/new_relic/agent/event_listener.rb +4 -0
  13. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +53 -34
  14. data/lib/new_relic/agent/instrumentation/metric_frame.rb +16 -3
  15. data/lib/new_relic/agent/instrumentation/net.rb +13 -11
  16. data/lib/new_relic/agent/instrumentation/resque.rb +10 -10
  17. data/lib/new_relic/agent/instrumentation/sinatra.rb +19 -9
  18. data/lib/new_relic/agent/new_relic_service.rb +63 -9
  19. data/lib/new_relic/agent/pipe_service.rb +8 -12
  20. data/lib/new_relic/agent/rules_engine.rb +72 -0
  21. data/lib/new_relic/agent/shim_agent.rb +0 -1
  22. data/lib/new_relic/agent/sql_sampler.rb +3 -2
  23. data/lib/new_relic/agent/stats.rb +149 -0
  24. data/lib/new_relic/agent/stats_engine.rb +9 -0
  25. data/lib/new_relic/agent/stats_engine/gc_profiler.rb +1 -24
  26. data/lib/new_relic/agent/stats_engine/metric_stats.rb +84 -185
  27. data/lib/new_relic/agent/stats_engine/stats_hash.rb +58 -0
  28. data/lib/new_relic/agent/stats_engine/transactions.rb +10 -2
  29. data/lib/new_relic/agent/transaction_info.rb +31 -6
  30. data/lib/new_relic/agent/transaction_sample_builder.rb +19 -8
  31. data/lib/new_relic/agent/transaction_sampler.rb +17 -10
  32. data/lib/new_relic/helper.rb +32 -0
  33. data/lib/new_relic/local_environment.rb +24 -32
  34. data/lib/new_relic/okjson.rb +599 -0
  35. data/lib/new_relic/transaction_sample.rb +2 -1
  36. data/lib/new_relic/transaction_sample/segment.rb +2 -1
  37. data/lib/new_relic/version.rb +1 -1
  38. data/newrelic.yml +27 -41
  39. data/test/multiverse/suites/agent_only/audit_log_test.rb +2 -4
  40. data/test/multiverse/suites/agent_only/config/newrelic.yml +1 -2
  41. data/test/multiverse/suites/agent_only/{cross_process_test.rb → cross_application_tracing_test.rb} +3 -3
  42. data/test/multiverse/suites/agent_only/key_transactions_test.rb +66 -0
  43. data/test/multiverse/suites/agent_only/marshaling_test.rb +9 -22
  44. data/test/multiverse/suites/agent_only/rename_rule_test.rb +57 -0
  45. data/test/multiverse/suites/agent_only/start_up_test.rb +1 -1
  46. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +17 -6
  47. data/test/multiverse/suites/rails/error_tracing_test.rb +20 -8
  48. data/test/multiverse/suites/resque/instrumentation_test.rb +2 -2
  49. data/test/multiverse/suites/sinatra/Envfile +2 -0
  50. data/test/multiverse/suites/sinatra/config/newrelic.yml +1 -0
  51. data/test/multiverse/suites/sinatra/sinatra_metric_explosion_test.rb +5 -5
  52. data/test/multiverse/suites/sinatra/sinatra_test.rb +75 -4
  53. data/test/new_relic/agent/agent/connect_test.rb +45 -1
  54. data/test/new_relic/agent/agent/start_worker_thread_test.rb +0 -3
  55. data/test/new_relic/agent/agent_test.rb +20 -40
  56. data/test/new_relic/agent/agent_test_controller_test.rb +24 -19
  57. data/test/new_relic/agent/busy_calculator_test.rb +1 -1
  58. data/test/new_relic/agent/configuration/server_source_test.rb +8 -3
  59. data/test/new_relic/agent/cross_app_monitor_test.rb +237 -0
  60. data/test/new_relic/agent/database_test.rb +60 -16
  61. data/test/new_relic/agent/error_collector_test.rb +28 -4
  62. data/test/new_relic/agent/event_listener_test.rb +23 -2
  63. data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +53 -0
  64. data/test/new_relic/agent/instrumentation/metric_frame_test.rb +95 -0
  65. data/test/new_relic/agent/instrumentation/net_instrumentation_test.rb +414 -59
  66. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +2 -5
  67. data/test/new_relic/agent/method_tracer_test.rb +4 -2
  68. data/test/new_relic/agent/new_relic_service_test.rb +108 -6
  69. data/test/new_relic/agent/pipe_channel_manager_test.rb +1 -1
  70. data/test/new_relic/agent/pipe_service_test.rb +9 -9
  71. data/test/new_relic/agent/rpm_agent_test.rb +0 -11
  72. data/test/new_relic/agent/rules_engine_test.rb +82 -0
  73. data/test/new_relic/agent/shim_agent_test.rb +0 -4
  74. data/test/new_relic/agent/sql_sampler_test.rb +7 -0
  75. data/test/new_relic/agent/stats_engine/gc_profiler_test.rb +85 -0
  76. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +110 -23
  77. data/test/new_relic/agent/stats_engine_test.rb +1 -46
  78. data/test/new_relic/agent/stats_hash_test.rb +93 -0
  79. data/test/new_relic/agent/stats_test.rb +197 -0
  80. data/test/new_relic/agent/transaction_info_test.rb +63 -11
  81. data/test/new_relic/agent/transaction_sample_builder_test.rb +10 -3
  82. data/test/new_relic/agent/transaction_sampler_test.rb +92 -80
  83. data/test/new_relic/agent_test.rb +35 -5
  84. data/test/new_relic/control_test.rb +1 -1
  85. data/test/new_relic/fake_collector.rb +87 -9
  86. data/test/new_relic/helper_test.rb +24 -0
  87. data/test/new_relic/metric_data_test.rb +11 -11
  88. data/test/new_relic/metric_spec_test.rb +1 -1
  89. data/test/script/ci.sh +1 -1
  90. data/test/test_contexts.rb +0 -1
  91. data/test/test_helper.rb +21 -3
  92. metadata +32 -16
  93. metadata.gz.sig +0 -0
  94. data/lib/new_relic/agent/cross_process_monitoring.rb +0 -187
  95. data/lib/new_relic/stats.rb +0 -337
  96. data/test/new_relic/agent/cross_process_monitoring_test.rb +0 -190
  97. data/test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb +0 -133
  98. data/test/new_relic/fakes_sending_data.rb +0 -30
  99. data/test/new_relic/stats_test.rb +0 -421
@@ -168,7 +168,7 @@ class NewRelic::ControlTest < Test::Unit::TestCase
168
168
  def test_sql_tracer_disabled_when_tt_disabled_by_server
169
169
  with_config({:'slow_sql.enabled' => true,
170
170
  :'transaction_tracer.enabled' => true,
171
- :monitor_mode => true}, 2) do
171
+ :monitor_mode => true}, :level => 2) do
172
172
  NewRelic::Agent.instance.finish_setup('collect_traces' => false)
173
173
 
174
174
  assert(!NewRelic::Agent::Agent.instance.sql_sampler.enabled?,
@@ -4,7 +4,6 @@ require 'uri'
4
4
  require 'socket'
5
5
  require 'timeout'
6
6
  require 'ostruct'
7
- require File.join(File.dirname(__FILE__), 'fakes_sending_data')
8
7
 
9
8
  require 'json' if RUBY_VERSION >= '1.9'
10
9
 
@@ -12,8 +11,6 @@ module NewRelic
12
11
  class FakeCollector
13
12
  attr_accessor :agent_data, :mock
14
13
 
15
- include FakesSendingData
16
-
17
14
  def initialize
18
15
  @id_counter = 0
19
16
  @base_expectations = {
@@ -53,16 +50,16 @@ module NewRelic
53
50
  end
54
51
  run_id = uri.query =~ /run_id=(\d+)/ ? $1 : nil
55
52
  req.body.rewind
56
-
53
+
57
54
  body = if format == :json
58
55
  body = JSON.load(req.body.read)
59
56
  else
60
57
  body = Marshal.load(req.body.read)
61
58
  end
62
- @agent_data << OpenStruct.new(:action => method,
63
- :body => body,
64
- :run_id => run_id,
65
- :format => format)
59
+ @agent_data << AgentPost.create(:action => method,
60
+ :body => body,
61
+ :run_id => run_id,
62
+ :format => format)
66
63
  end
67
64
  res.finish
68
65
  end
@@ -151,6 +148,87 @@ module NewRelic
151
148
 
152
149
  return true
153
150
  end
151
+
152
+ def calls_for(method)
153
+ @agent_data.select {|d| d.action == method }
154
+ end
155
+
156
+ def reported_stats_for_metric(name, scope=nil)
157
+ calls_for('metric_data').map do |post|
158
+ post.body[3].find do |metric_record|
159
+ metric_record[0]['name'] == name &&
160
+ (!scope || metric_record[0]['scope'] == scope)
161
+ end
162
+ end.compact.map{|m| m[1]}
163
+ end
164
+
165
+ class AgentPost
166
+ attr_accessor :action, :body, :run_id, :format
167
+ def initialize(opts={})
168
+ @action = opts[:action]
169
+ @body = opts[:body]
170
+ @run_id = opts[:run_id]
171
+ @format = opts[:format]
172
+ end
173
+
174
+ def self.create(opts={})
175
+ case opts[:action]
176
+ when 'connect'
177
+ ConnectPost.new(opts)
178
+ when 'metric_data'
179
+ AgentPost.new(opts)
180
+ when 'profile_data'
181
+ ProfileDataPost.new(opts)
182
+ when 'sql_trace_data'
183
+ SqlTraceDataPost.new(opts)
184
+ when 'transaction_sample_data'
185
+ TransactionSampleDataPost.new(opts)
186
+ else
187
+ new(opts)
188
+ end
189
+ end
190
+
191
+ def [](key)
192
+ @body[key]
193
+ end
194
+
195
+ def unblob(blob)
196
+ return unless blob
197
+ JSON.load(Zlib::Inflate.inflate(Base64.decode64(blob)))
198
+ end
199
+ end
200
+
201
+ class ConnectPost < AgentPost
202
+ def initialize(opts={})
203
+ super
204
+ @body = @body[0]
205
+ end
206
+ end
207
+
208
+ class ProfileDataPost < AgentPost
209
+ def initialize(opts={})
210
+ super
211
+ @body[1][0][4] = unblob(@body[1][0][4]) if @format == :json
212
+ end
213
+ end
214
+
215
+ class SqlTraceDataPost < AgentPost
216
+ def initialize(opts={})
217
+ super
218
+ @body[0][0][9] = unblob(@body[0][0][9]) if @format == :json
219
+ end
220
+ end
221
+
222
+ class TransactionSampleDataPost < AgentPost
223
+ def initialize(opts={})
224
+ super
225
+ @body[4] = unblob(@body[4]) if @format == :json
226
+ end
227
+
228
+ def metric_name
229
+ @body[1][0][2]
230
+ end
231
+ end
154
232
  end
155
233
 
156
234
  # might we need this? I'll just leave it here for now
@@ -290,7 +368,7 @@ if $0 == __FILE__
290
368
  end
291
369
 
292
370
  def invoke(method, post={}, code=200)
293
- uri = URI.parse("http://127.0.0.1:#{determine_port}/agent_listener/8/12345/#{method}")
371
+ uri = URI.parse("http://127.0.0.1:#{@collector.determine_port}/agent_listener/8/12345/#{method}")
294
372
  request = Net::HTTP::Post.new("#{uri.path}?#{uri.query}")
295
373
  if uri.query && uri.query.include?('marshal_format=json')
296
374
  request.body = JSON.dump(post)
@@ -0,0 +1,24 @@
1
+ #encoding: utf-8
2
+
3
+ #require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
4
+ require 'test/unit'
5
+ require 'newrelic_rpm'
6
+
7
+ class HelperTest < Test::Unit::TestCase
8
+
9
+ def test_json_serializer_method
10
+ obj = [
11
+ 99, 'luftballons',
12
+ {
13
+ 'Hast du etwas' => 'Zeit für mich',
14
+ 'Dann singe ich' => {
15
+ 'ein lied' => 'für dich'
16
+ }
17
+ }
18
+ ]
19
+ copy = NewRelic.json_load( NewRelic.json_dump(obj) )
20
+
21
+ assert( obj == copy )
22
+ end
23
+
24
+ end
@@ -101,29 +101,29 @@ class NewRelic::MetricDataTest < Test::Unit::TestCase
101
101
  end
102
102
 
103
103
  def test_to_json_no_metric_id
104
- md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::MethodTraceStats.new, nil)
104
+ md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new, nil)
105
105
  json = md.to_json
106
106
  assert(json.include?('"Custom/test/method"'), "should include the metric spec in the json")
107
107
  assert(json.include?('"metric_id":null}'), "should have a null metric_id")
108
108
  end
109
109
 
110
110
  def test_to_json_with_metric_id
111
- md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::MethodTraceStats.new, 12345)
111
+ md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new, 12345)
112
112
  assert_equal('{"metric_spec":null,"stats":{"total_exclusive_time":0.0,"min_call_time":0.0,"call_count":0,"sum_of_squares":0.0,"total_call_time":0.0,"max_call_time":0.0},"metric_id":12345}', md.to_json, "should not include the metric spec and should have a metric_id")
113
113
  end
114
114
 
115
115
  def test_to_s_with_metric_spec
116
- md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::MethodTraceStats.new, 12345)
117
- assert_equal('Custom/test/method(): [01/01/70 12:00AM UTC, 0.000s; 0 calls 0s]', md.to_s, "should not include the metric id and should include the metric spec")
116
+ md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', ''), NewRelic::Agent::Stats.new, 12345)
117
+ assert_equal('Custom/test/method(): [ 0 calls 0.0000s]', md.to_s, "should not include the metric id and should include the metric spec")
118
118
  end
119
119
 
120
120
  def test_to_s_without_metric_spec
121
- md = NewRelic::MetricData.new(nil, NewRelic::MethodTraceStats.new, 12345)
122
- assert_equal('12345: [01/01/70 12:00AM UTC, 0.000s; 0 calls 0s]', md.to_s, "should include the metric id and not have a metric spec")
121
+ md = NewRelic::MetricData.new(nil, NewRelic::Agent::Stats.new, 12345)
122
+ assert_equal('12345: [ 0 calls 0.0000s]', md.to_s, "should include the metric id and not have a metric spec")
123
123
  end
124
124
 
125
125
  def test_to_collector_array_with_spec
126
- stats = NewRelic::MethodTraceStats.new
126
+ stats = NewRelic::Agent::Stats.new
127
127
  stats.record_data_point(1.0)
128
128
  stats.record_data_point(2.0, 1.0)
129
129
  md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', 'scope'),
@@ -134,7 +134,7 @@ class NewRelic::MetricDataTest < Test::Unit::TestCase
134
134
  end
135
135
 
136
136
  def test_to_collector_array_with_spec_and_id
137
- stats = NewRelic::MethodTraceStats.new
137
+ stats = NewRelic::Agent::Stats.new
138
138
  stats.record_data_point(1.0)
139
139
  stats.record_data_point(2.0, 1.0)
140
140
  md = NewRelic::MetricData.new(NewRelic::MetricSpec.new('Custom/test/method', 'scope'),
@@ -144,7 +144,7 @@ class NewRelic::MetricDataTest < Test::Unit::TestCase
144
144
  end
145
145
 
146
146
  def test_to_collector_array_with_id
147
- stats = NewRelic::MethodTraceStats.new
147
+ stats = NewRelic::Agent::Stats.new
148
148
  stats.record_data_point(1.0)
149
149
  stats.record_data_point(2.0, 1.0)
150
150
  md = NewRelic::MetricData.new(nil, stats, 1234)
@@ -154,7 +154,7 @@ class NewRelic::MetricDataTest < Test::Unit::TestCase
154
154
 
155
155
  # Rationals in metric data? -- https://support.newrelic.com/tickets/28053
156
156
  def test_to_collector_array_with_rationals
157
- stats = NewRelic::MethodTraceStats.new
157
+ stats = NewRelic::Agent::Stats.new
158
158
  stats.call_count = Rational(1, 1)
159
159
  stats.total_call_time = Rational(2, 1)
160
160
  stats.total_exclusive_time = Rational(3, 1)
@@ -168,7 +168,7 @@ class NewRelic::MetricDataTest < Test::Unit::TestCase
168
168
  end
169
169
 
170
170
  def test_to_collector_array_with_bad_values
171
- stats = NewRelic::MethodTraceStats.new
171
+ stats = NewRelic::Agent::Stats.new
172
172
  stats.call_count = nil
173
173
  stats.total_call_time = "junk"
174
174
  stats.total_exclusive_time = Object.new
@@ -46,7 +46,7 @@ class NewRelic::MetricSpecTest < Test::Unit::TestCase
46
46
 
47
47
  compare_spec(spec, import)
48
48
 
49
- stats = NewRelic::MethodTraceStats.new
49
+ stats = NewRelic::Agent::Stats.new
50
50
 
51
51
  import = ::ActiveSupport::JSON.decode(stats.to_json)
52
52
 
@@ -29,7 +29,7 @@ set -e
29
29
  if [ "x$RUBY" == "x" ]; then
30
30
  echo '$RUBY is undefined'
31
31
  echo 'defaulting to 1.9.3'
32
- export RUBY=1.9.3-p286
32
+ export RUBY=1.9.3-p374
33
33
  fi
34
34
  if [ "x$BRANCH" == "x" ]; then
35
35
  echo '$BRANCH is undefined'
@@ -10,7 +10,6 @@ module TestContexts
10
10
  NewRelic::Agent::Agent.instance.service = default_service
11
11
  NewRelic::Agent.manual_start :log => @log
12
12
  @agent = NewRelic::Agent.instance
13
- @agent.metric_ids.clear
14
13
  @agent.transaction_sampler.send :clear_builder
15
14
  @agent.transaction_sampler.reset!
16
15
  @agent.stats_engine.clear_stats
@@ -140,15 +140,33 @@ def assert_calls_unscoped_metrics(*metrics)
140
140
  assert_not_equal first_metrics, last_metrics, "should have changed these metrics"
141
141
  end
142
142
 
143
+ unless defined?( assert_includes )
144
+ def assert_includes( collection, member, msg=nil )
145
+ msg = build_message( msg, "Expected ? to include ?", collection, member )
146
+ assert_block( msg ) { collection.include?(member) }
147
+ end
148
+ end
149
+
150
+ unless defined?( assert_not_includes )
151
+ def assert_not_includes( collection, member, msg=nil )
152
+ msg = build_message( msg, "Expected ? not to include ?", collection, member )
153
+ assert_block( msg ) { !collection.include?(member) }
154
+ end
155
+ end
143
156
 
144
157
  def compare_metrics(expected, actual)
145
158
  actual.delete_if {|a| a.include?('GC/cumulative') } # in case we are in REE
146
159
  assert_equal(expected.to_a.sort, actual.to_a.sort, "extra: #{(actual - expected).to_a.inspect}; missing: #{(expected - actual).to_a.inspect}")
147
160
  end
148
161
 
149
- def with_config(config_hash, level=0)
150
- config = NewRelic::Agent::Configuration::DottedHash.new(config_hash)
151
- NewRelic::Agent.config.apply_config(config, level)
162
+ def with_config(config_hash, opts={})
163
+ opts = { :level => 0, :do_not_cast => false }.merge(opts)
164
+ if opts[:do_not_cast]
165
+ config = config_hash
166
+ else
167
+ config = NewRelic::Agent::Configuration::DottedHash.new(config_hash)
168
+ end
169
+ NewRelic::Agent.config.apply_config(config, opts[:level])
152
170
  begin
153
171
  yield
154
172
  ensure
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newrelic_rpm
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.7.59
5
- prerelease:
4
+ version: 3.5.8.64.beta
5
+ prerelease: 9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Clark
@@ -41,7 +41,7 @@ cert_chain:
41
41
  cHUySWFQWE92bTNUOEc0TzZxWnZobkxoL1VpZW4rK0RqOGVGQmVjVFBvTThw
42
42
  VmpLM3BoNQpuL0V3dVpDY0U2Z2h0Q0NNCi0tLS0tRU5EIENFUlRJRklDQVRF
43
43
  LS0tLS0K
44
- date: 2013-02-19 00:00:00.000000000 Z
44
+ date: 2013-02-26 00:00:00.000000000 Z
45
45
  dependencies: []
46
46
  description: ! 'New Relic is a performance management system, developed by New Relic,
47
47
 
@@ -106,7 +106,8 @@ files:
106
106
  - lib/new_relic/agent/configuration/mask_defaults.rb
107
107
  - lib/new_relic/agent/configuration/server_source.rb
108
108
  - lib/new_relic/agent/configuration/yaml_source.rb
109
- - lib/new_relic/agent/cross_process_monitoring.rb
109
+ - lib/new_relic/agent/cross_app_monitor.rb
110
+ - lib/new_relic/agent/cross_app_tracing.rb
110
111
  - lib/new_relic/agent/database.rb
111
112
  - lib/new_relic/agent/error_collector.rb
112
113
  - lib/new_relic/agent/event_listener.rb
@@ -141,6 +142,7 @@ files:
141
142
  - lib/new_relic/agent/new_relic_service.rb
142
143
  - lib/new_relic/agent/pipe_channel_manager.rb
143
144
  - lib/new_relic/agent/pipe_service.rb
145
+ - lib/new_relic/agent/rules_engine.rb
144
146
  - lib/new_relic/agent/sampler.rb
145
147
  - lib/new_relic/agent/samplers/cpu_sampler.rb
146
148
  - lib/new_relic/agent/samplers/delayed_job_sampler.rb
@@ -148,10 +150,12 @@ files:
148
150
  - lib/new_relic/agent/samplers/object_sampler.rb
149
151
  - lib/new_relic/agent/shim_agent.rb
150
152
  - lib/new_relic/agent/sql_sampler.rb
153
+ - lib/new_relic/agent/stats.rb
151
154
  - lib/new_relic/agent/stats_engine.rb
152
155
  - lib/new_relic/agent/stats_engine/gc_profiler.rb
153
156
  - lib/new_relic/agent/stats_engine/metric_stats.rb
154
157
  - lib/new_relic/agent/stats_engine/samplers.rb
158
+ - lib/new_relic/agent/stats_engine/stats_hash.rb
155
159
  - lib/new_relic/agent/stats_engine/transactions.rb
156
160
  - lib/new_relic/agent/thread.rb
157
161
  - lib/new_relic/agent/thread_profiler.rb
@@ -188,13 +192,13 @@ files:
188
192
  - lib/new_relic/metric_spec.rb
189
193
  - lib/new_relic/metrics.rb
190
194
  - lib/new_relic/noticed_error.rb
195
+ - lib/new_relic/okjson.rb
191
196
  - lib/new_relic/rack.rb
192
197
  - lib/new_relic/rack/agent_hooks.rb
193
198
  - lib/new_relic/rack/browser_monitoring.rb
194
199
  - lib/new_relic/rack/developer_mode.rb
195
200
  - lib/new_relic/rack/error_collector.rb
196
201
  - lib/new_relic/recipes.rb
197
- - lib/new_relic/stats.rb
198
202
  - lib/new_relic/timer_lib.rb
199
203
  - lib/new_relic/transaction_analysis.rb
200
204
  - lib/new_relic/transaction_analysis/segment_summary.rb
@@ -234,13 +238,15 @@ files:
234
238
  - test/multiverse/suites/agent_only/Envfile
235
239
  - test/multiverse/suites/agent_only/audit_log_test.rb
236
240
  - test/multiverse/suites/agent_only/config/newrelic.yml
237
- - test/multiverse/suites/agent_only/cross_process_test.rb
241
+ - test/multiverse/suites/agent_only/cross_application_tracing_test.rb
238
242
  - test/multiverse/suites/agent_only/http_response_code_test.rb
243
+ - test/multiverse/suites/agent_only/key_transactions_test.rb
239
244
  - test/multiverse/suites/agent_only/logging_test.rb
240
245
  - test/multiverse/suites/agent_only/marshaling_test.rb
241
246
  - test/multiverse/suites/agent_only/method_visibility_test.rb
242
247
  - test/multiverse/suites/agent_only/no_dns_resolv.rb
243
248
  - test/multiverse/suites/agent_only/pipe_manager_test.rb
249
+ - test/multiverse/suites/agent_only/rename_rule_test.rb
244
250
  - test/multiverse/suites/agent_only/rum_instrumentation_test.rb
245
251
  - test/multiverse/suites/agent_only/service_timeout_test.rb
246
252
  - test/multiverse/suites/agent_only/ssl_test.rb
@@ -308,7 +314,7 @@ files:
308
314
  - test/new_relic/agent/configuration/manager_test.rb
309
315
  - test/new_relic/agent/configuration/server_source_test.rb
310
316
  - test/new_relic/agent/configuration/yaml_source_test.rb
311
- - test/new_relic/agent/cross_process_monitoring_test.rb
317
+ - test/new_relic/agent/cross_app_monitor_test.rb
312
318
  - test/new_relic/agent/database_test.rb
313
319
  - test/new_relic/agent/error_collector/notice_error_test.rb
314
320
  - test/new_relic/agent/error_collector_test.rb
@@ -333,13 +339,16 @@ files:
333
339
  - test/new_relic/agent/pipe_channel_manager_test.rb
334
340
  - test/new_relic/agent/pipe_service_test.rb
335
341
  - test/new_relic/agent/rpm_agent_test.rb
342
+ - test/new_relic/agent/rules_engine_test.rb
336
343
  - test/new_relic/agent/sampler_test.rb
337
344
  - test/new_relic/agent/shim_agent_test.rb
338
345
  - test/new_relic/agent/sql_sampler_test.rb
339
- - test/new_relic/agent/stats_engine/metric_stats/harvest_test.rb
346
+ - test/new_relic/agent/stats_engine/gc_profiler_test.rb
340
347
  - test/new_relic/agent/stats_engine/metric_stats_test.rb
341
348
  - test/new_relic/agent/stats_engine/samplers_test.rb
342
349
  - test/new_relic/agent/stats_engine_test.rb
350
+ - test/new_relic/agent/stats_hash_test.rb
351
+ - test/new_relic/agent/stats_test.rb
343
352
  - test/new_relic/agent/thread_profiler_test.rb
344
353
  - test/new_relic/agent/thread_test.rb
345
354
  - test/new_relic/agent/threaded_test.rb
@@ -357,8 +366,8 @@ files:
357
366
  - test/new_relic/delayed_job_injection_test.rb
358
367
  - test/new_relic/dispatcher_test.rb
359
368
  - test/new_relic/fake_collector.rb
360
- - test/new_relic/fakes_sending_data.rb
361
369
  - test/new_relic/framework_test.rb
370
+ - test/new_relic/helper_test.rb
362
371
  - test/new_relic/load_test.rb
363
372
  - test/new_relic/local_environment_test.rb
364
373
  - test/new_relic/metric_data_test.rb
@@ -371,7 +380,6 @@ files:
371
380
  - test/new_relic/rack/developer_mode_helper_test.rb
372
381
  - test/new_relic/rack/developer_mode_test.rb
373
382
  - test/new_relic/rack/error_collector_test.rb
374
- - test/new_relic/stats_test.rb
375
383
  - test/new_relic/transaction_analysis/segment_summary_test.rb
376
384
  - test/new_relic/transaction_analysis_test.rb
377
385
  - test/new_relic/transaction_sample/composite_segment_test.rb
@@ -470,12 +478,20 @@ files:
470
478
  - lib/new_relic/build.rb
471
479
  homepage: http://www.github.com/newrelic/rpm
472
480
  licenses: []
473
- post_install_message: ! "\n# New Relic Ruby Agent Release Notes #\n\n## v3.5.7 ##\n\n
474
- \ * Resolved some issues with tracking of frontend queue time, particularly\n when
475
- the agent is running on an app hosted on Heroku. The agent will now\n more reliably
476
- parse the headers described in\n https://newrelic.com/docs/features/tracking-front-end-time
477
- and will\n automatically detect whether the times provided are in seconds,\n
478
- \ milliseconds or microseconds.\n\nSee https://github.com/newrelic/rpm/blob/master/CHANGELOG
481
+ post_install_message: ! "\n# New Relic Ruby Agent Release Notes #\n\n## v3.5.8 ##\n\n
482
+ \ * Key Transactions\n\n The Ruby agent now supports Key Transactions! Check
483
+ out more details on the\n feature at https://newrelic.com/docs/site/key-transactions\n\n
484
+ \ * Ruby 2.0\n\n The Ruby agent is compatible with Ruby 2.0.0 which was just
485
+ released.\n\n * Improved Sinatra instrumentation\n\n Several cases around the
486
+ use of conditions and pass in Sinatra are now\n better supported by the Ruby
487
+ agent. Thanks Konstantin for the help!\n\n * Outbound HTTP headers\n\n Adds
488
+ a 'X-NewRelic-ID' header to outbound Net::HTTP requests. This change\n helps
489
+ improve the correlation of performance between services in a service-\n oriented
490
+ architecture for a forthcoming feature. In the meantime, to disable\n the header,
491
+ set this in your newrelic.yml:\n\n cross_application_tracer:\n enabled:
492
+ false\n\n * Automatically detect Resque dispatcher\n\n The agent does better
493
+ auto-detection for the Resque worker process.\n This should reduce the need to
494
+ set NEW_RELIC_DISPATCHER=resque directly.\n\nSee https://github.com/newrelic/rpm/blob/master/CHANGELOG
479
495
  for a full list of\nchanges.\n"
480
496
  rdoc_options:
481
497
  - --line-numbers