rpm_contrib 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ * Version 1.0.8
2
+
3
+ Redis instrumentation contributed by Ashley Martens
4
+ Authlogic moved into RPM Ruby Agent
5
+
1
6
  * Version 1.0.7
2
7
 
3
8
  Resque instrumentation now supports the resque-multi-job-forks plugin
@@ -1,75 +1,74 @@
1
- = The RPM Contrib Gem
1
+ # The RPM Contrib Gem
2
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.
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 to run.
6
5
 
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.
6
+ To use the contrib gem, install the `rpm_contrib` gem from gemcutter. It will
7
+ also install the required version of the `newrelic_rpm` gem if it's not already
8
+ installed.
10
9
 
11
- For Rails 2.1 and later, add this dependency to your in your
12
- environment.rb:
10
+ For Rails 2.1 and later, add this dependency to your in your environment.rb:
13
11
 
14
12
  config.gem 'rpm_contrib'
15
13
 
16
- For other frameworks, make sure you load rubygems if it isn't already,
17
- then just require the contrib gem:
14
+ For other frameworks, make sure you load rubygems if it isn't already, then just
15
+ require the contrib gem:
18
16
 
19
17
  require 'rubygems'
20
18
  require 'rpm_contrib'
21
19
 
22
20
  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.
21
+ initialized. No need for a separate require statement for `newrelic_rpm`. The
22
+ `rpm_contrib` gem must be loaded before the `newrelic_rpm` gem initializes.
26
23
 
27
- = Supported Frameworks
24
+ # Supported Frameworks
28
25
 
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.
26
+ A number of frameworks are supported in the contrib gem. They are all turned on
27
+ by default but you can add settings to your newrelic.yml to disable any of them.
32
28
 
33
- === Camping
29
+ ### Camping
34
30
 
35
31
  The gem will detect a Camping app but you need to manually add the
36
32
  instrumentation to your configuration file. See RPMContrib::Instrumentation::Camping
37
33
  for more information.
38
34
 
39
- === Paperclip
35
+ ### Paperclip
40
36
 
41
37
  No special configuration required for Paperclip visibility. You can disable
42
38
  it by setting `disable_paperclip` to true in the newrelic.yml file.
43
39
 
44
- === Authlogic
45
-
46
- No special configuration required for Authlogic visibility. You can disable
47
- it by setting `disable_authlogic` to true in the newrelic.yml file.
48
-
49
- === MongoDB
40
+ ### MongoDB
50
41
 
51
42
  No special configuration required for MongoDB visibility. You can disable
52
43
  it by setting `disable_mongodb` to true in the newrelic.yml file.
53
44
 
54
- === Resque
45
+ ### Resque
55
46
 
56
47
  To disable resque, add this to your newrelic.yml:
57
48
 
58
49
  disable_resque: true
59
50
 
51
+ ### Redis
52
+
53
+ Redis instrumentation will record operations as well as `allWeb` and `allOther`
54
+ summary metrics under the `Database/Redis` metric namespace.
55
+
56
+ To disable Redis instrumentation, add this to your newrelic.yml:
57
+
58
+ disable_redis: true
60
59
 
61
- = How to Add Custom Instrumentation
60
+ # How to Add Custom Instrumentation
62
61
 
63
- We encourage contributions to this project and will provide whatever
64
- assistance we can to those wishing to develop instrumentation for
65
- other open source Ruby libraries.
62
+ We encourage contributions to this project and will provide whatever assistance
63
+ we can to those wishing to develop instrumentation for other open source Ruby
64
+ libraries.
66
65
 
