rpm_contrib 2.1.5.beta → 2.1.6.beta1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,4 +1,4 @@
1
- * Version 2.1.5.beta
1
+ * Version 2.1.5
2
2
 
3
3
  Changed the resque detection so it does not depend on the load
4
4
  order of resque => rpm_contrib => newrelic_rpm. The gems can be
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ require "bundler/setup"
2
3
  require 'rake'
3
4
  # See http://www.rubygems.org/read/chapter/20
4
5
 
@@ -21,7 +22,7 @@ begin
21
22
  gem.description = DESCRIPTION
22
23
  gem.email = "support@newrelic.com"
23
24
  gem.homepage = "http://github.com/newrelic/rpm_contrib"
24
- gem.author = "Bill Kayser"
25
+ gem.authors = [ "Bill Kayser", "Jon Guymon" ]
25
26
  gem.add_dependency 'newrelic_rpm', '>=3.1.1'
26
27
  gem.version = version
27
28
  gem.files = FileList['LICENSE', 'README*', 'lib/**/*.rb', 'bin/*', '[A-Z]*', 'test/**/*'].to_a
@@ -0,0 +1,11 @@
1
+ if NewRelic::VERSION::STRING < '3.2.0'
2
+ module DependencyDetection
3
+ def self.dependency_by_name(name)
4
+ @@items.find {|i| i.name == name }
5
+ end
6
+
7
+ class Dependent
8
+ attr_reader :name
9
+ end
10
+ end
11
+ end
@@ -3,9 +3,15 @@
3
3
  # Blue-Dog-Archolite @ GitHub
4
4
 
5
5
  DependencyDetection.defer do
6
+ @name = :active_mq
7
+
6
8
  depends_on do
7
9
  defined?(::ActiveMessaging::Processor) && !NewRelic::Control.instance['disable_active_mq']
8
10
  end
11
+
12
+ executes do
13
+ NewRelic::Agent.logger.debug 'Installing ActiveMQ instrumentation'
14
+ end
9
15
 
10
16
  executes do
11
17
  ::ActiveMessaging::Processor.class_eval do
@@ -1,12 +1,17 @@
1
1
  # AWS Instrumentation by Brian Doll of New Relic
2
2
  DependencyDetection.defer do
3
-
3
+ @name = :aws
4
+
4
5
  depends_on do
5
6
  defined?(::AWS::S3) && !NewRelic::Control.instance['disable_aws-s3']
6
7
  end
7
-
8
+
8
9
  executes do
10
+ NewRelic::Agent.logger.debug 'Installing AWS instrumentation'
11
+ end
9
12
 
13
+
14
+ executes do
10
15
  # Instrument connections to the AWS-S3 service
11
16
  ::AWS::S3::Connection::Management::ClassMethods.module_eval do
12
17
  add_method_tracer :establish_connection!, 'AWS-S3/establish_connection!'
@@ -1,7 +1,14 @@
1
1
  DependencyDetection.defer do
2
+ @name = :cassandra
3
+
2
4
  depends_on do
3
5
  defined?(::Cassandra) && !NewRelic::Control.instance['disable_cassandra_instrumentation']
4
6
  end
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Cassandra instrumentation'
10
+ end
11
+
5
12
  executes do
6
13
  ::Cassandra.class_eval do
7
14
  add_method_tracer :insert, 'Database/Cassandra/insert'
@@ -1,8 +1,14 @@
1
1
  DependencyDetection.defer do
2
+ @name = :crack_json
3
+
2
4
  depends_on do
3
5
  defined?(::Crack::JSON) && !NewRelic::Control.instance['disable_crack']
4
6
  end
5
-
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Crack::JSON instrumentation'
10
+ end
11
+
6
12
  executes do
7
13
  ::Crack::JSON.class_eval do
8
14
  class << self
@@ -14,10 +20,16 @@ DependencyDetection.defer do
14
20
  end
15
21
 
