newrelic_rpm 3.3.3 → 3.3.4.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 CHANGED
@@ -1,3 +1,6 @@
1
+ v3.3.4
2
+ * Rails 3 view instrumentation
3
+
1
4
  v3.3.3
2
5
  * Improved Sinatra instrumentation
3
6
  * Limit the number of nodes collected in long running transactions to prevent leaking memory
@@ -124,8 +124,7 @@ module NewRelic
124
124
 
125
125
  # The singleton Agent instance. Used internally.
126
126
  def agent #:nodoc:
127
- raise "Plugin not initialized!" if @agent.nil?
128
- @agent
127
+ @agent || raise("Plugin not initialized!")
129
128
  end
130
129
 
131
130
  def agent=(new_instance)#:nodoc:
@@ -38,13 +38,25 @@ module NewRelic
38
38
  end
39
39
 
40
40
  module ActionView
41
- def _render_template(template, layout = nil, options = {}) #:nodoc:
42
- NewRelic::Agent.trace_execution_scoped "View/#{template.virtual_path}/Rendering" do
43
- super
41
+ module NewRelic
42
+ extend self
43
+ def template_metric(identifier, options = {})
44
+ if options[:file]
45
+ "file"
46
+ elsif identifier.include? '/' # this is a filepath
47
+ identifier.split('/')[-2..-1].join('/')
48
+ else
49
+ identifier
50
+ end
51
+ end
52
+ def render_type(file_path)
53
+ file = File.basename(file_path)
54
+ if file.starts_with?('_')
55
+ return 'Partial'
56
+ else
57
+ return 'Rendering'
58
+ end
44
59
  end
45
- end
46
-
47
- module PartialRenderer
48
60
  end
49
61
  end
50
62
  end
@@ -54,7 +66,7 @@ end
54
66
 
55
67
  DependencyDetection.defer do
56
68
  @name = :rails3_controller
57
-
69
+
58
70
  depends_on do
59
71
  defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i == 3
60
72
  end
@@ -65,8 +77,8 @@ DependencyDetection.defer do
65
77
 
66
78
  executes do
67
79
  NewRelic::Agent.logger.debug 'Installing Rails 3 Controller instrumentation'
68
- end
69
-
80
+ end
81
+
70
82
  executes do
71
83
  class ActionController::Base
72
84
  include NewRelic::Agent::Instrumentation::ControllerInstrumentation
@@ -74,45 +86,91 @@ DependencyDetection.defer do
74
86
  end
75
87
  end
76
88
  end
77
-
78
89
  DependencyDetection.defer do
79
- @name = :rails3_view
80
-
90
+ @name = :rails30_view
91
+
81
92
  depends_on do
82
- defined?(ActionView) && defined?(ActionView::Base) && defined?(ActionView::Partials)
93
+ defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i == 3 && ::Rails::VERSION::MINOR.to_i == 0
94
+ end
95
+
96
+ depends_on do
97
+ !NewRelic::Control.instance['disable_view_instrumentation']
98
+ end
99
+
100
+ executes do
101
+ NewRelic::Agent.logger.debug 'Installing Rails 3.0 view instrumentation'
102
+ end
103
+
104
+ executes do
105
+ ActionView::Template.class_eval do
106
+ include NewRelic::Agent::MethodTracer
107
+ def render_with_newrelic(*args, &block)
108
+ options = if @virtual_path && @virtual_path.starts_with?('/') # file render
109
+ {:file => true }
110
+ else
111
+ {}
112
+ end
113
+ str = "View/#{NewRelic::Agent::Instrumentation::Rails3::ActionView::NewRelic.template_metric(@identifier, options)}/#{NewRelic::Agent::Instrumentation::Rails3::ActionView::NewRelic.render_type(@identifier)}"
114
+ trace_execution_scoped str do
115
+ render_without_newrelic(*args, &block)
116
+ end
117
+ end
118
+
119
+ alias_method :render_without_newrelic, :render
120
+ alias_method :render, :render_with_newrelic
121
+
122
+ end
83
123
  end
124
+ end
84
125
 
126
+ DependencyDetection.defer do
127
+ @name = :rails31_view
128
+
129
+ # We can't be sure that this wil work with future versions of Rails 3.
130
+ # Currently enabled for Rails 3.1 and 3.2
85
131
  depends_on do
