rpm_contrib 1.0.3 → 1.0.4

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,3 +1,7 @@
1
+ * Version 1.0.4
2
+
3
+ Resque support
4
+
1
5
  * Version 1.0.3
2
6
 
3
7
  MongoDB instrumentation contributed by John Nunemaker
data/README.md CHANGED
@@ -1,28 +1,49 @@
1
1
  # The RPM Contrib Gem
2
2
 
3
- The `rpm_contrib` gem contains instrumentation for the New Relic RPM agent
4
- contributed by the community of RPM users. It requires the RPM Agent
5
- to run.
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
6
 
7
- To use the contrib gem, install the `rpm_contrib` gem off gemcutter. It will
8
- also install the required version of the `newrelic_rpm` gem if it's not
9
- already installed.
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
10
 
11
- For Rails 2.1 and later, add the dependency in your initializer:
11
+ For Rails 2.1 and later, add this dependency to your in your
12
+ environment.rb:
12
13
 
13
14
  config.gem 'rpm_contrib'
14
15
 
15
- For other frameworks, make sure you load rubygems if it isn't already, then
16
- just require the contrib gem:
16
+ For other frameworks, make sure you load rubygems if it isn't already,
17
+ then just require the contrib gem:
17
18
 
18
19
  require 'rubygems'
19
20
  require 'rpm_contrib'
20
21
 
21
- When you load the rpm_contrib gem, the `newrelic_rpm` gem will also be initialized.
22
- No need for a separate require statement for `newrelic_rpm`.
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
23
46
 
24
- **It's important that you don't load the newrelic_rpm gem separately.** The
25
- `rpm_contrib` gem must be loaded before the `newrelic_rpm` gem initializes.
26
47
 
27
48
  # How to Add Custom Instrumentation
28
49
 
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ begin
18
18
  gem.email = "support@newrelic.com"
19
19
  gem.homepage = "http://github.com/newrelic/rpm_contrib"
20
20
  gem.author = "Bill Kayser"
21
- gem.add_dependency 'newrelic_rpm', '>= 2.10.6'
21
+ gem.add_dependency 'newrelic_rpm', '2.11.0.beta'
22
22
  gem.version = version
23
23
  gem.files = FileList['LICENSE', 'README*', 'lib/**/*.rb', 'bin/*', '[A-Z]*', 'test/**/*'].to_a
24
24
  end
data/lib/rpm_contrib.rb CHANGED
@@ -5,7 +5,6 @@ module RPMContrib
5
5
  VERSION = File.read(RPM_CONTRIB_LIB+"/../CHANGELOG")[/Version ([\d\.]+)$/, 1]
6
6
  end
7
7
 
8
-
9
8
  # Perform any framework/dispatcher detection before loading the rpm
10
9
  # gem.
11
10
 
@@ -15,11 +14,21 @@ Dir.glob(RPM_CONTRIB_LIB + "/rpm_contrib/detection/**/*.rb") { |file| require fi
15
14
 
16
15
  require 'newrelic_rpm'
17
16
 
18
- # Tell the agent to load all the files in the rpm_contrib/instrumentation directory.
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
19
27
 
20
- NewRelic::Agent.add_instrumentation(RPM_CONTRIB_LIB+"/rpm_contrib/instrumentation/**/*.rb")
28
+ if defined?(Rails.configuration)
29
+ Rails.configuration.after_initialize &init_sequence
30
+ else
31
+ init_sequence.call
32
+ end
21
33
 
22
- # Load all the Sampler class definitions. These will register
23
- # automatically with the agent.
24
- Dir.glob(RPM_CONTRIB_LIB + "/rpm_contrib/samplers/**/*.rb") { |file| require file }
25
34
 
@@ -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,39 @@
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
+
11
+ ::Resque::Worker.class_eval do
12
+ include NewRelic::Agent::Instrumentation::ControllerInstrumentation
13
+ old_process_method = instance_method(:process)
14
+ define_method(:process) do | *args |
15
+ if args[0]
16
+ class_name = args[0].payload_class.name
17
+ else
18
+ class_name = 'Resque::Job'
19
+ end
20
+ name = 'process'
21
+ perform_action_with_newrelic_trace(:name => name, :class_name => class_name,
22
+ :category => 'OtherTransaction/ResqueJob') do
23
+ old_process_method.bind(self).call(*args)
24
+ end
25
+ NewRelic::Agent.shutdown
26
+ end
27
+
28
+ old_work_method = instance_method(:work)
29
+
30
+ define_method(:work) do | *args |
31
+ RAILS_DEFAULT_LOGGER.info "Sarting Resque monitoring"
32
+ old_work_method.bind(self).call(*args)
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end if defined?(::Resque::Worker) and not NewRelic::Control.instance['disable_resque']
39
+
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 3
9
- version: 1.0.3
8
+ - 4
9
+ version: 1.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Bill Kayser
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-11 00:00:00 -08:00
17
+ date: 2010-03-26 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -22,13 +22,14 @@ dependencies:
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - "="
26
26
  - !ruby/object:Gem::Version
27
27
  segments:
28
28
  - 2
29
- - 10
30
- - 6
31
- version: 2.10.6
29
+ - 11
30
+ - 0
31
+ - beta
32
+ version: 2.11.0.beta
32
33
  type: :runtime
33
34
  version_requirements: *id001
34
35
  description: " Community contributed instrumentation for various frameworks based on\n the New Relic Ruby monitoring gem newrelic_rpm.\n"
@@ -48,10 +49,12 @@ files:
48
49
  - lib/new_relic/control/camping.rb
49
50
  - lib/rpm_contrib.rb
50
51
  - lib/rpm_contrib/detection/camping.rb
52
+ - lib/rpm_contrib/detection/resque.rb
51
53
  - lib/rpm_contrib/instrumentation/authlogic.rb
52
54
  - lib/rpm_contrib/instrumentation/camping.rb
53
55
  - lib/rpm_contrib/instrumentation/mongodb.rb
54
56
  - lib/rpm_contrib/instrumentation/paperclip.rb
57
+ - lib/rpm_contrib/instrumentation/resque.rb
55
58
  - test/helper.rb
56
59
  - test/schema.rb
57
60
  - test/test_rpm_contrib.rb