16
22
  DependencyDetection.defer do
23
+ @name = :crack_xml
24
+
17
25
  depends_on do
18
26
  defined?(::Crack::XML) && !NewRelic::Control.instance['disable_crack']
19
27
  end
20
-
28
+
29
+ executes do
30
+ NewRelic::Agent.logger.debug 'Installing Crack::XML instrumentation'
31
+ end
32
+
21
33
  executes do
22
34
  ::Crack::XML.class_eval do
23
35
  class << self
@@ -1,9 +1,14 @@
1
1
  DependencyDetection.defer do
2
-
2
+ @name = :curb
3
+
3
4
  depends_on do
4
5
  defined?(::Curl) and not NewRelic::Control.instance['disable_curb']
5
6
  end
6
-
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Curb instrumentation'
10
+ end
11
+
7
12
  executes do
8
13
  ::Curl::Easy.class_eval do
9
14
  def host
@@ -1,10 +1,16 @@
1
1
  # == Elastic Search Instrumentation
2
2
  #
3
3
  DependencyDetection.defer do
4
+ @name = :elastic_search
5
+
4
6
  depends_on do
5
7
  defined?(::ElasticSearch::Client) && !NewRelic::Control.instance['disable_elastic_search_instrumentation']
6
8
  end
7
-
9
+
10
+ executes do
11
+ NewRelic::Agent.logger.debug 'Installing Elastic Search instrumentation'
12
+ end
13
+
8
14
  executes do
9
15
  ::ElasticSearch::Client.class_eval do
10
16
  add_method_tracer :index, 'ActiveRecord/ElasticSearch/index'
@@ -1,10 +1,15 @@
1
1
  # Mongo Instrumentation contributed by Alexey Palazhchenko
2
2
  DependencyDetection.defer do
3
-
3
+ @name = :mongodb
4
+
4
5
  depends_on do
5
6
  defined?(::Mongo) and not NewRelic::Control.instance['disable_mongodb']
6
7
  end
7
8
 
9
+ executes do
10
+ NewRelic::Agent.logger.debug 'Installing MongoDB instrumentation'
11
+ end
12
+
8
13
  executes do
9
14
  ::Mongo::Connection.class_eval do
10
15
  include NewRelic::Agent::MethodTracer
@@ -1,8 +1,14 @@
1
1
  DependencyDetection.defer do
2
+ @name = :paperclip
3
+
2
4
  depends_on do
3
5
  defined?(::Paperclip) && !NewRelic::Control.instance['disable_paperclip']
4
6
  end
5
-
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Paperclip instrumentation'
10
+ end
11
+
6
12
  executes do
7
13
  ::Paperclip::Attachment.class_eval do
8
14
  add_method_tracer :save, 'Paperclip/#{name}/save'
@@ -1,11 +1,16 @@
1
1
  # Redis instrumentation contributed by Ashley Martens of ngmoco
2
2
  #
3
3
  DependencyDetection.defer do
4
+ @name = :redis
4
5
 
5
6
  depends_on do
6
7
  defined?(::Redis) && !NewRelic::Control.instance['disable_redis']
7
8
  end
8
9
 
10
+ executes do
11
+ NewRelic::Agent.logger.debug 'Installing Redis instrumentation'
12
+ end
13
+
9
14
  executes do
10
15
  ::Redis::Client.class_eval do
11
16
 
@@ -1,60 +1,60 @@
1
- DependencyDetection.defer do
2
- depends_on do
3
- defined?(::Resque)
1
+ require 'rpm_contrib/language_support'
2
+
3
+ module Resque
4
+ module Plugins
5
+ module NewRelicInstrumentation
6
+ include NewRelic::Agent::Instrumentation::ControllerInstrumentation
7
+
8
+ def around_perform_with_monitoring(*args)
9
+ begin
10
+ perform_action_with_newrelic_trace(:name => 'perform',
11
+ :class_name => self.name,
12
+ :category => 'OtherTransaction/ResqueJob') do
13
+ yield(*args)
14
+ end
15
+ ensure
16
+ NewRelic::Agent.shutdown if RPMContrib::LanguageSupport.can_fork?
17
+ end
18
+ end
19
+ end
4
20
  end