86
- defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i == 3 && ::Rails::VERSION::MINOR.to_i >= 1
132
+ defined?(::Rails) && ::Rails::VERSION::MAJOR.to_i == 3 && ([1,2].member?(::Rails::VERSION::MINOR.to_i))
87
133
  end
88
134
 
89
135
  depends_on do
90
136
  !NewRelic::Control.instance['disable_view_instrumentation']
91
137
  end
92
-
138
+
93
139
  executes do
94
- NewRelic::Agent.logger.debug 'Installing Rails 3 view instrumentation'
140
+ NewRelic::Agent.logger.debug 'Installing Rails 3.1/3.2 view instrumentation'
95
141
  end
96
-
142
+
97
143
  executes do
98
- class ActionView::Base
99
- include NewRelic::Agent::Instrumentation::Rails3::ActionView
100
- end
101
- old_klass = ActionView::Partials::PartialRenderer
102
- ActionView::Partials::PartialRenderer = Class.new(old_klass)
103
- class ActionView::Partials::PartialRenderer
104
- def render_partial(*args)
105
- NewRelic::Agent.trace_execution_scoped "View/#{@template.virtual_path}/Partial" do
106
- super
144
+ ActionView::TemplateRenderer.class_eval do
145
+ include NewRelic::Agent::MethodTracer
146
+ # namespaced helper methods
147
+
148
+ def render_with_newrelic(context, options)
149
+ # This is needed for rails 3.2 compatibility
150
+ @details = extract_details(options) if respond_to? :extract_details
151
+ str = "View/#{NewRelic::Agent::Instrumentation::Rails3::ActionView::NewRelic.template_metric(determine_template(options).identifier, options)}/Rendering"
152
+ trace_execution_scoped str do
153
+ render_without_newrelic(context, options)
107
154
  end
108
155
  end
109
156
 
110
- def render_collection(*args)
111
- name = @template ? @template.virtual_path : "Mixed"
112
- NewRelic::Agent.trace_execution_scoped "View/#{name}/Collection" do
113
- super
157
+ alias_method :render_without_newrelic, :render
158
+ alias_method :render, :render_with_newrelic
159
+ end
160
+
161
+ ActionView::PartialRenderer.class_eval do
162
+ include NewRelic::Agent::MethodTracer
163
+
164
+ def render_with_newrelic(*args, &block)
165
+ setup(*args, &block)
166
+ str = "View/#{NewRelic::Agent::Instrumentation::Rails3::ActionView::NewRelic.template_metric(find_partial.identifier)}/Partial"
167
+ trace_execution_scoped str do
168
+ render_without_newrelic(*args, &block)
114
169
  end
115
170
  end
171
+
172
+ alias_method :render_without_newrelic, :render
173
+ alias_method :render, :render_with_newrelic
116
174
  end
117
175
  end
118
176
  end
@@ -4,7 +4,7 @@ require 'new_relic/agent/transaction_sample_builder'
4
4
 
5
5
  module NewRelic
6
6
  module Agent
7
-
7
+
8
8
  # This class contains the logic of sampling a transaction -
9
9
  # creation and modification of transaction samples
10
10
  class TransactionSampler
@@ -25,6 +25,7 @@ module NewRelic
25
25
  attr_reader :samples, :last_sample, :disabled
26
26
 
27
27
  def initialize
28
+
28
29
  # @samples is an array of recent samples up to @max_samples in
29
30
  # size - it's only used by developer mode
30
31
  @samples = []
@@ -49,14 +50,20 @@ module NewRelic
49
50
  # @segment_limit and @stack_trace_threshold come from the
50
51
  # configuration file, with built-in defaults that should
51
52
  # suffice for most customers
52
-
53
+
53
54
  # enable if config.fetch('enabled', true)
54
-
55
+
55
56
  @segment_limit = config.fetch('limit_segments', 4000)
56
57
  @stack_trace_threshold = config.fetch('stack_trace_threshold', 0.500).to_f
57
58
  @explain_threshold = config.fetch('explain_threshold', 0.5).to_f
58
59
  @explain_enabled = config.fetch('explain_enabled', true)
59
60
  @transaction_threshold = config.fetch('transation_threshold', 2.0)
61
+
62
+ # Configure the sample storage policy. Create a list of methods to be called.
63
+ @store_sampler_methods = [ :store_random_sample, :store_slowest_sample ]
64
+ if NewRelic::Control.instance.developer_mode?
65
+ @store_sampler_methods << :store_sample_for_developer_mode
66
+ end
60
67
  end
61
68
 
62
69
  def config
