rpm_contrib 2.1.5.beta → 2.1.6.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
-