5
- executes do
6
- module Resque::Plugins
7
- # The plugin definition is a no-op but left in empty for backward compatibility.
8
- # We were using the plugin to install instrumentation but it required you either
9
- # extend Resque::Job or extend this module. Using the method chaining approach
10
- # means you don't have to make any modifications to your job classes.
11
- module NewRelicInstrumentation; end
21
+ end
22
+
23
+ module RPMContrib::Instrumentation::ResqueInstrumentationInstaller
24
+ def payload_class
25
+ klass = super
26
+ klass.instance_eval do
27
+ extend ::Resque::Plugins::NewRelicInstrumentation
12
28
  end
13
29
  end
14
30
  end
15
31
 
16
32
  DependencyDetection.defer do
33
+ @name = :resque
34
+
17
35
  depends_on do
18
36
  defined?(::Resque::Job) and not NewRelic::Control.instance['disable_resque']
19
37
  end
20
38
 
39
+ executes do
40
+ NewRelic::Agent.logger.debug 'Installing Resque instrumentation'
41
+ end
42
+
21
43
  executes do
22
44
  # == Resque Instrumentation
23
45
  #
24
46
  # Installs a hook to ensure the agent starts manually when the worker
25
47
  # starts and also adds the tracer to the process method which executes
26
48
  # in the forked task.
27
-
28
- # Resque also works in a non forking mode when fork is not supported
29
- begin
30
- # IronRuby/JRuby don't support `Kernel.fork` yet
31
- if Kernel.respond_to?(:fork)
32
- Kernel.fork{exit!}
33
- else
34
- raise NotImplementedError
35
- end
36
- rescue NotImplementedError
37
- $rpm_cant_fork = true
38
- end
39
-
40
49
  ::Resque::Job.class_eval do
41
- include NewRelic::Agent::Instrumentation::ControllerInstrumentation
42
- old_perform_method = instance_method(:perform)
43
- define_method(:perform) do
44
- class_name = (payload_class ||self.class).name
45
- perform_action_with_newrelic_trace(:name => 'perform', :class_name => class_name,
46
- :category => 'OtherTransaction/ResqueJob') do
47
- old_perform_method.bind(self).call
48
- end
49
- # If we aren't doing true forks, then the shutdown message would end up
50
- # shutting down the agent in the parent which would cause us to stop sending
51
- # data. Data is not sent from the child.
52
- NewRelic::Agent.shutdown unless $rpm_cant_fork
50
+ def self.new(*args)
51
+ super(*args).extend RPMContrib::Instrumentation::ResqueInstrumentationInstaller
53
52
  end
54
53
  end
55
54
 
56
55
  ::Resque.before_first_fork do
57
- NewRelic::Agent.manual_start(:dispatcher => :resque, :sync_startup => true)
56
+ NewRelic::Agent.manual_start(:dispatcher => :resque,
57
+ :sync_startup => true)
58
58
  end
59
59
 
60
60
  ::Resque.after_fork do
@@ -1,8 +1,14 @@
1
1
  DependencyDetection.defer do
2
+ @name = :sinatra_view
3
+
2
4
  depends_on do
3
5
  defined?(::Sinatra::Base) and not NewRelic::Control.instance['disable_sinatra_template']
4
6
  end
5
-
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Sinatra view instrumentation'
10
+ end
11
+
6
12
  executes do
7
13
  ::Sinatra::Base.class_eval do
8
14
  def render_with_newrelic_trace(*args, &block)
@@ -10,7 +16,7 @@ DependencyDetection.defer do
10
16
  return render_without_newrelic_trace(*args, &block) if file == "= yield"
11
17
 