@@ -180,13 +187,11 @@ module NewRelic
180
187
  # @samples array, and the @slowest_sample variable if it is
181
188
  # slower than the current occupant of that slot
182
189
  def store_sample(sample)
183
- store_random_sample(sample)
184
- store_sample_for_developer_mode(sample)
185
- store_slowest_sample(sample)
186
-
190
+ @store_sampler_methods.each{|sym| send sym, sample}
187
191
  if NewRelic::Agent::TransactionInfo.get.force_persist_sample?(sample)
188
192
  store_force_persist(sample)
189
193
  end
194
+
190
195
  end
191
196
 
192
197
  # Only active when random sampling is true - this is very rarely
@@ -197,7 +202,7 @@ module NewRelic
197
202
  @random_sample = sample
198
203
  end
199
204
  end
200
-
205
+
201
206
  def store_force_persist(sample)
202
207
  @force_persist << sample
203
208
 
@@ -347,7 +352,7 @@ module NewRelic
347
352
  end
348
353
  nil # don't assume this method returns anything
349
354
  end
350
-
355
+
351
356
  def add_force_persist_to(result)
352
357
  result.concat(@force_persist)
353
358
  @force_persist = []
@@ -358,14 +363,14 @@ module NewRelic
358
363
  # sample returned will be the slowest sample among those
359
364
  # available during this harvest
360
365
  def add_samples_to(result, slow_threshold)
361
-
366
+
362
367
  # pull out force persist
363
368
  force_persist = result.select {|sample| sample.force_persist} || []
364
369
  result.reject! {|sample| sample.force_persist}
365
-
370
+
366
371
  force_persist.each {|sample| store_force_persist(sample)}
367
-
368
-
372
+
373
+
369
374
  # Now get the slowest sample
370
375
  if @slowest_sample && @slowest_sample.duration >= slow_threshold
371
376
  result << @slowest_sample
@@ -374,10 +379,10 @@ module NewRelic
374
379
  result.compact!
375
380
  result = result.sort_by { |x| x.duration }
376
381
  result = result[-1..-1] || [] # take the slowest sample
377
-
382
+
378
383
  add_random_sample_to(result)
379
384
  add_force_persist_to(result)
380
-
385
+
381
386
  result.uniq
382
387
  end
383
388
 
@@ -388,26 +393,26 @@ module NewRelic
388
393
  def harvest(previous = [], slow_threshold = 2.0)
389
394
  return [] if disabled
390
395
  result = Array(previous)
391
-
396
+
392
397
  @samples_lock.synchronize do
393
398
  result = add_samples_to(result, slow_threshold)
394
-
399
+
395
400
  # clear previous transaction samples
396
401
  @slowest_sample = nil
397
402
  @random_sample = nil
398
403
  @last_sample = nil
399
404
  end
400
-
405
+
401
406
  # Clamp the number of TTs we'll keep in memory and send
402
407
  #
403
408
  result = clamp_number_tts(result, 20) if result.length > 20
404
-
409
+
405
410
  # Truncate the samples at 2100 segments. The UI will clamp them at 2000 segments anyway.
406
411
  # This will save us memory and bandwidth.
407
412
  result.each { |sample| sample.truncate(@segment_limit) }
408
413
  result
409
414
  end
410
-
415
+
411
416
  # JON - THIS CODE NEEDS A UNIT TEST
412
417
  def clamp_number_tts(tts, limit)
413
418
  tts.sort! do |a,b|
@@ -420,9 +425,9 @@ module NewRelic
420
425
  else
421
426
  b.duration <=> a.duration
422
427
  end
423
- end
424
-
425
- tts[0..(limit-1)]
428
+ end
429
+
430
+ tts[0..(limit-1)]
426
431
  end
427
432
 
428
433
  # reset samples without rebooting the web server
@@ -8,18 +8,20 @@ module NewRelic
8
8
  # strings
9
9
  def normalize_params(params)
10
10
  case params
11
- when Symbol, FalseClass, TrueClass, nil
12
- params
13
- when Numeric
14
- truncate(params.to_s)
15
- when String
16
- truncate(params)
17
11
  when Hash
12
+ # optimize for empty hash since that is often what this is called with.
13
+ return params if params.empty?
18
14
  new_params = {}
19
15
  params.each do | key, value |
20
16
  new_params[truncate(normalize_params(key),64)] = normalize_params(value)
21
17
  end
22
18
  new_params
