newrelic_rpm 3.6.2.96 → 3.6.3.103.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/CHANGELOG +33 -1
- data/README.md +7 -7
- data/lib/new_relic/agent/agent.rb +51 -22
- data/lib/new_relic/agent/agent_logger.rb +22 -11
- data/lib/new_relic/agent/configuration/defaults.rb +6 -1
- data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +1 -6
- data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +1 -1
- data/lib/new_relic/agent/instrumentation/active_record.rb +8 -48
- data/lib/new_relic/agent/instrumentation/active_record_helper.rb +9 -1
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +4 -3
- data/lib/new_relic/agent/instrumentation/data_mapper.rb +4 -4
- data/lib/new_relic/agent/instrumentation/metric_frame.rb +10 -8
- data/lib/new_relic/agent/instrumentation/padrino.rb +32 -0
- data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +52 -0
- data/lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb +56 -0
- data/lib/new_relic/agent/instrumentation/sinatra.rb +113 -48
- data/lib/new_relic/agent/new_relic_service.rb +6 -0
- data/lib/new_relic/agent/pipe_channel_manager.rb +13 -8
- data/lib/new_relic/agent/request_sampler.rb +205 -0
- data/lib/new_relic/agent/sampler.rb +0 -1
- data/lib/new_relic/agent/stats_engine/samplers.rb +0 -1
- data/lib/new_relic/agent/stats_engine/transactions.rb +12 -16
- data/lib/new_relic/agent/transaction.rb +27 -4
- data/lib/new_relic/agent/transaction_sample_builder.rb +47 -6
- data/lib/new_relic/agent/transaction_sampler.rb +0 -5
- data/lib/new_relic/agent.rb +17 -0
- data/lib/new_relic/build.rb +2 -2
- data/lib/new_relic/coerce.rb +3 -1
- data/lib/new_relic/rack/agent_hooks.rb +17 -3
- data/lib/new_relic/rack/browser_monitoring.rb +8 -3
- data/lib/new_relic/rack/error_collector.rb +2 -0
- data/lib/new_relic/transaction_sample/segment.rb +0 -23
- data/lib/new_relic/transaction_sample.rb +0 -9
- data/lib/new_relic/version.rb +1 -1
- data/test/agent_helper.rb +204 -0
- data/test/config/newrelic.yml +0 -1
- data/test/config/test_control.rb +3 -1
- data/test/multiverse/suites/agent_only/key_transactions_test.rb +8 -5
- data/test/multiverse/suites/agent_only/logging_test.rb +1 -1
- data/test/multiverse/suites/agent_only/thread_profiling_test.rb +7 -8
- data/test/multiverse/suites/datamapper/Envfile +7 -0
- data/test/multiverse/suites/datamapper/datamapper_test.rb +105 -0
- data/test/multiverse/suites/padrino/Envfile +16 -0
- data/test/multiverse/suites/padrino/config/newrelic.yml +24 -0
- data/test/multiverse/suites/padrino/padrino_test.rb +54 -0
- data/test/multiverse/suites/rails/Envfile +5 -5
- data/test/multiverse/suites/rails/app.rb +1 -0
- data/test/multiverse/suites/rails/request_statistics_test.rb +118 -0
- data/test/multiverse/suites/sinatra/Envfile +8 -2
- data/test/multiverse/suites/sinatra/ignoring_test.rb +185 -0
- data/test/multiverse/suites/sinatra/sinatra_classic_test.rb +92 -0
- data/test/multiverse/suites/sinatra/sinatra_metric_explosion_test.rb +0 -3
- data/test/multiverse/suites/sinatra/sinatra_modular_test.rb +89 -0
- data/test/multiverse/suites/sinatra/sinatra_test_cases.rb +120 -0
- data/test/new_relic/agent/agent_logger_test.rb +149 -56
- data/test/new_relic/agent/agent_test.rb +23 -0
- data/test/new_relic/agent/agent_test_controller_test.rb +8 -1
- data/test/new_relic/agent/autostart_test.rb +10 -6
- data/test/new_relic/agent/instrumentation/action_controller_subscriber_test.rb +36 -31
- data/test/new_relic/agent/instrumentation/action_view_subscriber_test.rb +7 -0
- data/test/new_relic/agent/instrumentation/active_record_helper_test.rb +20 -4
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +20 -9
- data/test/new_relic/agent/instrumentation/active_record_subscriber_test.rb +23 -19
- data/test/new_relic/agent/instrumentation/sequel_test.rb +118 -79
- data/test/new_relic/agent/instrumentation/sinatra/transaction_namer_test.rb +55 -0
- data/test/new_relic/agent/instrumentation/sinatra_test.rb +60 -11
- data/test/new_relic/agent/method_tracer_test.rb +7 -4
- data/test/new_relic/agent/new_relic_service_test.rb +6 -0
- data/test/new_relic/agent/pipe_channel_manager_test.rb +6 -2
- data/test/new_relic/agent/request_sampler_test.rb +159 -0
- data/test/new_relic/agent/stats_engine/samplers_test.rb +1 -5
- data/test/new_relic/agent/stats_engine_test.rb +14 -0
- data/test/new_relic/agent/transaction_sample_builder_test.rb +43 -6
- data/test/new_relic/agent/transaction_sampler_test.rb +31 -1
- data/test/new_relic/agent/transaction_test.rb +29 -0
- data/test/new_relic/agent_test.rb +7 -0
- data/test/new_relic/coerce_test.rb +13 -0
- data/test/new_relic/fake_collector.rb +31 -1
- data/test/new_relic/metric_spec_test.rb +14 -10
- data/test/new_relic/rack/agent_hooks_test.rb +9 -2
- data/test/new_relic/rack/browser_monitoring_test.rb +16 -7
- data/test/new_relic/rack/developer_mode_test.rb +7 -0
- data/test/new_relic/rack/error_collector_test.rb +10 -6
- data/test/new_relic/transaction_sample/segment_test.rb +0 -61
- data/test/new_relic/transaction_sample_subtest_test.rb +0 -19
- data/test/script/ci.sh +14 -0
- data/test/test_helper.rb +79 -203
- data.tar.gz.sig +0 -0
- metadata +50 -18
- metadata.gz.sig +0 -0
- data/test/multiverse/suites/datamapper/encoding_test.rb +0 -40
- data/test/multiverse/suites/sinatra/sinatra_test.rb +0 -143
data/test/test_helper.rb
CHANGED
@@ -14,44 +14,48 @@ $LOAD_PATH.uniq!
|
|
14
14
|
|
15
15
|
require 'rubygems'
|
16
16
|
require 'rake'
|
17
|
+
|
17
18
|
# We can speed things up in tests that don't need to load rails.
|
18
19
|
# You can also run the tests in a mode without rails. Many tests
|
19
20
|
# will be skipped.
|
20
|
-
|
21
|
-
|
22
|
-
require '
|
23
|
-
|
24
|
-
|
25
|
-
# we need 'rails/test_help' for Rails 4
|
26
|
-
# we need 'test_help' for Rails 2
|
27
|
-
# we need neither for Rails 3
|
21
|
+
if ENV["NO_RAILS"]
|
22
|
+
puts "Running tests in standalone mode without Rails."
|
23
|
+
require 'newrelic_rpm'
|
24
|
+
else
|
28
25
|
begin
|
29
|
-
require '
|
30
|
-
|
26
|
+
require 'config/environment'
|
27
|
+
# require File.join(File.dirname(__FILE__),'..','..','rpm_test_app','config','environment')
|
28
|
+
|
29
|
+
# we need 'rails/test_help' for Rails 4
|
30
|
+
# we need 'test_help' for Rails 2
|
31
|
+
# we need neither for Rails 3
|
31
32
|
begin
|
32
|
-
require 'test_help'
|
33
|
+
require 'rails/test_help'
|
33
34
|
rescue LoadError
|
34
|
-
|
35
|
+
begin
|
36
|
+
require 'test_help'
|
37
|
+
rescue LoadError
|
38
|
+
# ignore load problems on test help - it doesn't exist in rails 3
|
39
|
+
end
|
35
40
|
end
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
41
|
+
require 'newrelic_rpm'
|
42
|
+
rescue LoadError => e
|
43
|
+
puts "Running tests in standalone mode."
|
44
|
+
require 'bundler'
|
45
|
+
Bundler.require
|
46
|
+
require 'rails/all'
|
47
|
+
require 'newrelic_rpm'
|
48
|
+
|
49
|
+
# Bootstrap a basic rails environment for the agent to run in.
|
50
|
+
class MyApp < Rails::Application
|
51
|
+
config.active_support.deprecation = :log
|
52
|
+
config.secret_token = "49837489qkuweoiuoqwehisuakshdjksadhaisdy78o34y138974xyqp9rmye8yrpiokeuioqwzyoiuxftoyqiuxrhm3iou1hrzmjk"
|
53
|
+
config.after_initialize do
|
54
|
+
NewRelic::Agent.manual_start
|
55
|
+
end
|
51
56
|
end
|
57
|
+
MyApp.initialize!
|
52
58
|
end
|
53
|
-
MyApp.initialize!
|
54
|
-
|
55
59
|
end
|
56
60
|
|
57
61
|
require 'test/unit'
|
@@ -67,6 +71,8 @@ begin # 1.8.6
|
|
67
71
|
rescue LoadError
|
68
72
|
end
|
69
73
|
|
74
|
+
require 'agent_helper'
|
75
|
+
|
70
76
|
def default_service(stubbed_method_overrides = {})
|
71
77
|
service = stub
|
72
78
|
stubbed_method_defaults = {
|
@@ -102,153 +108,6 @@ class Test::Unit::TestCase
|
|
102
108
|
end
|
103
109
|
end
|
104
110
|
|
105
|
-
def assert_between(floor, ceiling, value, message="expected #{floor} <= #{value} <= #{ceiling}")
|
106
|
-
assert((floor <= value && value <= ceiling), message)
|
107
|
-
end
|
108
|
-
|
109
|
-
def assert_in_delta(expected, actual, delta)
|
110
|
-
assert_between((expected - delta), (expected + delta), actual)
|
111
|
-
end
|
112
|
-
|
113
|
-
def check_metric_time(metric, value, delta)
|
114
|
-
time = NewRelic::Agent.get_stats(metric).total_call_time
|
115
|
-
assert_in_delta(value, time, delta)
|
116
|
-
end
|
117
|
-
|
118
|
-
def check_metric_count(metric, value)
|
119
|
-
count = NewRelic::Agent.get_stats(metric).call_count
|
120
|
-
assert_equal(value, count, "should have the correct number of calls")
|
121
|
-
end
|
122
|
-
|
123
|
-
def check_unscoped_metric_count(metric, value)
|
124
|
-
count = NewRelic::Agent.get_stats_unscoped(metric).call_count
|
125
|
-
assert_equal(value, count, "should have the correct number of calls")
|
126
|
-
end
|
127
|
-
|
128
|
-
def generate_unscoped_metric_counts(*metrics)
|
129
|
-
metrics.inject({}) do |sum, metric|
|
130
|
-
sum[metric] = NewRelic::Agent.get_stats_no_scope(metric).call_count
|
131
|
-
sum
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def generate_metric_counts(*metrics)
|
136
|
-
metrics.inject({}) do |sum, metric|
|
137
|
-
sum[metric] = NewRelic::Agent.get_stats(metric).call_count
|
138
|
-
sum
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
def assert_does_not_call_metrics(*metrics)
|
143
|
-
first_metrics = generate_metric_counts(*metrics)
|
144
|
-
yield
|
145
|
-
last_metrics = generate_metric_counts(*metrics)
|
146
|
-
assert_equal first_metrics, last_metrics, "should not have changed these metrics"
|
147
|
-
end
|
148
|
-
|
149
|
-
def assert_calls_metrics(*metrics)
|
150
|
-
first_metrics = generate_metric_counts(*metrics)
|
151
|
-
yield
|
152
|
-
last_metrics = generate_metric_counts(*metrics)
|
153
|
-
assert_not_equal first_metrics, last_metrics, "should have changed these metrics"
|
154
|
-
end
|
155
|
-
|
156
|
-
def assert_calls_unscoped_metrics(*metrics)
|
157
|
-
first_metrics = generate_unscoped_metric_counts(*metrics)
|
158
|
-
yield
|
159
|
-
last_metrics = generate_unscoped_metric_counts(*metrics)
|
160
|
-
assert_not_equal first_metrics, last_metrics, "should have changed these metrics"
|
161
|
-
end
|
162
|
-
|
163
|
-
unless defined?( assert_includes )
|
164
|
-
def assert_includes( collection, member, msg=nil )
|
165
|
-
msg = build_message( msg, "Expected ? to include ?", collection, member )
|
166
|
-
assert_block( msg ) { collection.include?(member) }
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
unless defined?( assert_not_includes )
|
171
|
-
def assert_not_includes( collection, member, msg=nil )
|
172
|
-
msg = build_message( msg, "Expected ? not to include ?", collection, member )
|
173
|
-
assert_block( msg ) { !collection.include?(member) }
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
def compare_metrics(expected, actual)
|
178
|
-
actual.delete_if {|a| a.include?('GC/cumulative') } # in case we are in REE
|
179
|
-
assert_equal(expected.to_a.sort, actual.to_a.sort, "extra: #{(actual - expected).to_a.inspect}; missing: #{(expected - actual).to_a.inspect}")
|
180
|
-
end
|
181
|
-
|
182
|
-
def metric_spec_from_specish(specish)
|
183
|
-
spec = case specish
|
184
|
-
when String then NewRelic::MetricSpec.new(specish)
|
185
|
-
when Array then NewRelic::MetricSpec.new(*specish)
|
186
|
-
end
|
187
|
-
spec
|
188
|
-
end
|
189
|
-
|
190
|
-
def _normalize_metric_expectations(expectations)
|
191
|
-
case expectations
|
192
|
-
when Array
|
193
|
-
hash = {}
|
194
|
-
expectations.each { |k| hash[k] = { :call_count => 1 } }
|
195
|
-
hash
|
196
|
-
else
|
197
|
-
expectations
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def assert_metrics_recorded(expected)
|
202
|
-
expected = _normalize_metric_expectations(expected)
|
203
|
-
expected.each do |specish, expected_attrs|
|
204
|
-
expected_spec = metric_spec_from_specish(specish)
|
205
|
-
actual_stats = NewRelic::Agent.instance.stats_engine.lookup_stats(*Array(specish))
|
206
|
-
if !actual_stats
|
207
|
-
all_specs = NewRelic::Agent.instance.stats_engine.metric_specs
|
208
|
-
matches = all_specs.select { |spec| spec.name == expected_spec.name }
|
209
|
-
matches.map! { |m| " #{m.inspect}" }
|
210
|
-
msg = "Did not find stats for spec #{expected_spec.inspect}."
|
211
|
-
msg += "\nDid find specs: [\n#{matches.join(",\n")}\n]" unless matches.empty?
|
212
|
-
assert(actual_stats, msg)
|
213
|
-
end
|
214
|
-
expected_attrs.each do |attr, expected_value|
|
215
|
-
actual_value = actual_stats.send(attr)
|
216
|
-
if attr == :call_count
|
217
|
-
assert_equal(expected_value, actual_value,
|
218
|
-
"Expected #{attr} for #{expected_spec} to be #{expected_value}, got #{actual_value}")
|
219
|
-
else
|
220
|
-
assert_in_delta(expected_value, actual_value, 0.0001,
|
221
|
-
"Expected #{attr} for #{expected_spec} to be ~#{expected_value}, got #{actual_value}")
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
def assert_metrics_recorded_exclusive(expected, options={})
|
228
|
-
expected = _normalize_metric_expectations(expected)
|
229
|
-
assert_metrics_recorded(expected)
|
230
|
-
recorded_metrics = NewRelic::Agent.instance.stats_engine.metrics
|
231
|
-
if options[:filter]
|
232
|
-
recorded_metrics = recorded_metrics.select { |m| m.match(options[:filter]) }
|
233
|
-
end
|
234
|
-
expected_metrics = expected.keys.map { |s| metric_spec_from_specish(s).to_s }
|
235
|
-
unexpected_metrics = recorded_metrics.select{|m| m !~ /GC\/cumulative/}
|
236
|
-
unexpected_metrics -= expected_metrics
|
237
|
-
assert_equal(0, unexpected_metrics.size, "Found unexpected metrics: [#{unexpected_metrics.join(', ')}]")
|
238
|
-
end
|
239
|
-
|
240
|
-
def assert_metrics_not_recorded(not_expected)
|
241
|
-
not_expected = _normalize_metric_expectations(not_expected)
|
242
|
-
found_but_not_expected = []
|
243
|
-
not_expected.each do |specish, _|
|
244
|
-
spec = metric_spec_from_specish(specish)
|
245
|
-
if NewRelic::Agent.instance.stats_engine.lookup_stats(*Array(specish))
|
246
|
-
found_but_not_expected << spec
|
247
|
-
end
|
248
|
-
end
|
249
|
-
assert_equal([], found_but_not_expected, "Found unexpected metrics: [#{found_but_not_expected.join(', ')}]")
|
250
|
-
end
|
251
|
-
|
252
111
|
def with_config(config_hash, opts={})
|
253
112
|
opts = { :level => 0, :do_not_cast => false }.merge(opts)
|
254
113
|
if opts[:do_not_cast]
|
@@ -264,7 +123,6 @@ def with_config(config_hash, opts={})
|
|
264
123
|
end
|
265
124
|
end
|
266
125
|
|
267
|
-
|
268
126
|
def with_verbose_logging
|
269
127
|
orig_logger = NewRelic::Agent.logger
|
270
128
|
$stderr.puts '', '---', ''
|
@@ -277,7 +135,6 @@ ensure
|
|
277
135
|
NewRelic::Agent.logger = orig_logger
|
278
136
|
end
|
279
137
|
|
280
|
-
|
281
138
|
# Need to be a bit sloppy when testing against the logging--let everything
|
282
139
|
# through, but check we (at least) get our particular message we care about
|
283
140
|
def expects_logging(level, *with_params)
|
@@ -299,31 +156,6 @@ ensure
|
|
299
156
|
::NewRelic::Agent.logger = logger
|
300
157
|
end
|
301
158
|
|
302
|
-
def in_transaction(name='dummy')
|
303
|
-
NewRelic::Agent.instance.instance_variable_set(:@transaction_sampler,
|
304
|
-
NewRelic::Agent::TransactionSampler.new)
|
305
|
-
NewRelic::Agent.instance.stats_engine.transaction_sampler = \
|
306
|
-
NewRelic::Agent.instance.transaction_sampler
|
307
|
-
NewRelic::Agent::Transaction.start(:other)
|
308
|
-
val = yield
|
309
|
-
NewRelic::Agent::Transaction.stop(name)
|
310
|
-
val
|
311
|
-
end
|
312
|
-
|
313
|
-
def freeze_time(now=Time.now)
|
314
|
-
Time.stubs(:now).returns(now)
|
315
|
-
end
|
316
|
-
|
317
|
-
def advance_time(seconds)
|
318
|
-
freeze_time(Time.now + seconds)
|
319
|
-
end
|
320
|
-
|
321
|
-
module NewRelic
|
322
|
-
def self.fixture_path(name)
|
323
|
-
File.join(File.dirname(__FILE__), 'fixtures', name)
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
159
|
def fixture_tcp_socket( response )
|
328
160
|
# Don't actually talk to Google.
|
329
161
|
socket = stub("socket") do
|
@@ -363,6 +195,50 @@ def fixture_tcp_socket( response )
|
|
363
195
|
return socket
|
364
196
|
end
|
365
197
|
|
198
|
+
|
199
|
+
class ArrayLogDevice
|
200
|
+
def initialize( array=[] )
|
201
|
+
@array = array
|
202
|
+
end
|
203
|
+
attr_reader :array
|
204
|
+
|
205
|
+
def write( message )
|
206
|
+
@array << message
|
207
|
+
end
|
208
|
+
|
209
|
+
def close; end
|
210
|
+
end
|
211
|
+
|
212
|
+
def with_array_logger( level=:info )
|
213
|
+
orig_logger = NewRelic::Agent.logger
|
214
|
+
config = {
|
215
|
+
:log_file_path => nil,
|
216
|
+
:log_file_name => nil,
|
217
|
+
:log_level => level,
|
218
|
+
}
|
219
|
+
logdev = ArrayLogDevice.new
|
220
|
+
override_logger = Logger.new( logdev )
|
221
|
+
NewRelic::Agent.logger = NewRelic::Agent::AgentLogger.new(config, "", override_logger)
|
222
|
+
|
223
|
+
yield
|
224
|
+
|
225
|
+
return logdev
|
226
|
+
ensure
|
227
|
+
NewRelic::Agent.logger = orig_logger
|
228
|
+
end
|
229
|
+
|
230
|
+
|
231
|
+
def with_debug_logging
|
232
|
+
orig_logger = NewRelic::Agent.logger
|
233
|
+
$stderr.puts '', '---', ''
|
234
|
+
NewRelic::Agent.logger =
|
235
|
+
NewRelic::Agent::AgentLogger.new( {:log_level => 'debug'}, '', Logger.new($stderr) )
|
236
|
+
yield
|
237
|
+
ensure
|
238
|
+
NewRelic::Agent.logger = orig_logger
|
239
|
+
end
|
240
|
+
|
241
|
+
|
366
242
|
module TransactionSampleTestHelper
|
367
243
|
module_function
|
368
244
|
def make_sql_transaction(*sql)
|
data.tar.gz.sig
CHANGED
Binary file
|
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.6.
|
5
|
-
prerelease:
|
4
|
+
version: 3.6.3.103.beta
|
5
|
+
prerelease: 10
|
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-05-
|
44
|
+
date: 2013-05-29 00:00:00.000000000 Z
|
45
45
|
dependencies: []
|
46
46
|
description: ! 'New Relic is a performance management system, developed by New Relic,
|
47
47
|
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/new_relic/agent/instrumentation/merb/errors.rb
|
132
132
|
- lib/new_relic/agent/instrumentation/metric_frame.rb
|
133
133
|
- lib/new_relic/agent/instrumentation/net.rb
|
134
|
+
- lib/new_relic/agent/instrumentation/padrino.rb
|
134
135
|
- lib/new_relic/agent/instrumentation/passenger_instrumentation.rb
|
135
136
|
- lib/new_relic/agent/instrumentation/queue_time.rb
|
136
137
|
- lib/new_relic/agent/instrumentation/rack.rb
|
@@ -148,6 +149,8 @@ files:
|
|
148
149
|
- lib/new_relic/agent/instrumentation/sequel.rb
|
149
150
|
- lib/new_relic/agent/instrumentation/sidekiq.rb
|
150
151
|
- lib/new_relic/agent/instrumentation/sinatra.rb
|
152
|
+
- lib/new_relic/agent/instrumentation/sinatra/ignorer.rb
|
153
|
+
- lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb
|
151
154
|
- lib/new_relic/agent/instrumentation/sunspot.rb
|
152
155
|
- lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb
|
153
156
|
- lib/new_relic/agent/method_tracer.rb
|
@@ -155,6 +158,7 @@ files:
|
|
155
158
|
- lib/new_relic/agent/null_logger.rb
|
156
159
|
- lib/new_relic/agent/pipe_channel_manager.rb
|
157
160
|
- lib/new_relic/agent/pipe_service.rb
|
161
|
+
- lib/new_relic/agent/request_sampler.rb
|
158
162
|
- lib/new_relic/agent/rules_engine.rb
|
159
163
|
- lib/new_relic/agent/sampler.rb
|
160
164
|
- lib/new_relic/agent/samplers/cpu_sampler.rb
|
@@ -237,6 +241,7 @@ files:
|
|
237
241
|
- newrelic_rpm.gemspec
|
238
242
|
- recipes/newrelic.rb
|
239
243
|
- test/active_record_fixtures.rb
|
244
|
+
- test/agent_helper.rb
|
240
245
|
- test/config/newrelic.yml
|
241
246
|
- test/config/test_control.rb
|
242
247
|
- test/fixtures/proc_cpuinfo.txt
|
@@ -280,7 +285,10 @@ files:
|
|
280
285
|
- test/multiverse/suites/config_file_loading/config_file_loading_test.rb
|
281
286
|
- test/multiverse/suites/datamapper/Envfile
|
282
287
|
- test/multiverse/suites/datamapper/config/newrelic.yml
|
283
|
-
- test/multiverse/suites/datamapper/
|
288
|
+
- test/multiverse/suites/datamapper/datamapper_test.rb
|
289
|
+
- test/multiverse/suites/padrino/Envfile
|
290
|
+
- test/multiverse/suites/padrino/config/newrelic.yml
|
291
|
+
- test/multiverse/suites/padrino/padrino_test.rb
|
284
292
|
- test/multiverse/suites/rails/Envfile
|
285
293
|
- test/multiverse/suites/rails/app.rb
|
286
294
|
- test/multiverse/suites/rails/app/views/foos/_foo.html.haml
|
@@ -294,6 +302,7 @@ files:
|
|
294
302
|
- test/multiverse/suites/rails/error_tracing_test.rb
|
295
303
|
- test/multiverse/suites/rails/gc_instrumentation_test.rb
|
296
304
|
- test/multiverse/suites/rails/queue_time_test.rb
|
305
|
+
- test/multiverse/suites/rails/request_statistics_test.rb
|
297
306
|
- test/multiverse/suites/rails/view_instrumentation_test.rb
|
298
307
|
- test/multiverse/suites/resque/Envfile
|
299
308
|
- test/multiverse/suites/resque/Rakefile
|
@@ -307,10 +316,13 @@ files:
|
|
307
316
|
- test/multiverse/suites/sidekiq/sidekiq_instrumentation_test.rb
|
308
317
|
- test/multiverse/suites/sinatra/Envfile
|
309
318
|
- test/multiverse/suites/sinatra/config/newrelic.yml
|
319
|
+
- test/multiverse/suites/sinatra/ignoring_test.rb
|
320
|
+
- test/multiverse/suites/sinatra/sinatra_classic_test.rb
|
310
321
|
- test/multiverse/suites/sinatra/sinatra_error_tracing_test.rb
|
311
322
|
- test/multiverse/suites/sinatra/sinatra_metric_explosion_test.rb
|
323
|
+
- test/multiverse/suites/sinatra/sinatra_modular_test.rb
|
312
324
|
- test/multiverse/suites/sinatra/sinatra_routes_test.rb
|
313
|
-
- test/multiverse/suites/sinatra/
|
325
|
+
- test/multiverse/suites/sinatra/sinatra_test_cases.rb
|
314
326
|
- test/multiverse/test/multiverse_test.rb
|
315
327
|
- test/multiverse/test/suite_examples/one/a/Envfile
|
316
328
|
- test/multiverse/test/suite_examples/one/a/a_test.rb
|
@@ -359,6 +371,7 @@ files:
|
|
359
371
|
- test/new_relic/agent/instrumentation/queue_time_test.rb
|
360
372
|
- test/new_relic/agent/instrumentation/rack_test.rb
|
361
373
|
- test/new_relic/agent/instrumentation/sequel_test.rb
|
374
|
+
- test/new_relic/agent/instrumentation/sinatra/transaction_namer_test.rb
|
362
375
|
- test/new_relic/agent/instrumentation/sinatra_test.rb
|
363
376
|
- test/new_relic/agent/instrumentation/task_instrumentation_test.rb
|
364
377
|
- test/new_relic/agent/memcache_instrumentation_test.rb
|
@@ -369,6 +382,7 @@ files:
|
|
369
382
|
- test/new_relic/agent/new_relic_service_test.rb
|
370
383
|
- test/new_relic/agent/pipe_channel_manager_test.rb
|
371
384
|
- test/new_relic/agent/pipe_service_test.rb
|
385
|
+
- test/new_relic/agent/request_sampler_test.rb
|
372
386
|
- test/new_relic/agent/rpm_agent_test.rb
|
373
387
|
- test/new_relic/agent/rules_engine_test.rb
|
374
388
|
- test/new_relic/agent/sampler_test.rb
|
@@ -512,19 +526,37 @@ files:
|
|
512
526
|
- lib/new_relic/build.rb
|
513
527
|
homepage: http://www.github.com/newrelic/rpm
|
514
528
|
licenses: []
|
515
|
-
post_install_message: ! "
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
\
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
529
|
+
post_install_message: ! "# New Relic Ruby Agent Release Notes #\n\n## 3.6.3 ##\n\n*
|
530
|
+
Better Sinatra Support\n\n A number of improvements have been made to our Sinatra
|
531
|
+
instrumentation.\n More details: https://newrelic.com/docs/ruby/sinatra-support-in-the-ruby-agent\n\n
|
532
|
+
\ Sinatra instrumentation has been updated to more accurately reflect the final\n
|
533
|
+
\ route that was actually executed, taking pass and conditions into account.\n \n
|
534
|
+
\ New Relic middlewares for error collection, real user monitoring, and cross\n
|
535
|
+
\ application tracing are automatically inserted into the middleware stack.\n \n
|
536
|
+
\ Ignoring routes, similar to functionality available to Rails controllers, is\n
|
537
|
+
\ now available in Sinatra as well.\n \n Routes in 1.4 are properly formatting
|
538
|
+
in transaction names. Thanks Zachary\n Anker for the contribution!\n\n* Padrino
|
539
|
+
Support\n\n Along with improving our support of Sinatra, we've also extended that
|
540
|
+
to\n supporting Padrino, a framework that builds on Sinatra. Web transactions\n
|
541
|
+
\ should show up in New Relic now for Padrino apps automatically. The agent has\n
|
542
|
+
\ been tested against the latest Padrino in versions 0.11.x and 0.10.x.\n \n* Main
|
543
|
+
overview graph only shows web transactions\n \n In the past database times from
|
544
|
+
background jobs mixed with other web transaction\n metrics in the main overview
|
545
|
+
graph. This often skewed graphs. A common workaround\n was to send background jobs
|
546
|
+
to a separate application, but that should no longer\n be necessary as the overview
|
547
|
+
graphs now only represent web transactions.\n\n## v3.6.2 ##\n\n* Sequel support\n\n
|
548
|
+
\ The Ruby agent now supports Sequel, a database toolkit for Ruby. This\n includes
|
549
|
+
capturing SQL calls and model operations in transaction traces, and\n recording
|
550
|
+
slow SQL calls. See https://newrelic.com/docs/ruby/sequel-instrumentation\n for
|
551
|
+
full details.\n\n* Thread profiling fix\n\n The prior release of the agent (version
|
552
|
+
3.6.1) broke thread profiling. A\n profile would appear to run, but return no data.
|
553
|
+
This has been fixed.\n\n* Fix for over-counted Net::HTTP calls\n\n Under some circumstances,
|
554
|
+
calls into Net::HTTP were being counted twice in\n metrics and transaction traces.
|
555
|
+
This has been fixed.\n\n* Missing traced errors for Resque applications\n\n Traced
|
556
|
+
errors weren't displaying for some Resque workers, although the errors\n were factored
|
557
|
+
into the overall count graphs. This has been fixed, and traced\n errors should
|
558
|
+
be available again after upgrading the agent.\n\nSee https://github.com/newrelic/rpm/blob/master/CHANGELOG
|
559
|
+
for a full list of\nchanges.\n"
|
528
560
|
rdoc_options:
|
529
561
|
- --line-numbers
|
530
562
|
- --inline-source
|