67
- When adding instrumentation to this gem, be sure and get familiar with the
68
- [RPM Agent API](http://newrelic.github.com/rpm/classes/NewRelic/Agent.html)
69
- and contact support@newrelic.com with any questions.
66
+ When adding instrumentation to this gem, be sure and get familiar with the [RPM
67
+ Agent API](http://newrelic.github.com/rpm/classes/NewRelic/Agent.html) and
68
+ contact support@newrelic.com with any questions.
70
69
 
71
- There are several extension points in the agent you can take advantage of
72
- with this gem.
70
+ There are several extension points in the agent you can take advantage of with
71
+ this gem.
73
72
 
74
73
  * Custom tracers which measure methods and give visibility to
75
74
  otherwise unmeasured libraries.
@@ -79,49 +78,53 @@ with this gem.
79
78
  web dispatcher, or be [started manually](http://support.newrelic.com/faqs/general/manual-start).
80
79
  * Framework support, for alternatives to Rails like Camping or Ramaze
81
80
 
82
- == Custom Tracers
81
+ ## Custom Tracers
83
82
 
84
83
  Custom tracers for frameworks should be added to the `lib/rpm_contrib/instrumentation`
85
84
  directory. These files are loaded at the time the Agent starts. **They will not
86
85
  be loaded if the Agent does not start up.**
87
86
 
88
- It is important that you wrap any instrumentation with the checks necessary
89
- to determine if the code being instrumented is loaded. You can't add code to the
87
+ It is important that you wrap any instrumentation with the checks necessary to
88
+ determine if the code being instrumented is loaded. You can't add code to the
90
89
  contrib gem that will break when run in any other context besides yours.
91
90
 
92
91
 
93
- For details on how to define custom tracers, refer to the [support documentation on adding
94
- custom tracers](http://support.newrelic.com/faqs/docs/custom-metric-collection). You
95
- can also get detailed information on the API from the
96
- [Agent method tracing rdocs](http://newrelic.github.com/rpm/classes/NewRelic/Agent/MethodTracer.html),
97
- especially the [add_method_tracer](http://newrelic.github.com/rpm/classes/NewRelic/Agent/MethodTracer/ClassMethods.html)
92
+ For details on how to define custom tracers, refer to the [support documentation
93
+ on adding custom
94
+ tracers](http://support.newrelic.com/faqs/docs/custom-metric-collection). You
95
+ can also get detailed information on the API from the [Agent method tracing
96
+ rdocs](http://newrelic.github.com/rpm/classes/NewRelic/Agent/MethodTracer.html),
97
+ especially the
98
+ [add_method_tracer](http://newrelic.github.com/rpm/classes/NewRelic/Agent/MethodTracer/ClassMethods.html)
98
99
  docs.
99
100
 
100
101
  A good example can be found in `lib/rpm_contrib/instrumentation/paperclip.rb`.
101
102
 
102
- == Samplers
103
+ ## Samplers
103
104
 
104
- You can add samplers which will record metrics approximately once a minute. Samplers
105
- are useful for capturing generic instrumentation for display in
106
- [custom views](http://support.newrelic.com/faqs/docs/custom-dashboard-specification).
105
+ You can add samplers which will record metrics approximately once a minute.
106
+ Samplers are useful for capturing generic instrumentation for display in [custom
107
+ views](http://support.newrelic.com/faqs/docs/custom-dashboard-specification).
107
108
 
108
- Samplers should extend the [`NewRelic::Agent::Sampler`](http://newrelic.github.com/rpm/classes/NewRelic/Agent/Sampler.html)
109
+ Samplers should extend the
110
+ [`NewRelic::Agent::Sampler`](http://newrelic.github.com/rpm/classes/NewRelic/Agent/Sampler.html)
109
111
  class. They should be placed in the `samplers` directory.
110
112
 
111
113
  Refer to examples in the RPM agent to see how to get started.
112
114
 
113
- == Supporting New Dispatchers
115
+ ## Supporting New Dispatchers
114
116
 
115
- If you want to add support for a new dispatcher which is not being recognized by default
116
- by the RPM agent, add code to the `rpm_contrib/detection` directory. This code needs
117
- to define a module in the `NewRelic::LocalEnvironment` class. This module will be
118
- accessed at the time environment detection takes place, when the agent is initialized.
117
+ If you want to add support for a new dispatcher which is not being recognized by
118
+ default by the RPM agent, add code to the `rpm_contrib/detection` directory.
119
+ This code needs to define a module in the `NewRelic::LocalEnvironment` class.
120
+ This module will be accessed at the time environment detection takes place, when
121
+ the agent is initialized.
119
122
 
120
- This module should define the method `discover_dispatcher` and return the name of the
121
- dispatcher if detected, or defer to super. See `rpm_contrib/detection/camping.rb`
122
- for a good example.
123
+ This module should define the method `discover_dispatcher` and return the name
124
+ of the dispatcher if detected, or defer to super. See
125
+ `rpm_contrib/detection/camping.rb` for a good example.
123
126
 
124
- == Supporting New Frameworks
127
+ ## Supporting New Frameworks
125
128
 
126
129
  Supporting new frameworks can be pretty involved and generally involves both
127
130
  adding custom instrumentation as well as framework and dispatcher detection.
@@ -134,7 +137,7 @@ Refer to the camping example in this gem to see how this is done in general.
134
137
  If you decide to tackle any new frameworks, contact support@newrelic.com and
135
138
  we'll be happy to help you work through it.
136
139
 
137
- = Note on Patches/Pull Requests
140
+ # Note on Patches/Pull Requests
138
141
 
139
142
  * Fork the http://www.github.com/newrelic/rpm_contrib project.
140
143
  * Add instrumentation files to `lib/rpm_contrib/instrumentation`. These
@@ -147,15 +150,15 @@ we'll be happy to help you work through it.
147
150
  commit by itself I can ignore when I pull)
148
151
  * Send me a pull request. Bonus points for topic branches.
149
152
 
150
- = Further Information
153
+ # Further Information
151
154
 
152
155
  Refer to the Agent API Documentation at http://newrelic.github.com/rpm
153
156
 
154
- See the support site faqs at http://support.newrelic.com/faqs for
155
- additional tips and documentation.
157
+ See the support site faqs at http://support.newrelic.com/faqs for additional
158
+ tips and documentation.
156
159
 
157
160
  Contact support@newrelic.com for help.
158
161
 
159
- === Copyright
162
+ ### Copyright
160
163
 
161
164
  Copyright (c) 2009-2010 New Relic. See LICENSE for details.
data/Rakefile CHANGED
@@ -6,21 +6,31 @@ def version
6
6
  @rpm_contrib_version ||= File.read("CHANGELOG")[/Version ([\d\.]+)$/, 1]
7
7
  end
8
8
 
9
+ RDOC_FILES = FileList['README*','LICENSE','CHANGELOG']
10
+ SUMMARY = "Contributed Instrumentation for New Relic RPM"
11
+ DESCRIPTION = <<-EOF
12
+ Community contributed instrumentation for various frameworks based on
13
+ the New Relic Ruby monitoring gem newrelic_rpm.
14
+ EOF
15
+
9
16
  begin
10
17
  require 'jeweler'
11
18
  Jeweler::Tasks.new do |gem|
12
19
  gem.name = "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
20
+ gem.summary = SUMMARY
21
+ gem.description = DESCRIPTION
18
22
  gem.email = "support@newrelic.com"
19
23
  gem.homepage = "http://github.com/newrelic/rpm_contrib"
20
24
  gem.author = "Bill Kayser"
21
25
  gem.add_dependency 'newrelic_rpm', '2.11.1'
22
26
  gem.version = version
23
27
  gem.files = FileList['LICENSE', 'README*', 'lib/**/*.rb', 'bin/*', '[A-Z]*', 'test/**/*'].to_a
28
+ gem.rdoc_options <<
29
+ "--line-numbers" <<
30
+ "--inline-source" <<
31
+ "--title" << SUMMARY <<
32
+ "-m" << "README.md"
33
+ gem.extra_rdoc_files = RDOC_FILES
24
34
  end
25
35
  Jeweler::GemcutterTasks.new
26
36
  rescue LoadError
@@ -55,11 +65,9 @@ require 'rake/rdoctask'
55
65
  Rake::RDocTask.new do |rdoc|
56
66
  rdoc.rdoc_dir = 'rdoc'
57
67
  rdoc.title = "rpm_contrib #{version}"
58
- rdoc.main = "README.rdoc"
59
- rdoc.rdoc_files.include('README*')
60
- rdoc.rdoc_files.include('LICENSE')
61
- rdoc.rdoc_files.include('CHANGELOG')
62
- rdoc.rdoc_files.include('lib/**/*.rb')
68
+ rdoc.main = "README.md"
69
+ rdoc.rdoc_files = FileList['lib/**/*.rb'] + RDOC_FILES
70
+ rdoc.inline_source = true
63
71
  end
64
72
 
65
73
  begin
@@ -3,10 +3,12 @@ require 'new_relic/control/ruby'
3
3
  # It is loaded by virtue of detecting 'camping' as the framework
4
4
  # in the rpm_contrib/detection/camping.rb file. It gets loaded
5
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'
6
+ class NewRelic::Control #:nodoc:
7
+ class Camping < NewRelic::Control::Ruby
8
+ def init_config(options)
9
+ super
10
+ @local_env.dispatcher = 'camping'
11
+ self['app_name'] ||= 'Camping Application'
12
+ end
11
13
  end
12
14
  end
@@ -1,7 +1,8 @@
1
- # Detect when running under camping and set the framework and dispatcher.
2
-
3
- module NewRelic
4
- class LocalEnvironment
1
+ module NewRelic #:nodoc:
2
+ # The class defined in the
3
+ # newrelic_rpm[http://newrelic.github.com/rpm] which can be ammended
4
+ # to support new frameworks by defining modules in this namespace.
5
+ class LocalEnvironment #:nodoc:
5
6
  module Camping
6
7
  def discover_framework
7
8
  if defined?(::Camping)
@@ -0,0 +1,26 @@
1
+ # Redis instrumentation contributed by Ashley Martens of ngmoco
2
+ #
3
+
4
+ if defined?(::Redis) and not NewRelic::Control.instance['disable_redis']
5
+
6
+ ::Redis.class_eval do
7
+
8
+ include NewRelic::Agent::MethodTracer
9
+
10
+ def raw_call_command_with_newrelic_trace *args
11
+ method_name = args[0].is_a?(Array) ? args[0][0] : args[0]
12
+ metrics = ["Database/Redis/#{method_name}",
13
+ (NewRelic::Agent::Instrumentation::MetricFrame.recording_web_transaction? ? 'Database/Redis/allWeb' : 'Database/Redis/allOther')]
14
+ self.class.trace_execution_scoped(metrics) do
15
+ # NewRelic::Control.instance.log.debug("Instrumenting Redis Call[#{method_name}]: #{args[0].inspect}")
16
+ raw_call_command_without_newrelic_trace(*args)
17
+ end
18
+ end
19
+
20
+ # alias_method_chain :raw_call_command, :newrelic_trace
21
+ alias raw_call_command_without_newrelic_trace raw_call_command
22
+ alias raw_call_command raw_call_command_with_newrelic_trace
23
+
24
+ end
25
+
26
+ end
@@ -1,11 +1,11 @@
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
1
 
7
2
  module RPMContrib
8
3
  module Instrumentation
4
+ # == Resque Instrumentation
5
+ #
6
+ # Installs a hook to ensure the agent starts manually when the worker
7
+ # starts and also adds the tracer to the process method which executes
8
+ # in the forked task.
9
9
  module ResqueInstrumentation
10
10
  ::Resque::Job.class_eval do
11
11
  include NewRelic::Agent::Instrumentation::ControllerInstrumentation
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 7
9
- version: 1.0.7
8
+ - 8
9
+ version: 1.0.8
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-04-14 00:00:00 -07:00
17
+ date: 2010-05-04 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -31,28 +31,32 @@ dependencies:
31
31
  version: 2.11.1
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
- description: " Community contributed instrumentation for various frameworks based on\n the New Relic Ruby monitoring gem newrelic_rpm.\n"
34
+ description: |
35
+ Community contributed instrumentation for various frameworks based on
36
+ the New Relic Ruby monitoring gem newrelic_rpm.
37
+
35
38
  email: support@newrelic.com
36
39
  executables: []
37
40
 
38
41
  extensions: []
39
42
 
40
43
  extra_rdoc_files:
44
+ - CHANGELOG
41
45
  - LICENSE
42
- - README.rdoc
46
+ - README.md
43
47
  files:
44
48
  - CHANGELOG
45
49
  - LICENSE
46
- - README.rdoc
50
+ - README.md
47
51
  - Rakefile
48
52
  - lib/new_relic/control/camping.rb
49
53
  - lib/rpm_contrib.rb
50
54
  - lib/rpm_contrib/detection/camping.rb
51
55
  - lib/rpm_contrib/detection/resque.rb
52
- - lib/rpm_contrib/instrumentation/authlogic.rb
53
56
  - lib/rpm_contrib/instrumentation/camping.rb
54
57
  - lib/rpm_contrib/instrumentation/mongodb.rb
55
58
  - lib/rpm_contrib/instrumentation/paperclip.rb
59
+ - lib/rpm_contrib/instrumentation/redis.rb
56
60
  - lib/rpm_contrib/instrumentation/resque.rb
57
61
  - test/helper.rb
58
62
  - test/schema.rb
@@ -64,6 +68,12 @@ licenses: []
64
68
  post_install_message:
65
69
  rdoc_options:
66
70
  - --charset=UTF-8
71
+ - --line-numbers
72
+ - --inline-source
73
+ - --title
74
+ - Contributed Instrumentation for New Relic RPM
75
+ - -m
76
+ - README.md
67
77
  require_paths:
68
78
  - lib
69
79
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,8 +0,0 @@
1
- if defined? Authlogic::Session::Base && !NewRelic::Control.instance['disable_authlogic']
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