19
+ when Symbol, FalseClass, TrueClass, nil
20
+ params
21
+ when Numeric
22
+ truncate(params.to_s)
23
+ when String
24
+ truncate(params)
23
25
  when Array
24
26
  params.first(DEFAULT_ARRAY_TRUNCATION_SIZE).map{|item| normalize_params(item)}
25
27
  else
@@ -85,7 +85,7 @@ module NewRelic
85
85
 
86
86
  def apdex_t
87
87
  # Always initialized with a default
88
- fetch('apdex_t').to_f
88
+ @apdex_t_float ||= fetch('apdex_t').to_f
89
89
  end
90
90
 
91
91
  def license_key
@@ -15,7 +15,7 @@ module NewRelic
15
15
  @@start_time = Time.now
16
16
 
17
17
  include TransactionAnalysis
18
-
18
+
19
19
  def initialize(time = Time.now.to_f, sample_id = nil)
20
20
  @sample_id = sample_id || object_id
21
21
  @start_time = time
@@ -30,7 +30,7 @@ module NewRelic
30
30
  def count_segments
31
31
  @segment_count
32
32
  end
33
-
33
+
34
34
  # Truncates the transaction sample to a maximum length determined
35
35
  # by the passed-in parameter. Operates recursively on the entire
36
36
  # tree of transaction segments in a depth-first manner
@@ -39,7 +39,13 @@ module NewRelic
39
39
  @root_segment.truncate(max + 1)
40
40
  @segment_count = max
41
41
  end
42
-
42
+
43
+ # makes sure that the parameter cache for segment count is set to
44
+ # the correct value
45
+ def ensure_segment_count_set(count)
46
+ params[:segment_count] ||= count
47
+ end
48
+
43
49
  # offset from start of app
44
50
  def timestamp
45
51
  @start_time - @@start_time.to_f
@@ -74,7 +80,7 @@ module NewRelic
74
80
  def duration
75
81
  root_segment.duration
76
82
  end
77
-
83
+
78
84
  # Iterates recursively over each segment in the entire transaction
79
85
  # sample tree
80
86
  def each_segment(&block)
@@ -90,7 +96,7 @@ module NewRelic
90
96
  def to_s_compact
91
97
  @root_segment.to_s_compact
92
98
  end
93
-
99
+
94
100
  # Searches the tree recursively for the segment with the given
95
101
  # id. note that this is an internal id, not an ActiveRecord id
96
102
  def find_segment(id)
@@ -168,11 +174,19 @@ module NewRelic
168
174
  end
169
175
 
170
176
  private
171
-
177
+
178
+
179
+
180
+ HEX_DIGITS = (0..15).map{|i| i.to_s(16)}
181
+ # generate a random 64 bit uuid
172
182
  def generate_guid
173
- (0..15).to_a.map{|a| rand(16).to_s(16)}.join # a 64 bit random GUID
183
+ guid = ''
184
+ HEX_DIGITS.each do |a|
185
+ guid << HEX_DIGITS[rand(16)]
186
+ end
187
+ guid
174
188
  end
175
-
189
+
176
190
  # This is badly in need of refactoring
177
191
  def build_segment_with_omissions(new_sample, time_delta, source_segment, target_segment, regex)
178
192
  source_segment.called_segments.each do |source_called_segment|
@@ -225,7 +239,7 @@ module NewRelic
225
239
  source_called_segment.duration > options[:explain_sql].to_f
226
240
  target_called_segment[:explain_plan] = source_called_segment.explain_sql
227
241
  end
228
-
242
+
229
243
  target_called_segment[:sql] = case options[:record_sql]
230
244
  when :raw then v
231
245
  when :obfuscated then NewRelic::Agent::Database.obfuscate_sql(v)
@@ -3,8 +3,8 @@ module NewRelic
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 3
5
5
  MINOR = 3
6
- TINY = 3
7
- BUILD = nil # Set to nil for a release, 'beta1', 'alpha', etc for prerelease builds
6
+ TINY = 4
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
 
@@ -5,14 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "newrelic_rpm"
8
- s.version = "3.3.3"
8
+ s.version = "3.3.4.beta1"
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 = "2012-03-28"
12
+ s.date = "2012-04-02"
13
13
  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
14
  s.email = "support@newrelic.com"