12
18
  file = "Proc" if file.is_a?(Proc)
13
- metrics = ["Sinatra/#{engine}/#{file}"]
19
+ metrics = ["View/#{engine}/#{file}/Rendering"]
14
20
 
15
21
  self.class.trace_execution_scoped metrics do
16
22
  render_without_newrelic_trace(*args, &block)
@@ -1,9 +1,14 @@
1
1
  DependencyDetection.defer do
2
-
2
+ @name = :typhoeus
3
+
3
4
  depends_on do
4
5
  defined?(::Typhoeus) and not ::NewRelic::Control.instance['disable_typhoeus']
5
6
  end
6
-
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Typhoeus instrumentation'
10
+ end
11
+
7
12
  executes do
8
13
  require 'uri'
9
14
  ::Typhoeus::Request.instance_eval do
@@ -1,9 +1,14 @@
1
1
  DependencyDetection.defer do
2
-
2
+ @name = :ultrasphinx
3
+
3
4
  depends_on do
4
5
  defined?(::Ultrasphinx) and not ::NewRelic::Control.instance['disable_ultrasphinx']
5
6
  end
6
-
7
+
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Ultrasphinx instrumentation'
10
+ end
11
+
7
12
  executes do
8
13
  class ::Ultrasphinx::Search
9
14
  include NewRelic::Agent::MethodTracer
@@ -1,13 +1,17 @@
1
1
  # Workling instrumentation contributed by Chad Ingram of Aurora Feint
2
2
  #
3
3
  DependencyDetection.defer do
4
-
4
+ @name = :workling
5
+
5
6
  depends_on do
6
7
  defined?(::Workling) and not ::NewRelic::Control.instance['disable_workling']
7
8
  end
8
9
 
9
10
  executes do
10
-
11
+ NewRelic::Agent.logger.debug 'Installing Workling instrumentation'
12
+ end
13
+
14
+ executes do
11
15
  ::Workling::Base.class_eval do
12
16
  include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
13
17
  end
@@ -1,8 +1,14 @@
1
1
  DependencyDetection.defer do
2
+ @name = :yajl_parser
3
+
2
4
  depends_on do
3
5
  defined?(::Yajl::Parser) && !NewRelic::Control.instance['disable_yajl_instrumentation']
4
6
  end
5
7
 
8
+ executes do
9
+ NewRelic::Agent.logger.debug 'Installing Yajl::Parser instrumentation'
10
+ end
11
+
6
12
  executes do
7
13
  ::Yajl::Parser.class_eval do
8
14
  class << self
@@ -14,10 +20,16 @@ DependencyDetection.defer do
14
20
  end
15
21
 
16
22
  DependencyDetection.defer do
23
+ @name = :yajl_encoder
24
+
17
25
  depends_on do
18
26
  defined?(::Yajl::Encoder) && !NewRelic::Control.instance['disable_yajl_instrumentation']
19
27
  end
20
28
 
29
+ executes do
30
+ NewRelic::Agent.logger.debug 'Installing Yajl::Encoder instrumentation'
31
+ end
32
+
21
33
  executes do
22
34
  ::Yajl::Encoder.class_eval do
23
35
  class << self
@@ -0,0 +1,28 @@
1
+ module RPMContrib::LanguageSupport
2
+ extend self
3
+
4
+ @@forkable = nil
5
+
6
+ def can_fork?
7
+ # this is expensive to check, so we should only check once
8
+ return @@forkable if @@forkable != nil
9
+
10
+ if Process.respond_to?(:fork)
11
+ # if this is not 1.9.2 or higher, we have to make sure
12
+ @@forkable = ::RUBY_VERSION < '1.9.2' ? test_forkability : true
13
+ else
14
+ @@forkable = false
15
+ end
16
+
17
+ @@forkable
18
+ end
19
+
20
+ private
21
+
22
+ def test_forkability
23
+ Process.fork { exit! }
24
+ true
25
+ rescue NotImplementedError
26
+ false
27
+ end
28
+ end
data/lib/rpm_contrib.rb CHANGED
@@ -5,6 +5,7 @@ module RPMContrib; end
5
5
  require 'rpm_contrib/detection'
