Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Bill Kayser committed May 22, 2010
2 parents 694e62c + 93db12d commit 2ef7803
Show file tree
Hide file tree
Showing 6 changed files with 276 additions and 1 deletion.
62 changes: 62 additions & 0 deletions lib/rpm_contrib/instrumentation/mongoid.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
debugger
if defined?(::Mongoid) && !NewRelic::Control.instance['disable_mongodb']

module Mongoid #:nodoc:
module Document

#adding call to super
class << self
alias :old_included :included

def included(model)
old_included(model)
super
end
end
end
end

module RPMContrib::Instrumentation

module Mongoid
def included(model)
model.metaclass.class_eval do
puts "adding mongoid method tracers for #{model.name}"
add_method_tracer :create, 'Database/#{self.name}/create'
add_method_tracer :create!, 'Database/#{self.name}/create!'
add_method_tracer :delete_all, 'Database/#{self.name}/delete_all'
add_method_tracer :destroy_all, 'Database/#{self.name}/destroy_all'
add_method_tracer :all, 'Database/#{self.name}/all'
add_method_tracer :find, 'Database/#{self.name}/find'
add_method_tracer :first, 'Database/#{self.name}/first'
add_method_tracer :last, 'Database/#{self.name}/last'
add_method_tracer :find_or_create_by, 'Database/#{self.name}/find_or_create_by'
add_method_tracer :find_or_initialize_by, 'Database/#{self.name}/find_or_initialize_by'
add_method_tracer :min, 'Database/#{self.name}/min'
add_method_tracer :max, 'Database/#{self.name}/max'
add_method_tracer :sum, 'Database/#{self.name}/sum'
end

model.class_eval do
add_method_tracer :update_attributes, 'Database/#{self.class.name}/update_attributes'
add_method_tracer :update_attributes!, 'Database/#{self.class.name}/update_attributes!'
add_method_tracer :save, 'Database/#{self.class.name}/save'
add_method_tracer :save!, 'Database/#{self.class.name}/save!'
add_method_tracer :delete, 'Database/#{self.class.name}/delete'
add_method_tracer :destroy, 'Database/#{self.class.name}/destroy'

end
super
end
end
::Mongoid::Document.extend(RPMContrib::Instrumentation::Mongoid)
end
end








175 changes: 175 additions & 0 deletions newrelic.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
#
# This file configures the NewRelic RPM Agent, NewRelic RPM monitors Rails
# applications with deep visibility and low overhead. For more information,
# visit www.newrelic.com.
#
# This configuration file is custom generated for rpm_config
#
# here are the settings that are common to all environments
common: &default_settings
# ============================== LICENSE KEY ===============================
# You must specify the licence key associated with your New Relic account.
# This key binds your Agent's data to your account in the New Relic RPM service.
license_key: 'test'

# Application Name
# Set this to be the name of your application as you'd like it show up in RPM.
# RPM will then auto-map instances of your application into a RPM "application"
# on your home dashboard page. This setting does not prevent you from manually
# defining applications.
app_name: rpm_config

# When 'enabled' is turned on, the agent collects performance data
# by inserting lightweight tracers on key methods inside the rails
# framework and asynchronously aggregating and reporting this
# performance data to the NewRelic RPM service at newrelic.com.
enabled: false

# The newrelic agent generates its own log file to keep its logging
# information separate from that of your application. Specify its
# log level here.
log_level: info

# The newrelic agent communicates with the RPM service via http by
# default. If you want to communicate via https to increase
# security, then turn on SSL by setting this value to true. Note,
# this will result in increased CPU overhead to perform the
# encryption involved in SSL communication, but this work is done
# asynchronously to the threads that process your application code,
# so it should not impact response times.
ssl: false

# EXPERIMENTAL: enable verification of the SSL certificate sent by
# the server. This setting has no effect unless SSL is enabled
# above. This may block your application. Only enable it if the data
# you send us needs end-to-end verified certificates.
#
# This means we cannot cache the DNS lookup, so each request to the
# RPM service will perform a lookup. It also means that we cannot
# use a non-blocking lookup, so in a worst case, if you have DNS
# problems, your app may block indefinitely.
# verify_certificate: true

# Set your application's Apdex threshold value with the 'apdex_t'
# setting, in seconds. The apdex_t value determines the buckets used
# to compute your overall Apdex score.
# Requests that take less than apdex_t seconds to process will be
# classified as Satisfying transactions; more than apdex_t seconds
# as Tolerating transactions; and more than four times the apdex_t
# value as Frustrating transactions.
# For more about the Apdex standard, see
# http://support.newrelic.com/faqs/general/apdex

apdex_t: 0.5

# Proxy settings for connecting to the RPM server.
#
# If a proxy is used, the host setting is required. Other settings
# are optional. Default port is 8080.
#
# proxy_host: hostname
# proxy_port: 8080
# proxy_user:
# proxy_pass:


# Tells transaction tracer and error collector (when enabled)
# whether or not to capture HTTP params. When true, the RoR
# filter_parameter_logging mechanism is used so that sensitive
# parameters are not recorded
capture_params: false


# Transaction tracer captures deep information about slow
# transactions and sends this to the RPM service once a
# minute. Included in the transaction is the exact call sequence of
# the transactions including any SQL statements issued.
transaction_tracer:

# Transaction tracer is enabled by default. Set this to false to
# turn it off. This feature is only available at the Silver and
# above product levels.
enabled: true

# Threshold in seconds for when to collect a transaction
# trace. When the response time of a controller action exceeds
# this threshold, a transaction trace will be recorded and sent to
# RPM. Valid values are any float value, or (default) "apdex_f",
# which will use the threshold for an dissatisfying Apdex
# controller action - four times the Apdex T value.
transaction_threshold: apdex_f

# When transaction tracer is on, SQL statements can optionally be
# recorded. The recorder has three modes, "off" which sends no
# SQL, "raw" which sends the SQL statement in its original form,
# and "obfuscated", which strips out numeric and string literals
record_sql: obfuscated

# Threshold in seconds for when to collect stack trace for a SQL
# call. In other words, when SQL statements exceed this threshold,
# then capture and send to RPM the current stack trace. This is
# helpful for pinpointing where long SQL calls originate from
stack_trace_threshold: 0.500

# Error collector captures information about uncaught exceptions and
# sends them to RPM for viewing
error_collector:

# Error collector is enabled by default. Set this to false to turn
# it off. This feature is only available at the Silver and above
# product levels
enabled: true

# Tells error collector whether or not to capture a source snippet
# around the place of the error when errors are View related.
capture_source: true

# To stop specific errors from reporting to RPM, set this property
# to comma separated values
#
#ignore_errors: ActionController::RoutingError, ...

# (Advanced) Uncomment this to ensure the cpu and memory samplers
# won't run. Useful when you are using the agent to monitor an
# external resource
# disable_samplers: true

# override default settings based on your application's environment

# NOTE if your application has other named environments, you should
# provide newrelic conifguration settings for these enviromnents here.

development:
<<: *default_settings
# Turn off communication to RPM service in development mode.
# NOTE: for initial evaluation purposes, you may want to temporarily
# turn the agent on in development mode.
enabled: false

# When running in Developer Mode, the New Relic Agent will present
# performance information on the last 100 transactions you have
# executed since starting the mongrel. to view this data, go to
# http://localhost:3000/newrelic
developer: true

test:
<<: *default_settings
# it almost never makes sense to turn on the agent when running
# unit, functional or integration tests or the like.
enabled: false

# Turn on the agent in production for 24x7 monitoring. NewRelic
# testing shows an average performance impact of < 5 ms per
# transaction, you you can leave this on all the time without
# incurring any user-visible performance degredation.
production:
<<: *default_settings
enabled: true

# many applications have a staging environment which behaves
# identically to production. Support for that environment is provided
# here. By default, the staging environment has the agent turned on.
staging:
<<: *default_settings
enabled: true
app_name: rpm_config
1 change: 1 addition & 0 deletions rpm_contrib.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ the New Relic Ruby monitoring gem newrelic_rpm.
"lib/rpm_contrib/detection/resque.rb",
"lib/rpm_contrib/instrumentation/camping.rb",
"lib/rpm_contrib/instrumentation/mongodb.rb",
"lib/rpm_contrib/instrumentation/mongoid.rb",
"lib/rpm_contrib/instrumentation/paperclip.rb",
"lib/rpm_contrib/instrumentation/redis.rb",
"lib/rpm_contrib/instrumentation/resque.rb",
Expand Down
3 changes: 2 additions & 1 deletion test/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@

$LOAD_PATH.unshift(File.dirname(__FILE__))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
require 'newrelic_rpm'
require 'rpm_contrib'
require 'newrelic_rpm'


class Test::Unit::TestCase
end
Expand Down
36 changes: 36 additions & 0 deletions test/mongoid_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require "#{File.dirname(__FILE__)}/helper"
require 'mongoid'
require "#{File.dirname(__FILE__)}/../lib/rpm_contrib/instrumentation/mongoid"


Mongoid.configure do |config|
config.master = Mongo::Connection.new.db('animals')
end

class Dog
include Mongoid::Document

field :name
end

class MongoidTest < Test::Unit::TestCase

# Called before every test method runs. Can be used
# to set up fixture information.
def setup
# Do nothing
end

# Called after every test method runs. Can be used to tear
# down fixture information.

def teardown
# Do nothing
end

# Fake test
def test_fail
Dog.create!(:name=>'rover')

end
end
Empty file modified test/test_rpm_contrib.rb
100644 → 100755
Empty file.

0 comments on commit 2ef7803

Please sign in to comment.