15
- s.executables = ["mongrel_rpm", "newrelic", "newrelic_cmd"]
15
+ s.executables = ["newrelic_cmd", "mongrel_rpm", "newrelic"]
16
16
  s.extra_rdoc_files = [
17
17
  "CHANGELOG",
18
18
  "LICENSE",
@@ -247,7 +247,8 @@ class NewRelic::Agent::TransactionSamplerTest < Test::Unit::TestCase
247
247
  end
248
248
 
249
249
  def test_store_sample_for_developer_mode_no_dev
250
- NewRelic::Control.instance.expects(:developer_mode?).returns(false)
250
+ NewRelic::Control.instance.stubs(:developer_mode?).returns(false)
251
+ @sampler.configure!
251
252
  sample = mock('sample')
252
253
  @sampler.store_sample_for_developer_mode(sample)
253
254
  assert_equal([], @sampler.instance_variable_get('@samples'))
@@ -8,17 +8,21 @@ module NewRelic
8
8
  # Load in the parsers classes in the plugin:
9
9
  Dir[File.join(File.dirname(__FILE__), "metric_parser", "*.rb")].each { | file | require file }
10
10
 
11
+ def self.category_is_constant(category)
12
+ @string_constants ||= (
13
+ NewRelic::MetricParser.constants.inject({}){|memo, const| memo[const.to_s] = true; memo}
14
+ )
15
+ @string_constants[category]
16
+ end
11
17
  # return a string that is parsable via the Metric parser APIs
12
18
  def self.for_metric_named(s)
13
19
  category = (s =~ /^([^\/]*)/) && $1
14
20
  parser_class = self
15
- if category
16
- if NewRelic::MetricParser.constants.map(&:to_s).include?(category)
17
- begin
18
- parser_class = NewRelic::MetricParser.const_get(category)
19
- rescue
20
- nil
21
- end
21
+ if category_is_constant(category)
22
+ begin
23
+ parser_class = NewRelic::MetricParser.const_get(category)
24
+ rescue
25
+ nil
22
26
  end
23
27
  end
24
28
  parser_class.new s
@@ -77,9 +81,12 @@ module NewRelic
77
81
  segments[0]
78
82
  end
79
83
 
84
+
85
+ EMPTY_SEGMENTS_HASH = [].freeze
86
+ SEGMENTS_CACHE = {}
80
87
  def segments
81
- return [] if !name
82
- @segments ||= name.split(SEPARATOR).freeze
88
+ name || (return EMPTY_SEGMENTS_HASH)
89
+ SEGMENTS_CACHE[name] ||= name.split(SEPARATOR).freeze
83
90
  end
84
91
 
85
92
  # --
metadata CHANGED
@@ -1,15 +1,10 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: newrelic_rpm
3
- version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease:
6
- segments:
7
- - 3
8
- - 3
9
- - 3
10
- version: 3.3.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.3.4.beta1
5
+ prerelease: 6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Bill Kayser
14
9
  - Jon Guymon
15
10
  - Justin George
@@ -17,72 +12,66 @@ authors:
17
12
  autorequire:
18
13
  bindir: bin
19
14
  cert_chain: []
20
-
21
- date: 2012-03-28 00:00:00 Z
22
- dependencies:
23
- - !ruby/object:Gem::Dependency
15
+ date: 2012-04-02 00:00:00.000000000Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
24
18
  name: jeweler
25
- prerelease: false
26
- requirement: &id001 !ruby/object:Gem::Requirement
19
+ requirement: &70304829042800 !ruby/object:Gem::Requirement
27
20
  none: false
28
- requirements:
29
- - - ">="
30
- - !ruby/object:Gem::Version
31
- hash: 3
32
- segments:
33
- - 0
34
- version: "0"
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
35
25
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: mocha
39
26
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ version_requirements: *70304829042800
28
+ - !ruby/object:Gem::Dependency
29
+ name: mocha
30
+ requirement: &70304829042320 !ruby/object:Gem::Requirement
41
31
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 3
46
- segments:
47
- - 0
48
- version: "0"
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
49
36
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: shoulda
53
37
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ version_requirements: *70304829042320
39
+ - !ruby/object:Gem::Dependency
40
+ name: shoulda
41
+ requirement: &70304829041840 !ruby/object:Gem::Requirement
55
42
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
63
47
  type: :development
64
- version_requirements: *id003
65
- description: |
66
- New Relic is a performance management system, developed by New Relic,
48
+ prerelease: false
49
+ version_requirements: *70304829041840
50
+ description: ! 'New Relic is a performance management system, developed by New Relic,
51
+
67
52
  Inc (http://www.newrelic.com). New Relic provides you with deep
53
+
68
54
  information about the performance of your web application as it runs
55
+
69
56
  in production. The New Relic Ruby Agent is dual-purposed as a either a
57
+
70
58
  Gem or plugin, hosted on
59
+
71
60
  http://github.com/newrelic/rpm/
72
61
 
62
+ '
73
63
  email: support@newrelic.com
74
- executables:
64
+ executables:
65
+ - newrelic_cmd
75
66
  - mongrel_rpm
76
67
  - newrelic
77
- - newrelic_cmd
78
68
  extensions: []
79
-
80
- extra_rdoc_files:
69
+ extra_rdoc_files:
81
70
  - CHANGELOG
82
71
  - LICENSE
83
72
  - README.rdoc
84
73
  - newrelic.yml
85
- files:
74
+ files:
86
75
  - CHANGELOG
87
76
  - LICENSE
88
77
  - README.rdoc
@@ -348,60 +337,38 @@ files:
348
337
  - vendor/gems/metric_parser-0.1.0.pre1/lib/new_relic/metric_parser/web_transaction.rb
349
338
  homepage: http://www.github.com/newrelic/rpm
350
339
  licenses: []
351
-
352
- post_install_message: |
353
-
354
- PLEASE NOTE:
355
-
356
- Developer Mode is now a Rack middleware.
357
-
358
- Developer Mode is no longer available in Rails 2.1 and earlier.
359
- However, starting in version 2.12 you can use Developer Mode in any
360
- Rack based framework, in addition to Rails. To install developer mode
361
- in a non-Rails application, just add NewRelic::Rack::DeveloperMode to
362
- your middleware stack.
363
-
364
- If you are using JRuby, we recommend using at least version 1.4 or
365
- later because of issues with the implementation of the timeout library.
366
-
367
- Refer to the README.md file for more information.
368
-
369
- Please see http://github.com/newrelic/rpm/blob/master/CHANGELOG
370
- for a complete description of the features and enhancements available
371
- in version 3.3 of the Ruby Agent.
372
-
373
-
374
- rdoc_options:
340
+ post_install_message: ! "\nPLEASE NOTE:\n\nDeveloper Mode is now a Rack middleware.\n\nDeveloper
341
+ Mode is no longer available in Rails 2.1 and earlier.\nHowever, starting in version
342
+ 2.12 you can use Developer Mode in any\nRack based framework, in addition to Rails.
343
+ \ To install developer mode\nin a non-Rails application, just add NewRelic::Rack::DeveloperMode
344
+ to\nyour middleware stack.\n\nIf you are using JRuby, we recommend using at least
345
+ version 1.4 or \nlater because of issues with the implementation of the timeout
346
+ library.\n\nRefer to the README.md file for more information.\n\nPlease see http://github.com/newrelic/rpm/blob/master/CHANGELOG\nfor
347
+ a complete description of the features and enhancements available\nin version 3.3
348
+ of the Ruby Agent.\n \n"
349
+ rdoc_options:
375
350
  - --line-numbers
376
351
  - --inline-source
377
352
  - --title
378
353
  - New Relic Ruby Agent
379
- require_paths:
354
+ require_paths:
380
355
  - lib
381
- required_ruby_version: !ruby/object:Gem::Requirement
356
+ required_ruby_version: !ruby/object:Gem::Requirement
382
357
  none: false
383
- requirements:
384
- - - ">="
385
- - !ruby/object:Gem::Version
386
- hash: 3
387
- segments:
388
- - 0
389
- version: "0"
390
- required_rubygems_version: !ruby/object:Gem::Requirement
358
+ requirements:
359
+ - - ! '>='
360
+ - !ruby/object:Gem::Version
361
+ version: '0'
362
+ required_rubygems_version: !ruby/object:Gem::Requirement
391
363
  none: false
392
- requirements:
393
- - - ">="
394
- - !ruby/object:Gem::Version
395
- hash: 3
396
- segments:
397
- - 0
398
- version: "0"
364
+ requirements:
365
+ - - ! '>='
366
+ - !ruby/object:Gem::Version
367
+ version: '0'
399
368
  requirements: []
400
-
401
369
  rubyforge_project:
402
- rubygems_version: 1.8.15
370
+ rubygems_version: 1.8.10
403
371
  signing_key:
404
372
  specification_version: 3
405
373
  summary: New Relic Ruby Agent
406
374
  test_files: []
407
-