newrelic_rpm 3.4.0.1 → 3.4.1.beta1
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 +15 -0
- data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +7 -2
- data/lib/new_relic/agent/method_tracer.rb +4 -0
- data/lib/new_relic/agent/new_relic_service.rb +4 -3
- data/lib/new_relic/agent/pipe_channel_manager.rb +14 -3
- data/lib/new_relic/agent/stats_engine/gc_profiler.rb +4 -0
- data/lib/new_relic/control/server_methods.rb +7 -2
- data/lib/new_relic/helper.rb +10 -0
- data/lib/new_relic/language_support.rb +7 -3
- data/lib/new_relic/rack/browser_monitoring.rb +17 -11
- data/lib/new_relic/version.rb +2 -2
- data/newrelic_rpm.gemspec +5 -5
- data/test/new_relic/agent/new_relic_service_test.rb +25 -4
- data/test/new_relic/agent/pipe_channel_manager_test.rb +11 -0
- data/test/new_relic/agent/stats_engine_test.rb +4 -1
- data/test/new_relic/load_test.rb +13 -0
- data/test/script/ci.sh +11 -1
- metadata +102 -64
data/CHANGELOG
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
|
2
|
+
v3.4.1.beta1
|
3
|
+
* Fix edge case in RUM auto instrumentation where X-UA-Compatible meta tag is
|
4
|
+
present but </head> tag is missing.
|
5
|
+
* Fixed reference to @service.request_timeout to @request_timeout in
|
6
|
+
new_relic_service.rb. (Thanks to Matthew Savage)
|
7
|
+
* preserve visibility on traced methods. Aliased methods now have the same
|
8
|
+
visibility as the original traced method. A couple
|
9
|
+
of the esoteric methods created in the process weren't getting the visibility
|
10
|
+
set properly. fixed.
|
11
|
+
* Agent service does not connect to directed shard collector after connecting
|
12
|
+
to proxy
|
13
|
+
* corrupt marshal data from pipe children crashing agent
|
14
|
+
* should reset RubyBench GC counter between polls
|
15
|
+
|
1
16
|
v3.4.0.1
|
2
17
|
* Prevent the agent from resolving the collector address when disabled.
|
3
18
|
* Fix for error collector configuration that was introduced during beta.
|
@@ -139,6 +139,7 @@ module NewRelic
|
|
139
139
|
options_arg << %Q[:#{key} => #{valuestr}]
|
140
140
|
end
|
141
141
|
traced_method, punctuation = method.to_s.sub(/([?!=])$/, ''), $1
|
142
|
+
visibility = NewRelic::Helper.instance_method_visibility self, method
|
142
143
|
|
143
144
|
class_eval <<-EOC
|
144
145
|
def #{traced_method.to_s}_with_newrelic_transaction_trace#{punctuation}(*args, &block)
|
@@ -147,8 +148,12 @@ module NewRelic
|
|
147
148
|
end
|
148
149
|
end
|
149
150
|
EOC
|
150
|
-
|
151
|
-
|
151
|
+
without_method_name = "#{traced_method.to_s}_without_newrelic_transaction_trace#{punctuation}"
|
152
|
+
with_method_name = "#{traced_method.to_s}_with_newrelic_transaction_trace#{punctuation}"
|
153
|
+
alias_method without_method_name, method.to_s
|
154
|
+
alias_method method.to_s, with_method_name
|
155
|
+
send visibility, method
|
156
|
+
send visibility, with_method_name
|
152
157
|
NewRelic::Control.instance.log.debug("Traced transaction: class = #{self.name}, method = #{method.to_s}, options = #{options.inspect}")
|
153
158
|
end
|
154
159
|
end
|
@@ -481,9 +481,13 @@ module NewRelic
|
|
481
481
|
|
482
482
|
traced_method = code_to_eval(method_name, metric_name_code, options)
|
483
483
|
|
484
|
+
visibility = NewRelic::Helper.instance_method_visibility self, method_name
|
485
|
+
|
484
486
|
class_eval traced_method, __FILE__, __LINE__
|
485
487
|
alias_method _untraced_method_name(method_name, metric_name_code), method_name
|
486
488
|
alias_method method_name, _traced_method_name(method_name, metric_name_code)
|
489
|
+
send visibility, method_name
|
490
|
+
send visibility, _traced_method_name(method_name, metric_name_code)
|
487
491
|
NewRelic::Control.instance.log.debug("Traced method: class = #{self.name},"+
|
488
492
|
"method = #{method_name}, "+
|
489
493
|
"metric = '#{metric_name_code}'")
|
@@ -24,8 +24,9 @@ module NewRelic
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def connect(settings={})
|
27
|
-
host = get_redirect_host
|
28
|
-
|
27
|
+
if host = get_redirect_host
|
28
|
+
@collector = NewRelic::Control.instance.server_from_host(host)
|
29
|
+
end
|
29
30
|
response = invoke_remote(:connect, settings)
|
30
31
|
@agent_id = response['agent_run_id']
|
31
32
|
response
|
@@ -167,7 +168,7 @@ module NewRelic
|
|
167
168
|
response = http.request(request)
|
168
169
|
end
|
169
170
|
rescue Timeout::Error
|
170
|
-
log.warn "Timed out trying to post data to New Relic (timeout = #{@request_timeout} seconds)" unless @
|
171
|
+
log.warn "Timed out trying to post data to New Relic (timeout = #{@request_timeout} seconds)" unless @request_timeout < 30
|
171
172
|
raise
|
172
173
|
end
|
173
174
|
if response.is_a? Net::HTTPServiceUnavailable
|
@@ -1,8 +1,15 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
1
3
|
module NewRelic
|
2
4
|
module Agent
|
5
|
+
|
6
|
+
#--
|
7
|
+
# Manages the registering and servicing of pipes used by child
|
8
|
+
# processes to report data to their parent, rather than directly
|
9
|
+
# to the collector.
|
3
10
|
module PipeChannelManager
|
4
11
|
extend self
|
5
|
-
|
12
|
+
|
6
13
|
def register_report_channel(id)
|
7
14
|
listener.register_pipe(id)
|
8
15
|
end
|
@@ -121,7 +128,7 @@ module NewRelic
|
|
121
128
|
payload = unmarshal(got)
|
122
129
|
if payload == 'EOF'
|
123
130
|
pipe.close
|
124
|
-
|
131
|
+
elsif payload
|
125
132
|
NewRelic::Agent.agent.merge_data_from([payload[:stats],
|
126
133
|
payload[:transaction_traces],
|
127
134
|
payload[:error_traces]])
|
@@ -137,8 +144,12 @@ module NewRelic
|
|
137
144
|
else
|
138
145
|
Marshal.load(data)
|
139
146
|
end
|
147
|
+
rescue StandardError => e
|
148
|
+
msg = "#{e.class.name} '#{e.message}' trying to load #{Base64.encode64(data)}"
|
149
|
+
NewRelic::Control.instance.log.debug(msg)
|
150
|
+
nil
|
140
151
|
end
|
141
|
-
|
152
|
+
|
142
153
|
def should_keep_listening?
|
143
154
|
@started || @pipes.values.find{|pipe| !pipe.in.closed?}
|
144
155
|
end
|
@@ -31,7 +31,10 @@ module NewRelic
|
|
31
31
|
# information pulled from the config file
|
32
32
|
def proxy_server
|
33
33
|
@proxy_server ||=
|
34
|
-
NewRelic::Control::ProxyServer.new
|
34
|
+
NewRelic::Control::ProxyServer.new(self['proxy_host'],
|
35
|
+
self['proxy_port'],
|
36
|
+
self['proxy_user'],
|
37
|
+
self['proxy_pass'])
|
35
38
|
end
|
36
39
|
|
37
40
|
# turns a hostname into an ip address and returns a
|
@@ -40,7 +43,9 @@ module NewRelic
|
|
40
43
|
host = hostname || self['host'] || 'collector.newrelic.com'
|
41
44
|
|
42
45
|
# if the host is not an IP address, turn it into one
|
43
|
-
NewRelic::Control::Server.new
|
46
|
+
NewRelic::Control::Server.new(host,
|
47
|
+
(self['port'] || (use_ssl? ? 443 : 80)).to_i,
|
48
|
+
convert_to_ip_address(host))
|
44
49
|
end
|
45
50
|
|
46
51
|
# Check to see if we need to look up the IP address
|
data/lib/new_relic/helper.rb
CHANGED
@@ -17,5 +17,15 @@ module NewRelic
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def instance_method_visibility(klass, method_name)
|
21
|
+
if klass.private_instance_methods.map{|s|s.to_sym}.include? method_name.to_sym
|
22
|
+
:private
|
23
|
+
elsif klass.protected_instance_methods.map{|s|s.to_sym}.include? method_name.to_sym
|
24
|
+
:protected
|
25
|
+
else
|
26
|
+
:public
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
20
30
|
end
|
21
31
|
end
|
@@ -69,9 +69,13 @@ module NewRelic::LanguageSupport
|
|
69
69
|
|
70
70
|
def with_disabled_gc
|
71
71
|
if defined?(::GC) && ::GC.respond_to?(:disable)
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
val = nil
|
73
|
+
begin
|
74
|
+
::GC.disable
|
75
|
+
val = yield
|
76
|
+
ensure
|
77
|
+
::GC.enable
|
78
|
+
end
|
75
79
|
val
|
76
80
|
else
|
77
81
|
yield
|
@@ -44,22 +44,28 @@ module NewRelic::Rack
|
|
44
44
|
footer = NewRelic::Agent.browser_timing_footer
|
45
45
|
header = NewRelic::Agent.browser_timing_header
|
46
46
|
|
47
|
-
if beginning_of_source.include?('X-UA-Compatible')
|
47
|
+
head_pos = if beginning_of_source.include?('X-UA-Compatible')
|
48
48
|
# put at end of header if UA-Compatible meta tag found
|
49
|
-
|
50
|
-
|
49
|
+
beginning_of_source.index("</head>")
|
50
|
+
elsif head_open = beginning_of_source.index("<head")
|
51
51
|
# put at the beginning of the header
|
52
|
-
|
53
|
-
else
|
54
|
-
# put the header right above body start
|
55
|
-
head_pos = body_start
|
52
|
+
beginning_of_source.index(">", head_open) + 1
|
56
53
|
end
|
54
|
+
# otherwise put the header right above body start
|
55
|
+
head_pos ||= body_start
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
# check that head_pos is less than body close. If it's not something
|
58
|
+
# is really weird and we should punt.
|
59
|
+
if head_pos < body_close
|
60
|
+
# rebuild the source
|
61
|
+
source = source[0..(head_pos-1)] <<
|
62
|
+
header <<
|
63
|
+
source[head_pos..(body_close-1)] <<
|
64
|
+
footer <<
|
65
|
+
source[body_close..-1]
|
66
|
+
end
|
61
67
|
end
|
62
|
-
|
68
|
+
headers['Content-Length'] = source.length.to_s if headers['Content-Length']
|
63
69
|
source
|
64
70
|
end
|
65
71
|
end
|
data/lib/new_relic/version.rb
CHANGED
@@ -3,8 +3,8 @@ module NewRelic
|
|
3
3
|
module VERSION #:nodoc:
|
4
4
|
MAJOR = 3
|
5
5
|
MINOR = 4
|
6
|
-
TINY =
|
7
|
-
BUILD =
|
6
|
+
TINY = 1
|
7
|
+
BUILD = 'beta1' # 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
@@ -1,18 +1,17 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "newrelic_rpm"
|
8
|
-
s.version = "3.4.
|
8
|
+
s.version = "3.4.1.beta1"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
10
|
s.authors = ["Bill Kayser", "Jon Guymon", "Justin George", "Darin Swanson"]
|
12
|
-
s.date = "2012-
|
11
|
+
s.date = "2012-07-24"
|
13
12
|
s.description = "New Relic is a performance management system, developed by New Relic,\nInc (http://www.newrelic.com). New Relic provides you with deep\ninformation about the performance of your web application as it runs\nin production. The New Relic Ruby Agent is dual-purposed as a either a\nGem or plugin, hosted on\nhttp://github.com/newrelic/rpm/\n"
|
14
13
|
s.email = "support@newrelic.com"
|
15
|
-
s.executables = ["
|
14
|
+
s.executables = ["newrelic_cmd", "newrelic", "mongrel_rpm"]
|
16
15
|
s.extra_rdoc_files = [
|
17
16
|
"CHANGELOG",
|
18
17
|
"LICENSE",
|
@@ -191,6 +190,7 @@ Gem::Specification.new do |s|
|
|
191
190
|
"test/new_relic/delayed_job_injection_test.rb",
|
192
191
|
"test/new_relic/fake_collector.rb",
|
193
192
|
"test/new_relic/fake_service.rb",
|
193
|
+
"test/new_relic/load_test.rb",
|
194
194
|
"test/new_relic/local_environment_test.rb",
|
195
195
|
"test/new_relic/metric_data_test.rb",
|
196
196
|
"test/new_relic/metric_parser/metric_parser_test.rb",
|
@@ -2,7 +2,8 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_hel
|
|
2
2
|
|
3
3
|
class NewRelicServiceTest < Test::Unit::TestCase
|
4
4
|
def setup
|
5
|
-
@server = NewRelic::Control::Server.new('
|
5
|
+
@server = NewRelic::Control::Server.new('somewhere.example.com',
|
6
|
+
30303, '10.10.10.10')
|
6
7
|
@service = NewRelic::Agent::NewRelicService.new('license-key', @server)
|
7
8
|
@http_handle = HTTPHandle.new
|
8
9
|
NewRelic::Control.instance.stubs(:http_connection).returns(@http_handle)
|
@@ -21,18 +22,24 @@ class NewRelicServiceTest < Test::Unit::TestCase
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def test_connect_sets_redirect_host
|
24
|
-
assert_equal '
|
25
|
+
assert_equal 'somewhere.example.com', @service.collector.name
|
25
26
|
@service.connect
|
26
27
|
assert_equal 'localhost', @service.collector.name
|
27
28
|
end
|
28
|
-
|
29
|
+
|
30
|
+
def test_connect_resets_cached_ip_address
|
31
|
+
assert_equal '10.10.10.10', @service.collector.ip
|
32
|
+
@service.connect
|
33
|
+
assert_nil @service.collector.ip # 'localhost' resolves to nil
|
34
|
+
end
|
35
|
+
|
29
36
|
def test_connect_uses_proxy_collector_if_no_redirect_host
|
30
37
|
@http_handle.reset
|
31
38
|
@http_handle.respond_to(:get_redirect_host, nil)
|
32
39
|
@http_handle.respond_to(:connect, {'agent_run_id' => 1})
|
33
40
|
|
34
41
|
@service.connect
|
35
|
-
assert_equal '
|
42
|
+
assert_equal 'somewhere.example.com', @service.collector.name
|
36
43
|
end
|
37
44
|
|
38
45
|
def test_connect_sets_agent_id
|
@@ -97,7 +104,21 @@ class NewRelicServiceTest < Test::Unit::TestCase
|
|
97
104
|
@service.send(:invoke_remote, :bogus_method)
|
98
105
|
end
|
99
106
|
end
|
107
|
+
|
108
|
+
def test_should_connect_to_proxy_only_once_per_run
|
109
|
+
@service.expects(:get_redirect_host).once
|
100
110
|
|
111
|
+
@service.connect
|
112
|
+
@http_handle.respond_to(:metric_data, '0')
|
113
|
+
@service.metric_data(Time.now - 60, Time.now, {})
|
114
|
+
|
115
|
+
@http_handle.respond_to(:transaction_sample_data, '1')
|
116
|
+
@service.transaction_sample_data([])
|
117
|
+
|
118
|
+
@http_handle.respond_to(:sql_trace_data, '2')
|
119
|
+
@service.sql_trace_data([])
|
120
|
+
end
|
121
|
+
|
101
122
|
class HTTPHandle
|
102
123
|
attr_accessor :read_timeout, :route_table
|
103
124
|
|
@@ -103,6 +103,17 @@ class NewRelic::Agent::PipeChannelManagerTest < Test::Unit::TestCase
|
|
103
103
|
assert(!NewRelic::Agent::PipeChannelManager.channels[669] ||
|
104
104
|
NewRelic::Agent::PipeChannelManager.channels[669].closed?)
|
105
105
|
end
|
106
|
+
|
107
|
+
def test_manager_does_not_crash_when_given_bad_data
|
108
|
+
listener = start_listener_with_pipe(670)
|
109
|
+
assert_nothing_raised do
|
110
|
+
pid = Process.fork do
|
111
|
+
listener.pipes[670].in << 'some unloadable garbage'
|
112
|
+
end
|
113
|
+
Process.wait(pid)
|
114
|
+
listener.stop
|
115
|
+
end
|
116
|
+
end
|
106
117
|
end
|
107
118
|
|
108
119
|
def start_listener_with_pipe(pipe_id)
|
@@ -195,9 +195,12 @@ class NewRelic::Agent::StatsEngineTest < Test::Unit::TestCase
|
|
195
195
|
::GC::Profiler.stubs(:enabled?).returns(true)
|
196
196
|
::GC::Profiler.stubs(:total_time).returns(1.0, 4.0)
|
197
197
|
::GC.stubs(:count).returns(1, 3)
|
198
|
-
elsif NewRelic::LanguageSupport.using_version?('1.8')
|
198
|
+
elsif NewRelic::LanguageSupport.using_version?('1.8.7') &&
|
199
|
+
RUBY_DESCRIPTION =~ /Ruby Enterprise Edition/
|
199
200
|
::GC.stubs(:time).returns(1000000, 4000000)
|
200
201
|
::GC.stubs(:collections).returns(1, 3)
|
202
|
+
else
|
203
|
+
return true # no need to test if we're not collecting GC metrics
|
201
204
|
end
|
202
205
|
|
203
206
|
engine = NewRelic::Agent.instance.stats_engine
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
|
2
|
+
require 'test/unit'
|
3
|
+
require 'resolv'
|
4
|
+
require 'mocha'
|
5
|
+
|
6
|
+
class LoadTest < Test::Unit::TestCase
|
7
|
+
def test_loading_agent_when_disabled_does_not_resolv_addresses
|
8
|
+
::Resolv.expects(:getaddress).never
|
9
|
+
::IPSocket.expects(:getaddress).never
|
10
|
+
|
11
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','test_helper'))
|
12
|
+
end
|
13
|
+
end
|
data/test/script/ci.sh
CHANGED
@@ -127,4 +127,14 @@ fi
|
|
127
127
|
|
128
128
|
export RAILS_ENV=test
|
129
129
|
bundle
|
130
|
-
|
130
|
+
|
131
|
+
# FIXME: Here we actually trigger the tests. Since the agent deals so heavily
|
132
|
+
# in units of time we have many tests that assert that durations are measured
|
133
|
+
# correctly. These almost always pass, but as the CI machine has come under
|
134
|
+
# heavier load there tend to be discrepencies between the duration measured in
|
135
|
+
# the test and the duration the agent measures. This is due to lags in CPU
|
136
|
+
# scheduling since many processes are running on the box simultaneously.
|
137
|
+
# To reduce the noise from these sporardic failures we rerun the test suite if
|
138
|
+
# there are failures to see if they are transient (instead of re-running it by
|
139
|
+
# hand). Ultimately we'll move towards a more elegant solution.
|
140
|
+
bundle exec rake --trace db:create:all test:newrelic || bundle exec rake --trace test:newrelic || bundle exec rake --trace test:newrelic
|
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
|
-
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: -2372133300
|
5
|
+
prerelease: 6
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 4
|
9
|
+
- 1
|
10
|
+
- beta
|
11
|
+
- 1
|
12
|
+
version: 3.4.1.beta1
|
6
13
|
platform: ruby
|
7
|
-
authors:
|
14
|
+
authors:
|
8
15
|
- Bill Kayser
|
9
16
|
- Jon Guymon
|
10
17
|
- Justin George
|
@@ -12,66 +19,72 @@ authors:
|
|
12
19
|
autorequire:
|
13
20
|
bindir: bin
|
14
21
|
cert_chain: []
|
15
|
-
|
16
|
-
|
17
|
-
|
22
|
+
|
23
|
+
date: 2012-07-24 00:00:00 Z
|
24
|
+
dependencies:
|
25
|
+
- !ruby/object:Gem::Dependency
|
18
26
|
name: jeweler
|
19
|
-
|
27
|
+
prerelease: false
|
28
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
29
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
hash: 3
|
34
|
+
segments:
|
35
|
+
- 0
|
36
|
+
version: "0"
|
25
37
|
type: :development
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Dependency
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
29
40
|
name: mocha
|
30
|
-
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
43
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
hash: 3
|
48
|
+
segments:
|
49
|
+
- 0
|
50
|
+
version: "0"
|
36
51
|
type: :development
|
37
|
-
|
38
|
-
|
39
|
-
- !ruby/object:Gem::Dependency
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
40
54
|
name: shoulda
|
41
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
57
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
47
65
|
type: :development
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
66
|
+
version_requirements: *id003
|
67
|
+
description: |
|
68
|
+
New Relic is a performance management system, developed by New Relic,
|
52
69
|
Inc (http://www.newrelic.com). New Relic provides you with deep
|
53
|
-
|
54
70
|
information about the performance of your web application as it runs
|
55
|
-
|
56
71
|
in production. The New Relic Ruby Agent is dual-purposed as a either a
|
57
|
-
|
58
72
|
Gem or plugin, hosted on
|
59
|
-
|
60
73
|
http://github.com/newrelic/rpm/
|
61
74
|
|
62
|
-
'
|
63
75
|
email: support@newrelic.com
|
64
|
-
executables:
|
65
|
-
- mongrel_rpm
|
66
|
-
- newrelic
|
76
|
+
executables:
|
67
77
|
- newrelic_cmd
|
78
|
+
- newrelic
|
79
|
+
- mongrel_rpm
|
68
80
|
extensions: []
|
69
|
-
|
81
|
+
|
82
|
+
extra_rdoc_files:
|
70
83
|
- CHANGELOG
|
71
84
|
- LICENSE
|
72
85
|
- README.rdoc
|
73
86
|
- newrelic.yml
|
74
|
-
files:
|
87
|
+
files:
|
75
88
|
- CHANGELOG
|
76
89
|
- LICENSE
|
77
90
|
- README.rdoc
|
@@ -243,6 +256,7 @@ files:
|
|
243
256
|
- test/new_relic/delayed_job_injection_test.rb
|
244
257
|
- test/new_relic/fake_collector.rb
|
245
258
|
- test/new_relic/fake_service.rb
|
259
|
+
- test/new_relic/load_test.rb
|
246
260
|
- test/new_relic/local_environment_test.rb
|
247
261
|
- test/new_relic/metric_data_test.rb
|
248
262
|
- test/new_relic/metric_parser/metric_parser_test.rb
|
@@ -347,39 +361,63 @@ files:
|
|
347
361
|
- vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb
|
348
362
|
homepage: http://www.github.com/newrelic/rpm
|
349
363
|
licenses: []
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
364
|
+
|
365
|
+
post_install_message: |
|
366
|
+
|
367
|
+
PLEASE NOTE:
|
368
|
+
|
369
|
+
Developer Mode is now a Rack middleware.
|
370
|
+
|
371
|
+
Developer Mode is no longer available in Rails 2.1 and earlier.
|
372
|
+
However, starting in version 2.12 you can use Developer Mode in any
|
373
|
+
Rack based framework, in addition to Rails. To install developer mode
|
374
|
+
in a non-Rails application, just add NewRelic::Rack::DeveloperMode to
|
375
|
+
your middleware stack.
|
376
|
+
|
377
|
+
If you are using JRuby, we recommend using at least version 1.4 or
|
378
|
+
later because of issues with the implementation of the timeout library.
|
379
|
+
|
380
|
+
Refer to the README.md file for more information.
|
381
|
+
|
382
|
+
Please see http://github.com/newrelic/rpm/blob/master/CHANGELOG
|
383
|
+
for a complete description of the features and enhancements available
|
384
|
+
in version 3.4 of the Ruby Agent.
|
385
|
+
|
386
|
+
|
387
|
+
rdoc_options:
|
360
388
|
- --charset=UTF-8
|
361
389
|
- --line-numbers
|
362
390
|
- --inline-source
|
363
391
|
- --title
|
364
392
|
- New Relic Ruby Agent
|
365
|
-
require_paths:
|
393
|
+
require_paths:
|
366
394
|
- lib
|
367
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
395
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
368
396
|
none: false
|
369
|
-
requirements:
|
370
|
-
- -
|
371
|
-
- !ruby/object:Gem::Version
|
372
|
-
|
373
|
-
|
397
|
+
requirements:
|
398
|
+
- - ">="
|
399
|
+
- !ruby/object:Gem::Version
|
400
|
+
hash: 3
|
401
|
+
segments:
|
402
|
+
- 0
|
403
|
+
version: "0"
|
404
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
374
405
|
none: false
|
375
|
-
requirements:
|
376
|
-
- -
|
377
|
-
- !ruby/object:Gem::Version
|
406
|
+
requirements:
|
407
|
+
- - ">"
|
408
|
+
- !ruby/object:Gem::Version
|
409
|
+
hash: 25
|
410
|
+
segments:
|
411
|
+
- 1
|
412
|
+
- 3
|
413
|
+
- 1
|
378
414
|
version: 1.3.1
|
379
415
|
requirements: []
|
416
|
+
|
380
417
|
rubyforge_project:
|
381
|
-
rubygems_version: 1.8.
|
418
|
+
rubygems_version: 1.8.24
|
382
419
|
signing_key:
|
383
420
|
specification_version: 3
|
384
421
|
summary: New Relic Ruby Agent
|
385
422
|
test_files: []
|
423
|
+
|