6
6
 
7
7
  require 'newrelic_rpm'
8
+ require 'rpm_contrib/agent_compatibility'
8
9
  require 'rpm_contrib/instrumentation'
9
10
 
10
11
  # Load all the Sampler class definitions. These will register
data/test/helper.rb CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'test/unit'
3
3
 
4
4
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
- #$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
6
 
7
7
  require File.expand_path("../../lib/rpm_contrib.rb", __FILE__)
8
8
 
@@ -0,0 +1,74 @@
1
+ require 'resque'
2
+ require 'mocha'
3
+ require File.expand_path(File.dirname(__FILE__) + "/helper")
4
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/rpm_contrib")
5
+
6
+ class ResqueTest < Test::Unit::TestCase
7
+ class ExtendoJorb < ::Resque::Job
8
+ def self.perform
9
+ true
10
+ end
11
+ end
12
+
13
+ class GoodJorb
14
+ def self.perform
15
+ true
16
+ end
17
+ end
18
+
19
+ class BadJorb
20
+ def self.perform
21
+ raise "I'm doing a bad jorb"
22
+ end
23
+ end
24
+
25
+ def setup
26
+ @worker = Resque::Worker.new(:test)
27
+ NewRelic::Agent.manual_start
28
+ @engine = NewRelic::Agent.instance.stats_engine
29
+ end
30
+
31
+ def teardown
32
+ @engine.clear_stats
33
+ end
34
+
35
+ def test_should_instrument_job_extending_from_resque_job
36
+ @worker.perform(Resque::Job.new(:test,
37
+ 'class' => 'ResqueTest::ExtendoJorb'))
38
+
39
+ metrics = [ 'OtherTransaction/all', 'OtherTransaction/ResqueJob/all',
40
+ 'OtherTransaction/ResqueJob/ResqueTest::ExtendoJorb/perform' ]
41
+ metrics.each do |metric|
42
+ assert(@engine.metrics.include?(metric),
43
+ "#{@engine.metrics.inspect} missing #{metric}")
44
+ end
45
+ assert !@engine.metrics.include?('Errors/all')
46
+ end
47
+
48
+ def test_should_instrument_poro_job
49
+ @worker.perform(Resque::Job.new(:test, 'class' => 'ResqueTest::GoodJorb'))
50
+
51
+ metrics = [ 'OtherTransaction/all', 'OtherTransaction/ResqueJob/all',
52
+ 'OtherTransaction/ResqueJob/ResqueTest::GoodJorb/perform' ]
53
+ metrics.each do |metric|
54
+ assert(@engine.metrics.include?(metric),
55
+ "#{@engine.metrics.inspect} missing #{metric}")
56
+ end
57
+ assert !@engine.metrics.include?('Errors/all')
58
+ end
59
+
60
+ def test_should_collect_job_errors
61
+ begin
62
+ @worker.perform(Resque::Job.new(:test, 'class' => 'ResqueTest::BadJorb'))
63
+ rescue
64
+ end
65
+
66
+ metrics = [ 'OtherTransaction/all', 'OtherTransaction/ResqueJob/all',
67
+ 'OtherTransaction/ResqueJob/ResqueTest::BadJorb/perform',
68
+ 'Errors/all' ]
69
+ metrics.each do |metric|
70
+ assert(@engine.metrics.include?(metric),
71
+ "#{@engine.metrics.inspect} missing #{metric}")
72
+ end
73
+ end
74
+ end
metadata CHANGED
@@ -1,60 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rpm_contrib
3
- version: !ruby/object:Gem::Version
4
- hash: 31098237
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.6.beta1
5
5
  prerelease: 6
