staugaard-rpm_contrib 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,35 @@
1
+ * Version 1.0.7
2
+
3
+ Resque instrumentation now supports the resque-multi-job-forks plugin
4
+
5
+ * Version 1.0.6
6
+
7
+ Update newrelic dependency: depends on 2.11.1
8
+
9
+ * Version 1.0.5
10
+
11
+ Clear stats in forked resque jobs
12
+
13
+ * Version 1.0.4
14
+
15
+ Resque support
16
+
17
+ * Version 1.0.3
18
+
19
+ MongoDB instrumentation contributed by John Nunemaker
20
+
21
+ * Version 1.0.2
22
+
23
+ Improved Camping support
24
+
25
+ * Version 1.0.1
26
+
27
+ Removed DelayedJob, put back in core agent
28
+
29
+ * Version 1.0.0
30
+
31
+ Initial Release:
32
+ - Camping
33
+ - Authlogic
34
+ - DelayedJob
35
+ - Paperclip
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 New Relic, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,147 @@
1
+ # The RPM Contrib Gem
2
+
3
+ The `rpm_contrib` gem contains instrumentation for the New Relic RPM
4
+ agent contributed by the community of RPM users. It requires the RPM
5
+ Agent to run.
6
+
7
+ To use the contrib gem, install the `rpm_contrib` gem from gemcutter.
8
+ It will also install the required version of the `newrelic_rpm` gem if
9
+ it's not already installed.
10
+
11
+ For Rails 2.1 and later, add this dependency to your in your
12
+ environment.rb:
13
+
14
+ config.gem 'rpm_contrib'
15
+
16
+ For other frameworks, make sure you load rubygems if it isn't already,
17
+ then just require the contrib gem:
18
+
19
+ require 'rubygems'
20
+ require 'rpm_contrib'
21
+
22
+ When you load the rpm_contrib gem, the `newrelic_rpm` gem will also be
23
+ initialized. No need for a separate require statement for
24
+ `newrelic_rpm`. The `rpm_contrib` gem must be loaded before the
25
+ `newrelic_rpm` gem initializes.
26
+
27
+ # Supported Frameworks
28
+
29
+ A number of frameworks are supported in the contrib gem. They are all
30
+ turned on by default but you can add settings to your newrelic.yml to
31
+ disable any of them.
32
+
33
+ ### Camping
34
+
35
+ ### Paperclip
36
+
37
+ ### Authlogic
38
+
39
+ ### MongoDB
40
+
41
+ ### Resque
42
+
43
+ To disable resque, add this to your newrelic.yml:
44
+
45
+ disable_resque: true
46
+
47
+
48
+ # How to Add Custom Instrumentation
49
+
50
+ We encourage contributions to this project and will provide whatever
51
+ assistance we can to those wishing to develop instrumentation for
52
+ other open source Ruby libraries.
53
+
54
+ When adding instrumentation to this gem, be sure and get familiar with the
55
+ [RPM Agent API](http://newrelic.github.com/rpm/classes/NewRelic/Agent.html)
56
+ and contact support@newrelic.com with any questions.
57
+
58
+ There are several extension points in the agent you can take advantage of
59
+ with this gem.
60
+
61
+ * Custom tracers which measure methods and give visibility to
62
+ otherwise unmeasured libraries.
63
+ * Samplers which sample some value about once a minute.
64
+ * Dispatcher support for web request handlers which would otherwise be undetected.
65
+ In order for the agent to turn on in 'auto' mode it needs to discover a
66
+ web dispatcher, or be [started manually](http://support.newrelic.com/faqs/general/manual-start).
67
+ * Framework support, for alternatives to Rails like Camping or Ramaze
68
+
69
+ ## Custom Tracers
70
+
71
+ Custom tracers for frameworks should be added to the `lib/rpm_contrib/instrumentation`
72
+ directory. These files are loaded at the time the Agent starts. **They will not
73
+ be loaded if the Agent does not start up.**
74
+
75
+ It is important that you wrap any instrumentation with the checks necessary
76
+ to determine if the code being instrumented is loaded. You can't add code to the
77
+ contrib gem that will break when run in any other context besides yours.
78
+
79
+
80
+ For details on how to define custom tracers, refer to the [support documentation on adding
81
+ custom tracers](http://support.newrelic.com/faqs/docs/custom-metric-collection). You
82
+ can also get detailed information on the API from the
83
+ [Agent method tracing rdocs](http://newrelic.github.com/rpm/classes/NewRelic/Agent/MethodTracer.html),
84
+ especially the [add_method_tracer](http://newrelic.github.com/rpm/classes/NewRelic/Agent/MethodTracer/ClassMethods.html)
85
+ docs.
86
+
87
+ A good example can be found in `lib/rpm_contrib/instrumentation/paperclip.rb`.
88
+
89
+ ## Samplers
90
+
91
+ You can add samplers which will record metrics approximately once a minute. Samplers
92
+ are useful for capturing generic instrumentation for display in
93
+ [custom views](http://support.newrelic.com/faqs/docs/custom-dashboard-specification).
94
+
95
+ Samplers should extend the [`NewRelic::Agent::Sampler`](http://newrelic.github.com/rpm/classes/NewRelic/Agent/Sampler.html)
96
+ class. They should be placed in the `samplers` directory.
97
+
98
+ Refer to examples in the RPM agent to see how to get started.
99
+
100
+ ## Supporting New Dispatchers
101
+
102
+ If you want to add support for a new dispatcher which is not being recognized by default
103
+ by the RPM agent, add code to the `rpm_contrib/detection` directory. This code needs
104
+ to define a module in the `NewRelic::LocalEnvironment` class. This module will be
105
+ accessed at the time environment detection takes place, when the agent is initialized.
106
+
107
+ This module should define the method `discover_dispatcher` and return the name of the
108
+ dispatcher if detected, or defer to super. See `rpm_contrib/detection/camping.rb`
109
+ for a good example.
110
+
111
+ ## Supporting New Frameworks
112
+
113
+ Supporting new frameworks can be pretty involved and generally involves both
114
+ adding custom instrumentation as well as framework and dispatcher detection.
115
+
116
+ In addition it will be necessary to define a new control class with the same
117
+ name as the framework. This control class must go in `new_relic/control`.
118
+
119
+ Refer to the camping example in this gem to see how this is done in general.
120
+
121
+ If you decide to tackle any new frameworks, contact support@newrelic.com and
122
+ we'll be happy to help you work through it.
123
+
124
+ # Note on Patches/Pull Requests
125
+
126
+ * Fork the http://www.github.com/newrelic/rpm_contrib project.
127
+ * Add instrumentation files to `lib/rpm_contrib/instrumentation`. These
128
+ files will be loaded when the RPM agent is initialized.
129
+ * Add samplers to `lib/rpm_contrib/samplers`. These classes are
130
+ installed automatically when the RPM agent is initialized.
131
+ * Add tests.
132
+ * Commit, do not mess with the Rakefile, version, or history. (if you
133
+ want to have your own version, that is fine but bump version in a
134
+ commit by itself I can ignore when I pull)
135
+ * Send me a pull request. Bonus points for topic branches.
136
+
137
+ # Further Information
138
+
139
+ Refer to the [Agent API Documentation](http://newrelic.github.com/rpm).
140
+
141
+ See [the support site](http://support.newrelic.com/faqs) for additional tips and documentation.
142
+
143
+ Contact support@newrelic.com for help.
144
+
145
+ ### Copyright
146
+
147
+ Copyright (c) 2010 New Relic. See LICENSE for details.
@@ -0,0 +1,62 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ # See http://www.rubygems.org/read/chapter/20
4
+
5
+ def version
6
+ @rpm_contrib_version ||= File.read("CHANGELOG")[/Version ([\d\.]+)$/, 1]
7
+ end
8
+
9
+ begin
10
+ require 'jeweler'
11
+ Jeweler::Tasks.new do |gem|
12
+ gem.name = "staugaard-rpm_contrib"
13
+ gem.summary = %Q{Contributed Instrumentation for New Relic RPM}
14
+ gem.description = <<-EOF
15
+ Community contributed instrumentation for various frameworks based on
16
+ the New Relic Ruby monitoring gem newrelic_rpm.
17
+ EOF
18
+ gem.email = "support@newrelic.com"
19
+ gem.homepage = "http://github.com/newrelic/rpm_contrib"
20
+ gem.author = "Bill Kayser"
21
+ gem.add_dependency 'newrelic_rpm', '2.11.1'
22
+ gem.version = version
23
+ gem.files = FileList['LICENSE', 'README*', 'lib/**/*.rb', 'bin/*', '[A-Z]*', 'test/**/*'].to_a
24
+ end
25
+ Jeweler::GemcutterTasks.new
26
+ rescue LoadError
27
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
28
+ end
29
+
30
+ require 'rake/testtask'
31
+ Rake::TestTask.new(:test) do |test|
32
+ test.libs << 'lib' << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+
37
+ begin
38
+ require 'rcov/rcovtask'
39
+ Rcov::RcovTask.new do |test|
40
+ test.libs << 'test'
41
+ test.pattern = 'test/**/test_*.rb'
42
+ test.verbose = true
43
+ end
44
+ rescue LoadError
45
+ task :rcov do
46
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
47
+ end
48
+ end
49
+
50
+ task :test => :check_dependencies
51
+
52
+ task :default => :test
53
+
54
+ require 'rake/rdoctask'
55
+ Rake::RDocTask.new do |rdoc|
56
+ rdoc.rdoc_dir = 'rdoc'
57
+ rdoc.title = "rpm_contrib #{version}"
58
+ rdoc.rdoc_files.include('README*')
59
+ rdoc.rdoc_files.include('LICENSE')
60
+ rdoc.rdoc_files.include('CHANGELOG')
61
+ rdoc.rdoc_files.include('lib/**/*.rb')
62
+ end
@@ -0,0 +1,12 @@
1
+ require 'new_relic/control/ruby'
2
+ # This is the framework control object for Camping apps.
3
+ # It is loaded by virtue of detecting 'camping' as the framework
4
+ # in the rpm_contrib/detection/camping.rb file. It gets loaded
5
+ # by the new_relic/control.rb file.
6
+ class NewRelic::Control::Camping < NewRelic::Control::Ruby
7
+ def init_config(options)
8
+ super
9
+ @local_env.dispatcher = 'camping'
10
+ self['app_name'] ||= 'Camping Application'
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+
2
+ RPM_CONTRIB_LIB = File.dirname(__FILE__)
3
+
4
+ module RPMContrib
5
+ VERSION = File.read(RPM_CONTRIB_LIB+"/../CHANGELOG")[/Version ([\d\.]+)$/, 1]
6
+ end
7
+
8
+ # Perform any framework/dispatcher detection before loading the rpm
9
+ # gem.
10
+
11
+ raise "The rpm_contrib gem must be loaded before the newrelic_rpm gem." if defined?(::NewRelic)
12
+
13
+ Dir.glob(RPM_CONTRIB_LIB + "/rpm_contrib/detection/**/*.rb") { |file| require file }
14
+
15
+ require 'newrelic_rpm'
16
+
17
+ init_sequence = Proc.new do
18
+
19
+ # Tell the agent to load all the files in the
20
+ # rpm_contrib/instrumentation directory.
21
+ NewRelic::Agent.add_instrumentation(RPM_CONTRIB_LIB+"/rpm_contrib/instrumentation/**/*.rb")
22
+
23
+ # Load all the Sampler class definitions. These will register
24
+ # automatically with the agent.
25
+ Dir.glob(RPM_CONTRIB_LIB + "/rpm_contrib/samplers/**/*.rb") { |file| require file }
26
+ end
27
+
28
+ if defined?(Rails.configuration)
29
+ Rails.configuration.after_initialize &init_sequence
30
+ else
31
+ init_sequence.call
32
+ end
33
+
34
+
@@ -0,0 +1,23 @@
1
+ # Detect when running under camping and set the framework and dispatcher.
2
+
3
+ module NewRelic
4
+ class LocalEnvironment
5
+ module Camping
6
+ def discover_framework
7
+ if defined?(::Camping)
8
+ puts "framework is camping"
9
+ @framework = 'camping'
10
+ else
11
+ super
12
+ end
13
+ end
14
+ def discover_dispatcher
15
+ super
16
+ if defined?(::Camping) && @dispatcher.nil?
17
+ @dispatcher = 'camping'
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,15 @@
1
+ # Detect when running under camping and set the framework and dispatcher.
2
+
3
+ module NewRelic
4
+ class LocalEnvironment
5
+ module Resque
6
+ def discover_dispatcher
7
+ super
8
+ if defined?(::Resque::Worker) && @dispatcher.nil?
9
+ @dispatcher = 'resque'
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,8 @@
1
+ if defined? Authlogic::Session::Base
2
+ Authlogic::Session::Base.class_eval do
3
+ # add_method_tracer :record, 'Authlogic/record'
4
+ class << self
5
+ add_method_tracer :find, 'Authlogic/find'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,53 @@
1
+ require 'new_relic/agent/instrumentation/controller_instrumentation'
2
+
3
+ module RPMContrib
4
+ module Instrumentation
5
+ # == Instrumentation for Camping
6
+ # To instrument all controllers do the following:
7
+ # 1. Add require 'rpm_contrib' after loading camping.
8
+ # 2. Add an include at the end of your main Camping app module
9
+ # 3. Run the following command to get the NewRelic license key to use: heroku config -all
10
+ # 4. Create a newrelic.yml under the /config folder with the following content:
11
+ #
12
+ # common: &default_settings
13
+ # license_key: 'PASTE THE VALUE OF NEW_RELIC_LICENSE_KEY HERE'
14
+ # app_name: PASTE THE NAME OF YOUR CAMPING APP HERE
15
+ # monitor_mode: true
16
+ #
17
+ # production:
18
+ # <<: *default_settings
19
+ #
20
+ # Camping code example:
21
+ # -------------------------------------------------------------------------------------
22
+ #
23
+ # require "newrelic_rpm"
24
+ #
25
+ # Camping.goes :NewRelicCampingTest
26
+ #
27
+ # module NewRelicCampingTest
28
+ # # your code
29
+ #
30
+ # include NewRelic::Agent::Instrumentation::Camping
31
+ #
32
+ # end
33
+ #
34
+ #
35
+
36
+ module Camping
37
+
38
+ def self.included(mod)
39
+
40
+ # Since the Camping::Base module is essentially copied
41
+ # into the main module (the mod passed in) of a Camping app
42
+ # using the Camping.goes :NewRelicCampingTest syntax
43
+ # we need to evaluate "weld" the NewRelic plugin in the context of the new Base
44
+
45
+ (Kernel.const_get(mod.name)::Base).module_eval do
46
+ include NewRelic::Agent::Instrumentation::ControllerInstrumentation
47
+ add_transaction_tracer :service
48
+ end
49
+ end
50
+
51
+ end #RPMContrib::Instrumentation::Camping
52
+ end
53
+ end
@@ -0,0 +1,40 @@
1
+ # Just drop this little diddy in your app to get some (not perfect) information on query times and such
2
+ # This will eventually become an official plugin but for those who can't wait, enjoy.
3
+
4
+ if defined?(::MongoMapper)
5
+ module MMNewRelicTracing
6
+ def self.included(model)
7
+ model.metaclass.class_eval do
8
+ add_method_tracer :find, 'Database/#{self.name}/find'
9
+ add_method_tracer :find!, 'Database/#{self.name}/find!'
10
+ add_method_tracer :paginate, 'Database/#{self.name}/paginate'
11
+ add_method_tracer :first, 'Database/#{self.name}/first'
12
+ add_method_tracer :last, 'Database/#{self.name}/last'
13
+ add_method_tracer :all, 'Database/#{self.name}/all'
14
+ add_method_tracer :count, 'Database/#{self.name}/count'
15
+ add_method_tracer :create, 'Database/#{self.name}/create'
16
+ add_method_tracer :create!, 'Database/#{self.name}/create!'
17
+ add_method_tracer :update, 'Database/#{self.name}/update'
18
+ add_method_tracer :delete, 'Database/#{self.name}/delete'
19
+ add_method_tracer :delete_all, 'Database/#{self.name}/delete_all'
20
+ add_method_tracer :destroy, 'Database/#{self.name}/destroy'
21
+ add_method_tracer :destroy_all, 'Database/#{self.name}/destroy_all'
22
+ add_method_tracer :exists?, 'Database/#{self.name}/exists?'
23
+ add_method_tracer :find_by_id, 'Database/#{self.name}/find_by_id'
24
+ add_method_tracer :increment, 'Database/#{self.name}/increment'
25
+ add_method_tracer :decrement, 'Database/#{self.name}/decrement'
26
+ add_method_tracer :set, 'Database/#{self.name}/set'
27
+ add_method_tracer :push, 'Database/#{self.name}/push'
28
+ add_method_tracer :push_all, 'Database/#{self.name}/push_all'
29
+ add_method_tracer :push_uniq, 'Database/#{self.name}/push_uniq'
30
+ add_method_tracer :pull, 'Database/#{self.name}/pull'
31
+ add_method_tracer :pull_all, 'Database/#{self.name}/pull_all'
32
+ end
33
+
34
+ model.class_eval do
35
+ add_method_tracer :save, 'Database/#{self.class.name}/save'
36
+ end
37
+ end
38
+ end
39
+ ::MongoMapper::Document.append_inclusions(MMNewRelicTracing)
40
+ end
@@ -0,0 +1,22 @@
1
+ # Paperclip Instrumentation.
2
+
3
+ if defined? ::Paperclip
4
+
5
+ ::Paperclip::Attachment.class_eval do
6
+ add_method_tracer :save, 'Paperclip/#{name}/save'
7
+ add_method_tracer :assign, 'Paperclip/#{name}/assign'
8
+ add_method_tracer :post_process, 'Paperclip/#{name}/post_process'
9
+ end
10
+
11
+ ::Paperclip::Storage::Filesystem.class_eval do
12
+ add_method_tracer :flush_deletes, 'Paperclip/Storage/flush_deletes'
13
+ add_method_tracer :flush_writes, 'Paperclip/Storage/flush_writes'
14
+ end
15
+
16
+ ::Paperclip::Storage::S3.class_eval do
17
+ add_method_tracer :flush_deletes, 'Paperclip/Storage/flush_deletes'
18
+ add_method_tracer :flush_writes, 'Paperclip/Storage/flush_writes'
19
+ end
20
+
21
+ end
22
+
@@ -0,0 +1,34 @@
1
+ # == Resque Instrumentation
2
+ #
3
+ # Installs a hook to ensure the agent starts manually when the worker
4
+ # starts and also adds the tracer to the process method which executes
5
+ # in the forked task.
6
+
7
+ module RPMContrib
8
+ module Instrumentation
9
+ module ResqueInstrumentation
10
+ ::Resque::Job.class_eval do
11
+ include NewRelic::Agent::Instrumentation::ControllerInstrumentation
12
+
13
+ old_perform_method = instance_method(:perform)
14
+
15
+ define_method(:perform) do
16
+ class_name = (payload_class ||self.class).name
17
+ NewRelic::Agent.reset_stats if NewRelic::Agent.respond_to? :reset_stats
18
+ perform_action_with_newrelic_trace(:name => 'perform', :class_name => class_name,
19
+ :category => 'OtherTransaction/ResqueJob') do
20
+ old_perform_method.bind(self).call
21
+ end
22
+
23
+ NewRelic::Agent.shutdown unless defined?(::Resque.before_child_exit)
24
+ end
25
+ end
26
+
27
+ if defined?(::Resque.before_child_exit)
28
+ ::Resque.before_child_exit do |worker|
29
+ NewRelic::Agent.shutdown
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end if defined?(::Resque::Job) and not NewRelic::Control.instance['disable_resque']
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ require 'newrelic_rpm'
7
+ require 'rpm_contrib'
8
+
9
+ class Test::Unit::TestCase
10
+ end
11
+
12
+ require 'schema.rb'
@@ -0,0 +1,19 @@
1
+ # Use this file to add tables you need to do testing
2
+ # These are created in a sqllite memory DB
3
+
4
+ begin
5
+ require 'sqlite3'
6
+ require 'active_record'
7
+
8
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
9
+ ActiveRecord::Migration.verbose = false
10
+
11
+ ActiveRecord::Schema.define do
12
+
13
+ create_table :stories, :force => true do |table|
14
+ table.string :text
15
+ end
16
+ end
17
+ rescue LoadError
18
+ # Skip AR tests
19
+ end
@@ -0,0 +1,7 @@
1
+ require "#{File.dirname(__FILE__)}/helper"
2
+
3
+ class TestRpmContrib < Test::Unit::TestCase
4
+ def test_something_for_real
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: staugaard-rpm_contrib
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 7
9
+ version: 1.0.7
10
+ platform: ruby
11
+ authors:
12
+ - Bill Kayser
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-06 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: newrelic_rpm
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 11
30
+ - 1
31
+ version: 2.11.1
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: " Community contributed instrumentation for various frameworks based on\n the New Relic Ruby monitoring gem newrelic_rpm.\n"
35
+ email: support@newrelic.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files:
41
+ - LICENSE
42
+ - README.md
43
+ files:
44
+ - CHANGELOG
45
+ - LICENSE
46
+ - README.md
47
+ - Rakefile
48
+ - lib/new_relic/control/camping.rb
49
+ - lib/rpm_contrib.rb
50
+ - lib/rpm_contrib/detection/camping.rb
51
+ - lib/rpm_contrib/detection/resque.rb
52
+ - lib/rpm_contrib/instrumentation/authlogic.rb
53
+ - lib/rpm_contrib/instrumentation/camping.rb
54
+ - lib/rpm_contrib/instrumentation/mongodb.rb
55
+ - lib/rpm_contrib/instrumentation/paperclip.rb
56
+ - lib/rpm_contrib/instrumentation/resque.rb
57
+ - test/helper.rb
58
+ - test/schema.rb
59
+ - test/test_rpm_contrib.rb
60
+ has_rdoc: true
61
+ homepage: http://github.com/newrelic/rpm_contrib
62
+ licenses: []
63
+
64
+ post_install_message:
65
+ rdoc_options:
66
+ - --charset=UTF-8
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ requirements: []
84
+
85
+ rubyforge_project:
86
+ rubygems_version: 1.3.6
87
+ signing_key:
88
+ specification_version: 3
89
+ summary: Contributed Instrumentation for New Relic RPM
90
+ test_files:
91
+ - test/helper.rb
92
+ - test/schema.rb
93
+ - test/test_rpm_contrib.rb