newrelic_rpm 3.1.2.beta1 → 3.1.2.beta2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of newrelic_rpm might be problematic. Click here for more details.
- data/CHANGELOG +1 -0
- data/lib/new_relic/agent/beacon_configuration.rb +4 -3
- data/lib/new_relic/agent/error_collector.rb +5 -3
- data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +2 -1
- data/lib/new_relic/control/configuration.rb +2 -1
- data/lib/new_relic/control/instance_methods.rb +1 -0
- data/lib/new_relic/transaction_sample/segment.rb +7 -6
- data/lib/new_relic/version.rb +1 -1
- data/newrelic_rpm.gemspec +3 -3
- data/test/new_relic/agent/beacon_configuration_test.rb +4 -4
- data/test/new_relic/agent/browser_monitoring_test.rb +5 -5
- data/test/new_relic/agent/error_collector_test.rb +17 -10
- data/test/new_relic/agent/instrumentation/active_record_instrumentation_test.rb +1 -1
- data/test/new_relic/data_serialization_test.rb +5 -9
- data/test/new_relic/transaction_sample/segment_test.rb +11 -9
- data/test/new_relic/transaction_sample_test.rb +1 -1
- metadata +99 -64
data/CHANGELOG
CHANGED
@@ -3,6 +3,7 @@ v3.1.2
|
|
3
3
|
* Work around for Ruby 1.8.7 Marshal crash bug
|
4
4
|
* Numerous community patches (Gabriel Horner, Bradley Harris, Diego Garcia,
|
5
5
|
Tommy Sullivan, Greg Hazel, John Thomas Marino, Paul Elliott, Pan Thomakos)
|
6
|
+
* Fixed RUM instrumentation bug
|
6
7
|
|
7
8
|
v3.1.1
|
8
9
|
* Support for Rails 3.1 (thanks to Ben Hoskings via github)
|
@@ -30,7 +30,7 @@ module NewRelic
|
|
30
30
|
|
31
31
|
# A static javascript header that is identical for every account
|
32
32
|
# and application
|
33
|
-
JS_HEADER = "<script type=\"text/javascript\">var NREUMQ=[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>"
|
33
|
+
JS_HEADER = "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>"
|
34
34
|
|
35
35
|
# Creates a new browser configuration data. Argument is a hash
|
36
36
|
# of configuration values from the server
|
@@ -63,7 +63,7 @@ module NewRelic
|
|
63
63
|
# includes it themselves)
|
64
64
|
def build_load_file_js(connect_data)
|
65
65
|
js = <<-EOS
|
66
|
-
if (!NREUMQ.f) NREUMQ.f=function() {
|
66
|
+
if (!NREUMQ.f) { NREUMQ.f=function() {
|
67
67
|
NREUMQ.push(["load",new Date().getTime()]);
|
68
68
|
EOS
|
69
69
|
|
@@ -79,7 +79,8 @@ EOS
|
|
79
79
|
js << <<-EOS
|
80
80
|
if(NREUMQ.a)NREUMQ.a();
|
81
81
|
};
|
82
|
-
|
82
|
+
NREUMQ.a=window.onload;window.onload=NREUMQ.f;
|
83
|
+
};
|
83
84
|
EOS
|
84
85
|
js
|
85
86
|
end
|
@@ -24,7 +24,6 @@ module NewRelic
|
|
24
24
|
@errors = []
|
25
25
|
# lookup of exception class names to ignore. Hash for fast access
|
26
26
|
@ignore = {}
|
27
|
-
@ignore_filter = nil
|
28
27
|
|
29
28
|
config = NewRelic::Control.instance.fetch('error_collector', {})
|
30
29
|
|
@@ -45,10 +44,13 @@ module NewRelic
|
|
45
44
|
|
46
45
|
# Returns the error filter proc that is used to check if an
|
47
46
|
# error should be reported. When given a block, resets the
|
48
|
-
# filter to the provided block
|
47
|
+
# filter to the provided block. The define_method() is used to
|
48
|
+
# wrap the block in a lambda so return statements don't result in a
|
49
|
+
# LocalJump exception.
|
49
50
|
def ignore_error_filter(&block)
|
50
51
|
if block
|
51
|
-
|
52
|
+
self.class.class_eval { define_method(:ignore_filter_proc, &block) }
|
53
|
+
@ignore_filter = method(:ignore_filter_proc)
|
52
54
|
else
|
53
55
|
@ignore_filter
|
54
56
|
end
|
@@ -45,6 +45,7 @@ module NewRelic
|
|
45
45
|
#
|
46
46
|
def init_plugin(options={})
|
47
47
|
options['app_name'] = ENV['NEWRELIC_APP_NAME'] if ENV['NEWRELIC_APP_NAME']
|
48
|
+
options['app_name'] ||= ENV['NEW_RELIC_APP_NAME'] if ENV['NEW_RELIC_APP_NAME']
|
48
49
|
|
49
50
|
# Merge the stringified options into the config as overrides:
|
50
51
|
logger_override = options.delete(:log)
|
@@ -189,8 +189,8 @@ module NewRelic
|
|
189
189
|
sql = params[:sql]
|
190
190
|
return nil unless sql && params[:connection_config]
|
191
191
|
statement = sql.split(";\n")[0] # only explain the first
|
192
|
-
@explain_sql = explain_statement(statement, params[:connection_config])
|
193
|
-
@explain_sql
|
192
|
+
@explain_sql = explain_statement(statement, params[:connection_config])
|
193
|
+
return @explain_sql || []
|
194
194
|
end
|
195
195
|
|
196
196
|
def explain_statement(statement, config)
|
@@ -218,19 +218,20 @@ module NewRelic
|
|
218
218
|
# that it implements each. Also: can't use select_rows because the native postgres
|
219
219
|
# driver doesn't know that method.
|
220
220
|
|
221
|
-
headers =
|
221
|
+
headers = []
|
222
|
+
values = []
|
222
223
|
if items.respond_to?(:each_hash)
|
223
224
|
items.each_hash do |row|
|
224
225
|
headers = row.keys
|
225
|
-
values
|
226
|
+
values << headers.map{|h| row[h] }
|
226
227
|
end
|
227
228
|
elsif items.respond_to?(:each)
|
228
229
|
items.each do |row|
|
229
230
|
if row.kind_of?(Hash)
|
230
231
|
headers = row.keys
|
231
|
-
values
|
232
|
+
values << headers.map{|h| row[h] }
|
232
233
|
else
|
233
|
-
values
|
234
|
+
values << row
|
234
235
|
end
|
235
236
|
end
|
236
237
|
else
|
data/lib/new_relic/version.rb
CHANGED
@@ -4,7 +4,7 @@ module NewRelic
|
|
4
4
|
MAJOR = 3
|
5
5
|
MINOR = 1
|
6
6
|
TINY = 2
|
7
|
-
BUILD = '
|
7
|
+
BUILD = 'beta2' # Set to nil for a release, 'beta1', 'alpha', etc for prerelease builds
|
8
8
|
STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
|
9
9
|
end
|
10
10
|
|
data/newrelic_rpm.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{newrelic_rpm}
|
8
|
-
s.version = "3.1.2.
|
8
|
+
s.version = "3.1.2.beta2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bill Kayser", "Jon Guymon", "Justin George", "Darin Swanson"]
|
12
|
-
s.date = %q{2011-08-
|
12
|
+
s.date = %q{2011-08-26}
|
13
13
|
s.description = %q{New Relic is a performance management system, developed by New Relic,
|
14
14
|
Inc (http://www.newrelic.com). New Relic provides you with deep
|
15
15
|
information about the performance of your web application as it runs
|
@@ -18,7 +18,7 @@ Gem or plugin, hosted on
|
|
18
18
|
http://github.com/newrelic/rpm/
|
19
19
|
}
|
20
20
|
s.email = %q{support@newrelic.com}
|
21
|
-
s.executables = ["
|
21
|
+
s.executables = ["newrelic_cmd", "newrelic", "mongrel_rpm"]
|
22
22
|
s.extra_rdoc_files = [
|
23
23
|
"CHANGELOG",
|
24
24
|
"LICENSE",
|
@@ -19,7 +19,7 @@ class NewRelic::Agent::BeaconConfigurationTest < Test::Unit::TestCase
|
|
19
19
|
assert_equal('a browser monitoring key', bc.browser_monitoring_key)
|
20
20
|
assert_equal('an application id', bc.application_id)
|
21
21
|
assert_equal('a beacon', bc.beacon)
|
22
|
-
assert_equal(
|
22
|
+
assert_equal(117, bc.browser_timing_header.size, "should output the javascript with all the data available")
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_license_bytes_nil
|
@@ -81,21 +81,21 @@ class NewRelic::Agent::BeaconConfigurationTest < Test::Unit::TestCase
|
|
81
81
|
def test_build_load_file_js_load_episodes_file_false
|
82
82
|
connect_data = {'rum.load_episodes_file' => false}
|
83
83
|
bc = NewRelic::Agent::BeaconConfiguration.new(connect_data)
|
84
|
-
assert_equal(
|
84
|
+
assert_equal(160, bc.build_load_file_js(connect_data).size,
|
85
85
|
"should include timing footer but not rum.js load")
|
86
86
|
end
|
87
87
|
|
88
88
|
def test_build_load_file_js_load_episodes_file_missing
|
89
89
|
connect_data = {}
|
90
90
|
bc = NewRelic::Agent::BeaconConfiguration.new(connect_data)
|
91
|
-
assert_equal(
|
91
|
+
assert_equal(278, bc.build_load_file_js(connect_data).size,
|
92
92
|
"should output the javascript when there is no configuration")
|
93
93
|
end
|
94
94
|
|
95
95
|
def test_build_load_file_js_load_episodes_file_present
|
96
96
|
connect_data = {'rum.load_episodes_file' => true}
|
97
97
|
bc = NewRelic::Agent::BeaconConfiguration.new(connect_data)
|
98
|
-
assert_equal(
|
98
|
+
assert_equal(278, bc.build_load_file_js(connect_data).size,
|
99
99
|
"should output the javascript when rum.load_episodes_file is true")
|
100
100
|
end
|
101
101
|
|
@@ -30,13 +30,13 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
|
|
30
30
|
|
31
31
|
def test_browser_timing_header
|
32
32
|
header = browser_timing_header
|
33
|
-
assert_equal "<script type=\"text/javascript\">var NREUMQ=[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
|
33
|
+
assert_equal "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_browser_timing_header_with_rum_enabled_not_specified
|
37
37
|
NewRelic::Agent.instance.expects(:beacon_configuration).at_least_once.returns( NewRelic::Agent::BeaconConfiguration.new({"browser_key" => "browserKey", "application_id" => "apId", "beacon"=>"beacon", "episodes_url"=>"this_is_my_file"}))
|
38
38
|
header = browser_timing_header
|
39
|
-
assert_equal "<script type=\"text/javascript\">var NREUMQ=[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
|
39
|
+
assert_equal "<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>", header
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_browser_timing_header_with_rum_enabled_false
|
@@ -68,7 +68,7 @@ class NewRelic::Agent::BrowserMonitoringTest < Test::Unit::TestCase
|
|
68
68
|
Thread.current[:newrelic_start_time] = Time.now
|
69
69
|
|
70
70
|
footer = browser_timing_footer
|
71
|
-
snippet = '<script type="text/javascript">if (!NREUMQ.f) NREUMQ.f=function() {
|
71
|
+
snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
|
72
72
|
NREUMQ.push(["load",new Date().getTime()]);
|
73
73
|
var e=document.createElement("script");'
|
74
74
|
assert footer.include?(snippet), "Expected footer to include snippet: #{snippet}, but instead was #{footer}"
|
@@ -103,7 +103,7 @@ var e=document.createElement("script");'
|
|
103
103
|
config.expects(:license_bytes).returns(license_bytes)
|
104
104
|
NewRelic::Agent.instance.expects(:beacon_configuration).returns(config).at_least_once
|
105
105
|
footer = browser_timing_footer
|
106
|
-
beginning_snippet = '<script type="text/javascript">if (!NREUMQ.f) NREUMQ.f=function() {
|
106
|
+
beginning_snippet = '<script type="text/javascript">if (!NREUMQ.f) { NREUMQ.f=function() {
|
107
107
|
NREUMQ.push(["load",new Date().getTime()]);
|
108
108
|
var e=document.createElement("script");'
|
109
109
|
ending_snippet = "])</script>"
|
@@ -238,7 +238,7 @@ var e=document.createElement("script");'
|
|
238
238
|
self.expects(:obfuscate).with('most recent transaction').returns('most recent transaction')
|
239
239
|
|
240
240
|
value = footer_js_string(beacon, license_key, application_id)
|
241
|
-
assert_equal("<script type=\"text/javascript\">if (!NREUMQ.f) NREUMQ.f=function() {\nNREUMQ.push([\"load\",new Date().getTime()]);\nvar e=document.createElement(\"script\");\ne.type=\"text/javascript\";e.async=true;e.src=\"this_is_my_file\";\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\
|
241
|
+
assert_equal("<script type=\"text/javascript\">if (!NREUMQ.f) { NREUMQ.f=function() {\nNREUMQ.push([\"load\",new Date().getTime()]);\nvar e=document.createElement(\"script\");\ne.type=\"text/javascript\";e.async=true;e.src=\"this_is_my_file\";\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\nNREUMQ.a=window.onload;window.onload=NREUMQ.f;\n};\nNREUMQ.push([\"nrf2\",\"\",\"\",1,\"most recent transaction\",0,0,new Date().getTime()])</script>", value, "should return the javascript given some default values")
|
242
242
|
end
|
243
243
|
|
244
244
|
def test_html_safe_if_needed_unsafed
|
@@ -144,22 +144,29 @@ class NewRelic::Agent::ErrorCollectorTest < Test::Unit::TestCase
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def test_exclude_block
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
else
|
151
|
-
e
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
147
|
+
NewRelic::Agent.logger.expects(:error).never
|
148
|
+
@error_collector.ignore_error_filter &wrapped_filter_proc
|
149
|
+
|
155
150
|
@error_collector.notice_error(IOError.new("message"), :metric => 'path', :request_params => {:x => 'y'})
|
156
|
-
|
151
|
+
@error_collector.notice_error(Exception.new("message"), :metric => 'path', :request_params => {:x => 'y'})
|
152
|
+
|
157
153
|
errors = @error_collector.harvest_errors([])
|
158
154
|
|
159
|
-
assert_equal
|
155
|
+
assert_equal 1, errors.length
|
160
156
|
end
|
161
157
|
|
162
158
|
private
|
159
|
+
|
160
|
+
def wrapped_filter_proc
|
161
|
+
Proc.new do |e|
|
162
|
+
if e.is_a? IOError
|
163
|
+
return nil
|
164
|
+
else
|
165
|
+
return e
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
163
170
|
def silence_stream(*args)
|
164
171
|
super
|
165
172
|
rescue NoMethodError
|
@@ -399,7 +399,7 @@ class NewRelic::Agent::Instrumentation::ActiveRecordInstrumentationTest < Test::
|
|
399
399
|
assert explanation[0].include?(c)
|
400
400
|
end
|
401
401
|
['1', 'SIMPLE', ActiveRecordFixtures::Order.table_name].each do |c|
|
402
|
-
assert explanation[1].include?(c)
|
402
|
+
assert explanation[1][0].include?(c)
|
403
403
|
end
|
404
404
|
|
405
405
|
s = NewRelic::Agent.get_stats("ActiveRecord/ActiveRecordFixtures::Order/find")
|
@@ -161,6 +161,7 @@ class NewRelic::DataSerializationTest < Test::Unit::TestCase
|
|
161
161
|
snd.write(data[0,data.size/2])
|
162
162
|
sleep(0.1)
|
163
163
|
snd.write(data[(data.size/2)..-1])
|
164
|
+
snd.close
|
164
165
|
end
|
165
166
|
|
166
167
|
read = Thread.new do
|
@@ -176,15 +177,10 @@ class NewRelic::DataSerializationTest < Test::Unit::TestCase
|
|
176
177
|
end
|
177
178
|
end
|
178
179
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
gc.join
|
184
|
-
end
|
185
|
-
rescue Timeout::Error
|
186
|
-
# rubinius deadlocks which seems to be a rubinius bug
|
187
|
-
raise unless NewRelic::LanguageSupport.using_rubinius?
|
180
|
+
Timeout::timeout(5) do
|
181
|
+
write.join
|
182
|
+
read.join
|
183
|
+
gc.join
|
188
184
|
end
|
189
185
|
# should not seg fault
|
190
186
|
end
|
@@ -391,28 +391,30 @@ class NewRelic::TransactionSample::SegmentTest < Test::Unit::TestCase
|
|
391
391
|
NewRelic::TransactionSample.expects(:get_connection).with(config).returns(connection)
|
392
392
|
|
393
393
|
assert_equal(plan.keys.sort, s.explain_sql[0].sort)
|
394
|
-
assert_equal(plan.values.compact.sort, s.explain_sql[1].compact.sort)
|
394
|
+
assert_equal(plan.values.compact.sort, s.explain_sql[1][0].compact.sort)
|
395
395
|
end
|
396
396
|
|
397
|
-
# this basically casts the resultset to an array of rows, which are
|
398
|
-
# arrays of columns
|
399
397
|
def test_process_resultset
|
400
398
|
s = NewRelic::TransactionSample::Segment.new(Time.now, 'Custom/test/metric', nil)
|
401
|
-
|
402
|
-
assert_equal([nil, ["column"]], s.process_resultset(
|
399
|
+
resultset = [["column"]]
|
400
|
+
assert_equal([nil, [["column"]]], s.process_resultset(resultset))
|
403
401
|
end
|
404
402
|
|
405
403
|
def test_explain_sql_one_select_with_pg_connection
|
406
404
|
s = NewRelic::TransactionSample::Segment.new(Time.now, 'Custom/test/metric', nil)
|
407
405
|
config = {:adapter => 'postgresql'}
|
408
406
|
config.default('val')
|
409
|
-
s.params = {:sql => "
|
407
|
+
s.params = {:sql => "select count(id) from blogs limit 1;", :connection_config => config}
|
410
408
|
connection = mock('connection')
|
411
|
-
|
412
|
-
|
409
|
+
plan = [{"QUERY PLAN"=>"Limit (cost=11.75..11.76 rows=1 width=4)"},
|
410
|
+
{"QUERY PLAN"=>" -> Aggregate (cost=11.75..11.76 rows=1 width=4)"},
|
411
|
+
{"QUERY PLAN"=>" -> Seq Scan on blogs (cost=0.00..11.40 rows=140 width=4)"}]
|
412
|
+
connection.expects(:execute).returns(plan)
|
413
413
|
NewRelic::TransactionSample.expects(:get_connection).with(config).returns(connection)
|
414
414
|
assert_equal([['QUERY PLAN'],
|
415
|
-
|
415
|
+
[["Limit (cost=11.75..11.76 rows=1 width=4)"],
|
416
|
+
[" -> Aggregate (cost=11.75..11.76 rows=1 width=4)"],
|
417
|
+
[" -> Seq Scan on blogs (cost=0.00..11.40 rows=140 width=4)"]]],
|
416
418
|
s.explain_sql)
|
417
419
|
end
|
418
420
|
|
@@ -84,7 +84,7 @@ class NewRelic::TransactionSampleTest < Test::Unit::TestCase
|
|
84
84
|
explanation = segment.params[:explain_plan]
|
85
85
|
|
86
86
|
assert_kind_of Array, explanation
|
87
|
-
assert_equal([nil, ["QUERY RESULT"]], explanation)
|
87
|
+
assert_equal([nil, [["QUERY RESULT"]]], explanation)
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
metadata
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic_rpm
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 62196423
|
5
5
|
prerelease: 6
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 1
|
9
|
+
- 2
|
10
|
+
- beta
|
11
|
+
- 2
|
12
|
+
version: 3.1.2.beta2
|
6
13
|
platform: ruby
|
7
|
-
authors:
|
14
|
+
authors:
|
8
15
|
- Bill Kayser
|
9
16
|
- Jon Guymon
|
10
17
|
- Justin George
|
@@ -12,67 +19,73 @@ authors:
|
|
12
19
|
autorequire:
|
13
20
|
bindir: bin
|
14
21
|
cert_chain: []
|
15
|
-
|
22
|
+
|
23
|
+
date: 2011-08-26 00:00:00 -07:00
|
16
24
|
default_executable:
|
17
|
-
dependencies:
|
18
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
dependencies:
|
26
|
+
- !ruby/object:Gem::Dependency
|
19
27
|
name: jeweler
|
20
|
-
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
30
|
none: false
|
22
|
-
requirements:
|
23
|
-
- -
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
hash: 3
|
35
|
+
segments:
|
36
|
+
- 0
|
37
|
+
version: "0"
|
26
38
|
type: :development
|
27
|
-
|
28
|
-
|
29
|
-
- !ruby/object:Gem::Dependency
|
39
|
+
version_requirements: *id001
|
40
|
+
- !ruby/object:Gem::Dependency
|
30
41
|
name: mocha
|
31
|
-
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
44
|
none: false
|
33
|
-
requirements:
|
34
|
-
- -
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 3
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
version: "0"
|
37
52
|
type: :development
|
38
|
-
|
39
|
-
|
40
|
-
- !ruby/object:Gem::Dependency
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
41
55
|
name: shoulda
|
42
|
-
|
56
|
+
prerelease: false
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
43
58
|
none: false
|
44
|
-
requirements:
|
45
|
-
- -
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
48
66
|
type: :development
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
67
|
+
version_requirements: *id003
|
68
|
+
description: |
|
69
|
+
New Relic is a performance management system, developed by New Relic,
|
53
70
|
Inc (http://www.newrelic.com). New Relic provides you with deep
|
54
|
-
|
55
71
|
information about the performance of your web application as it runs
|
56
|
-
|
57
72
|
in production. The New Relic Ruby Agent is dual-purposed as a either a
|
58
|
-
|
59
73
|
Gem or plugin, hosted on
|
60
|
-
|
61
74
|
http://github.com/newrelic/rpm/
|
62
75
|
|
63
|
-
'
|
64
76
|
email: support@newrelic.com
|
65
|
-
executables:
|
66
|
-
- mongrel_rpm
|
67
|
-
- newrelic
|
77
|
+
executables:
|
68
78
|
- newrelic_cmd
|
79
|
+
- newrelic
|
80
|
+
- mongrel_rpm
|
69
81
|
extensions: []
|
70
|
-
|
82
|
+
|
83
|
+
extra_rdoc_files:
|
71
84
|
- CHANGELOG
|
72
85
|
- LICENSE
|
73
86
|
- README.rdoc
|
74
87
|
- newrelic.yml
|
75
|
-
files:
|
88
|
+
files:
|
76
89
|
- CHANGELOG
|
77
90
|
- LICENSE
|
78
91
|
- README.rdoc
|
@@ -327,38 +340,60 @@ files:
|
|
327
340
|
has_rdoc: true
|
328
341
|
homepage: http://www.github.com/newrelic/rpm
|
329
342
|
licenses: []
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
343
|
+
|
344
|
+
post_install_message: |
|
345
|
+
|
346
|
+
PLEASE NOTE:
|
347
|
+
|
348
|
+
Developer Mode is now a Rack middleware.
|
349
|
+
|
350
|
+
Developer Mode is no longer available in Rails 2.1 and earlier.
|
351
|
+
However, starting in version 2.12 you can use Developer Mode in any
|
352
|
+
Rack based framework, in addition to Rails. To install developer mode
|
353
|
+
in a non-Rails application, just add NewRelic::Rack::DeveloperMode to
|
354
|
+
your middleware stack.
|
355
|
+
|
356
|
+
If you are using JRuby, we recommend using at least version 1.4 or
|
357
|
+
later because of issues with the implementation of the timeout library.
|
358
|
+
|
359
|
+
Refer to the README.md file for more information.
|
360
|
+
|
361
|
+
Please see http://github.com/newrelic/rpm/blob/master/CHANGELOG
|
362
|
+
for a complete description of the features and enhancements available
|
363
|
+
in version 3.1 of the Ruby Agent.
|
364
|
+
|
365
|
+
|
366
|
+
rdoc_options:
|
340
367
|
- --line-numbers
|
341
368
|
- --inline-source
|
342
369
|
- --title
|
343
370
|
- New Relic Ruby Agent
|
344
|
-
require_paths:
|
371
|
+
require_paths:
|
345
372
|
- lib
|
346
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
373
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
347
374
|
none: false
|
348
|
-
requirements:
|
349
|
-
- -
|
350
|
-
- !ruby/object:Gem::Version
|
351
|
-
|
352
|
-
|
375
|
+
requirements:
|
376
|
+
- - ">="
|
377
|
+
- !ruby/object:Gem::Version
|
378
|
+
hash: 3
|
379
|
+
segments:
|
380
|
+
- 0
|
381
|
+
version: "0"
|
382
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
353
383
|
none: false
|
354
|
-
requirements:
|
355
|
-
- -
|
356
|
-
- !ruby/object:Gem::Version
|
357
|
-
|
384
|
+
requirements:
|
385
|
+
- - ">="
|
386
|
+
- !ruby/object:Gem::Version
|
387
|
+
hash: 3
|
388
|
+
segments:
|
389
|
+
- 0
|
390
|
+
version: "0"
|
358
391
|
requirements: []
|
392
|
+
|
359
393
|
rubyforge_project:
|
360
|
-
rubygems_version: 1.
|
394
|
+
rubygems_version: 1.4.2
|
361
395
|
signing_key:
|
362
396
|
specification_version: 3
|
363
397
|
summary: New Relic Ruby Agent
|
364
398
|
test_files: []
|
399
|
+
|