6
- segments:
7
- - 2
8
- - 1
9
- - 5
10
- - beta
11
- version: 2.1.5.beta
12
6
  platform: ruby
13
- authors:
7
+ authors:
14
8
  - Bill Kayser
9
+ - Jon Guymon
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2011-09-08 00:00:00 -07:00
13
+ date: 2011-09-23 00:00:00.000000000 -07:00
20
14
  default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
23
17
  name: newrelic_rpm
18
+ requirement: &2153791500 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: 3.1.1
24
+ type: :runtime
24
25
  prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
26
+ version_requirements: *2153791500
27
+ - !ruby/object:Gem::Dependency
28
+ name: newrelic_rpm
29
+ requirement: &2153790140 !ruby/object:Gem::Requirement
26
30
  none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 1
31
- segments:
32
- - 3
33
- - 1
34
- - 1
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
35
34
  version: 3.1.1
36
35
  type: :runtime
37
- version_requirements: *id001
38
- description: |
39
- Community contributed instrumentation for various frameworks based on
36
+ prerelease: false
37
+ version_requirements: *2153790140
38
+ description: ! 'Community contributed instrumentation for various frameworks based
39
+ on
40
+
40
41
  the New Relic Ruby monitoring gem newrelic_rpm.
41
42
 
43
+ '
42
44
  email: support@newrelic.com
43
45
  executables: []
44
-
45
46
  extensions: []
46
-
47
- extra_rdoc_files:
47
+ extra_rdoc_files:
48
48
  - CHANGELOG
49
49
  - LICENSE
50
50
  - README.md
51
- files:
51
+ files:
52
52
  - CHANGELOG
53
53
  - LICENSE
54
54
  - README.md
55
55
  - Rakefile
56
56
  - lib/new_relic/control/camping.rb
57
57
  - lib/rpm_contrib.rb
58
+ - lib/rpm_contrib/agent_compatibility.rb
58
59
  - lib/rpm_contrib/detection.rb
59
60
  - lib/rpm_contrib/detection/camping.rb
60
61
  - lib/rpm_contrib/instrumentation.rb
@@ -74,52 +75,43 @@ files:
74
75
  - lib/rpm_contrib/instrumentation/ultrasphinx.rb
75
76
  - lib/rpm_contrib/instrumentation/workling.rb
76
77
  - lib/rpm_contrib/instrumentation/yajl.rb
78
+ - lib/rpm_contrib/language_support.rb
77
79
  - lib/rpm_contrib/samplers.rb
78
80
  - test/helper.rb
79
81
  - test/schema.rb
80
82
  - test/test_curb.rb
81
83
  - test/test_redis.rb
84
+ - test/test_resque.rb
82
85
  - test/test_workling.rb
83
86
  has_rdoc: true
84
87
  homepage: http://github.com/newrelic/rpm_contrib
85
88
  licenses: []
86
-
87
89
  post_install_message:
88
- rdoc_options:
90
+ rdoc_options:
89
91
  - --line-numbers
90
92
  - --inline-source
91
93
  - --title
92
94
  - Contributed Instrumentation for New Relic RPM
93
95
  - -m
94
96
  - README.md
95
- require_paths:
97
+ require_paths:
96
98
  - lib
97
- required_ruby_version: !ruby/object:Gem::Requirement
99
+ required_ruby_version: !ruby/object:Gem::Requirement
98
100
  none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
- version: "0"
106
- required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
106
  none: false
108
- requirements:
109
- - - ">"
110
- - !ruby/object:Gem::Version
111
- hash: 25
112
- segments:
113
- - 1
114
- - 3
115
- - 1
116
- version: 1.3.1
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
117
111
  requirements: []
118
-
119
112
  rubyforge_project:
120
113
  rubygems_version: 1.6.2
121
114
  signing_key:
122
115
  specification_version: 3
123
116
  summary: Contributed Instrumentation for New Relic RPM
124
117
  test_files: []
125
-