Permalink
Browse files

new relic

  • Loading branch information...
1 parent 02bfdce commit 6f322886fdd0a68d05ded164f9237148bbdb05d3 @redinger committed Apr 13, 2009
Showing with 9,691 additions and 0 deletions.
  1. +37 −0 vendor/plugins/newrelic_rpm/LICENSE
  2. +136 −0 vendor/plugins/newrelic_rpm/README
  3. +40 −0 vendor/plugins/newrelic_rpm/Rakefile
  4. +4 −0 vendor/plugins/newrelic_rpm/bin/newrelic_cmd
  5. +30 −0 vendor/plugins/newrelic_rpm/init.rb
  6. +37 −0 vendor/plugins/newrelic_rpm/install.rb
  7. +29 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent.rb
  8. +740 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/agent.rb
  9. +13 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/chained_call.rb
  10. +72 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/collection_helper.rb
  11. +105 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/error_collector.rb
  12. +18 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/active_merchant.rb
  13. +95 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/active_record_instrumentation.rb
  14. +151 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/controller_instrumentation.rb
  15. +90 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/data_mapper.rb
  16. +105 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/dispatcher_instrumentation.rb
  17. +18 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/memcache.rb
  18. +17 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/merb/controller.rb
  19. +15 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/merb/dispatcher.rb
  20. +6 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/merb/errors.rb
  21. +35 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/rails/action_controller.rb
  22. +27 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/rails/action_web_service.rb
  23. +30 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/rails/dispatcher.rb
  24. +23 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/rails/errors.rb
  25. +6 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/instrumentation/rails/rails.rb
  26. +171 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/method_tracer.rb
  27. +105 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/patch_const_missing.rb
  28. +29 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/samplers/cpu.rb
  29. +55 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/samplers/memory.rb
  30. +26 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/samplers/mongrel.rb
  31. +240 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/stats_engine.rb
  32. +40 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/synchronize.rb
  33. +274 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/transaction_sampler.rb
  34. +128 −0 vendor/plugins/newrelic_rpm/lib/new_relic/agent/worker_loop.rb
  35. +147 −0 vendor/plugins/newrelic_rpm/lib/new_relic/commands/deployments.rb
  36. +30 −0 vendor/plugins/newrelic_rpm/lib/new_relic/commands/new_relic_commands.rb
  37. +278 −0 vendor/plugins/newrelic_rpm/lib/new_relic/config.rb
  38. +35 −0 vendor/plugins/newrelic_rpm/lib/new_relic/config/merb.rb
  39. +119 −0 vendor/plugins/newrelic_rpm/lib/new_relic/config/rails.rb
  40. +22 −0 vendor/plugins/newrelic_rpm/lib/new_relic/config/ruby.rb
  41. +135 −0 vendor/plugins/newrelic_rpm/lib/new_relic/local_environment.rb
  42. +6 −0 vendor/plugins/newrelic_rpm/lib/new_relic/merbtasks.rb
  43. +26 −0 vendor/plugins/newrelic_rpm/lib/new_relic/metric_data.rb
  44. +39 −0 vendor/plugins/newrelic_rpm/lib/new_relic/metric_spec.rb
  45. +7 −0 vendor/plugins/newrelic_rpm/lib/new_relic/metrics.rb
  46. +21 −0 vendor/plugins/newrelic_rpm/lib/new_relic/noticed_error.rb
  47. +75 −0 vendor/plugins/newrelic_rpm/lib/new_relic/recipes.rb
  48. +95 −0 vendor/plugins/newrelic_rpm/lib/new_relic/shim_agent.rb
  49. +359 −0 vendor/plugins/newrelic_rpm/lib/new_relic/stats.rb
  50. +122 −0 vendor/plugins/newrelic_rpm/lib/new_relic/transaction_analysis.rb
  51. +499 −0 vendor/plugins/newrelic_rpm/lib/new_relic/transaction_sample.rb
  52. +151 −0 vendor/plugins/newrelic_rpm/lib/new_relic/version.rb
  53. +255 −0 vendor/plugins/newrelic_rpm/lib/new_relic_api.rb
  54. +27 −0 vendor/plugins/newrelic_rpm/lib/newrelic_rpm.rb
  55. +17 −0 vendor/plugins/newrelic_rpm/lib/tasks/agent_tests.rake
  56. +4 −0 vendor/plugins/newrelic_rpm/lib/tasks/all.rb
  57. +7 −0 vendor/plugins/newrelic_rpm/lib/tasks/install.rake
  58. +137 −0 vendor/plugins/newrelic_rpm/newrelic.yml
  59. +9 −0 vendor/plugins/newrelic_rpm/newrelic_spec.rb
  60. +6 −0 vendor/plugins/newrelic_rpm/recipes/newrelic.rb
  61. +1 −0 vendor/plugins/newrelic_rpm/spec_helper.rb
  62. +28 −0 vendor/plugins/newrelic_rpm/test/config/newrelic.yml
  63. +35 −0 vendor/plugins/newrelic_rpm/test/config/test_config.rb
  64. +25 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/agent_test_controller.rb
  65. +40 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/mock_ar_connection.rb
  66. +23 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/mock_scope_listener.rb
  67. +15 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/model_fixture.rb
  68. +90 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_active_record.rb
  69. +148 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_agent.rb
  70. +113 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_collection_helper.rb
  71. +77 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_controller.rb
  72. +52 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_dispatcher_instrumentation.rb
  73. +127 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_error_collector.rb
  74. +306 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_method_tracer.rb
  75. +218 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_stats_engine.rb
  76. +37 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_synchronize.rb
  77. +175 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_transaction_sample.rb
  78. +194 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_transaction_sample_builder.rb
  79. +302 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_transaction_sampler.rb
  80. +101 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/tc_worker_loop.rb
  81. +13 −0 vendor/plugins/newrelic_rpm/test/new_relic/agent/testable_agent.rb
  82. +36 −0 vendor/plugins/newrelic_rpm/test/new_relic/tc_config.rb
  83. +64 −0 vendor/plugins/newrelic_rpm/test/new_relic/tc_deployments_api.rb
  84. +94 −0 vendor/plugins/newrelic_rpm/test/new_relic/tc_environment.rb
  85. +150 −0 vendor/plugins/newrelic_rpm/test/new_relic/tc_metric_spec.rb
  86. +9 −0 vendor/plugins/newrelic_rpm/test/new_relic/tc_shim_agent.rb
  87. +141 −0 vendor/plugins/newrelic_rpm/test/new_relic/tc_stats.rb
  88. +40 −0 vendor/plugins/newrelic_rpm/test/test_helper.rb
  89. +44 −0 vendor/plugins/newrelic_rpm/test/ui/tc_newrelic_helper.rb
  90. +200 −0 vendor/plugins/newrelic_rpm/ui/controllers/newrelic_controller.rb
  91. +55 −0 vendor/plugins/newrelic_rpm/ui/helpers/google_pie_chart.rb
  92. +286 −0 vendor/plugins/newrelic_rpm/ui/helpers/newrelic_helper.rb
  93. +49 −0 vendor/plugins/newrelic_rpm/ui/views/layouts/newrelic_default.rhtml
  94. +27 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_explain_plans.rhtml
  95. +12 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_sample.rhtml
  96. +28 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_segment.rhtml
  97. +14 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_segment_row.rhtml
  98. +22 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_show_sample_detail.rhtml
  99. +19 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_show_sample_sql.rhtml
  100. +3 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_show_sample_summary.rhtml
  101. +11 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_sql_row.rhtml
  102. +30 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_stack_trace.rhtml
  103. +12 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/_table.rhtml
  104. +45 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/explain_sql.rhtml
  105. BIN vendor/plugins/newrelic_rpm/ui/views/newrelic/images/arrow-close.png
  106. BIN vendor/plugins/newrelic_rpm/ui/views/newrelic/images/arrow-open.png
  107. BIN vendor/plugins/newrelic_rpm/ui/views/newrelic/images/blue_bar.gif
  108. BIN vendor/plugins/newrelic_rpm/ui/views/newrelic/images/gray_bar.gif
  109. +37 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/index.rhtml
  110. +107 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/javascript/transaction_sample.js
  111. +2 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/sample_not_found.rhtml
  112. +62 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/show_sample.rhtml
  113. +3 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/show_source.rhtml
  114. +394 −0 vendor/plugins/newrelic_rpm/ui/views/newrelic/stylesheets/style.css
@@ -0,0 +1,37 @@
+Copyright (c) 2008 New Relic, Inc. All rights reserved.
+
+Certain inventions disclosed in this file may be claimed within
+patents owned or patent applications filed by New Relic, Inc. or third
+parties.
+
+Subject to the terms of this notice, New Relic grants you a
+nonexclusive, nontransferable license, without the right to
+sublicense, to (a) install and execute one copy of these files on any
+number of workstations owned or controlled by you and (b) distribute
+verbatim copies of these files to third parties. As a condition to the
+foregoing grant, you must provide this notice along with each copy you
+distribute and you must not remove, alter, or obscure this notice. All
+other use, reproduction, modification, distribution, or other
+exploitation of these files is strictly prohibited, except as may be set
+forth in a separate written license agreement between you and New
+Relic. The terms of any such license agreement will control over this
+notice. The license stated above will be automatically terminated and
+revoked if you exceed its scope or violate any of the terms of this
+notice.
+
+This License does not grant permission to use the trade names,
+trademarks, service marks, or product names of New Relic, except as
+required for reasonable and customary use in describing the origin of
+this file and reproducing the content of this notice. You may not
+mark or brand this file with any trade name, trademarks, service
+marks, or product names other than the original brand (if any)
+provided by New Relic.
+
+Unless otherwise expressly agreed by New Relic in a separate written
+license agreement, these files are provided AS IS, WITHOUT WARRANTY OF
+ANY KIND, including without any implied warranties of MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a
+condition to your use of these files, you are solely responsible for
+such use. New Relic will have no liability to you for direct,
+indirect, consequential, incidental, special, or punitive damages or
+for lost profits or data.
@@ -0,0 +1,136 @@
+= New Relic RPM
+
+* http://www.newrelic.com
+
+New Relic RPM is a Ruby performance management system, developed by
+New Relic, Inc. RPM provides you with deep information about the
+performance of your Ruby on Rails or Merb application as it runs in
+production. The New Relic Agent is distributed as a either a Rails
+plugin or a Gem, both hosted on RubyForge.
+
+The New Relic Agent runs in one of two modes:
+
+* Developer Mode : Adds a web interface mapped to /newrelic to your
+ application for showing detailed performance metrics on a page by
+ page basis.
+
+* Production Mode : Low overhead instrumentation that captures
+ detailed information on your application running in production and
+ transmits them to rpm.newrelic.com where you can monitor them in
+ real time.
+
+=== Developer Mode
+
+Developer mode is on by default when you run your application in the
+development environment (but not when it runs in other environments.)
+When running in developer mode, RPM will track the performance of
+every http request serviced by your application, and store in memory
+this information for the last 100 http transactions.
+
+When running in Developer Mode, the RPM will also add a few pages to
+your application that allow you to analyze this performance
+information. (Don't worry - those pages are not added to your
+application's routes when you run in production mode.)
+
+To view this performance information, including detailed SQL statement
+analysis, open '/newrelic' in your web application. For instance if
+you are running mongrel or thin on port 3000, enter the following into
+your browser:
+
+http://localhost:3000/newrelic
+
+=== Production Mode
+
+To monitor your applications in production, create an account at
+http://newrelic.com/get-RPM.html
+
+When your application runs in the production environment, the New
+Relic agent runs in production mode. It connects to the New Relic RPM
+service and sends deep performance data to the RPM service for your
+analysis. To view this data, login to http://rpm.newrelic.com.
+
+NOTE: You must have a valid account and license key to view this data
+online. When you sign up for an account at www.newrelic.com, you will
+be provided with a license key, as well as a default configuration
+file for New Relic RPM. You can either paste your license key into
+your existing configuration file, config/newrelic.yml, or you can
+replace that config file with the one included in your welcome email.
+
+== Installation
+
+RPM requires an agent be installed in the application as either a
+Rails plug-in or a gem. Both are available on RubyForge--instructions
+below.
+
+=== Git your RPM on!
+
+The agent is also available on Github under newrelic/rpm. As of March,
+2009, we keep the latest release on the master, the edge on a working
+branch, and previous releases with tags. Fork away!
+
+=== Requirements:
+
+Ruby 1.8.6
+Rails 1.2.6 or above
+Merb 1.0 or above
+
+=== Rails Plug-In Installation
+
+ script/plugin install http://newrelic.rubyforge.org/svn/newrelic_rpm
+
+=== Gem Installation
+
+ sudo gem install newrelic_rpm
+
+For Rails, edit environment.rb and add to the initalizer block:
+
+ config.gem "newrelic_rpm"
+
+The Developer Mode is unavailable when using the gem on Rails versions
+prior to 2.0.
+
+== Merb Support
+
+To monitor a merb app install the newrelic_rpm gem and add
+
+ dependency 'newrelic_rpm'
+
+to your init.rb file.
+
+Current features implemented:
+
+ * Standard monitoring, overview pages
+ * Error capturing
+ * Full Active Record instrumentation, including SQL explains
+ * Very limited Data Mapper instrumentation
+ * Transaction Traces are implemented but will not be very useful
+ with Data Mapper until more work is done with the Data Mapper
+ instrumentation
+
+Still under development:
+
+ * Developer Mode
+ * Data Mapper bindings
+
+Also some of the instrumentation has been implemented with method
+chaining, a mechanism that truly goes against the merb way. This was
+necessary in some cases where the API’s were not yet available or
+understood well enough to use. Converting these to hook methods using
+the Merb public API is a work in progress.
+
+== Support
+
+Reach out to us--and to fellow RPM users--at
+http://support.newrelic.com. There you'll find documentation, FAQs,
+and forums where you can submit suggestions and discuss RPM with New
+Relic staff and other users.
+
+Find a bug? E-mail support@newrelic.com, or post it to
+support.newrelic.com.
+
+For other support channels, see http://www.newrelic.com/support.
+
+Thank you, and may your application scale to infinity plus one.
+
+Lew Cirne, Founder and CEO
+New Relic, Inc.
@@ -0,0 +1,40 @@
+require 'rubygems'
+require 'rake/gempackagetask'
+require 'lib/new_relic/version.rb'
+
+GEM_NAME = "newrelic_rpm"
+GEM_VERSION = NewRelic::VERSION::STRING
+AUTHOR = "Bill Kayser"
+EMAIL = "bkayser@newrelic.com"
+HOMEPAGE = "http://www.newrelic.com"
+SUMMARY = "New Relic Ruby Performance Monitoring Agent"
+
+spec = Gem::Specification.new do |s|
+ s.rubyforge_project = 'newrelic'
+ s.name = GEM_NAME
+ s.version = GEM_VERSION
+ s.platform = Gem::Platform::RUBY
+ s.has_rdoc = true
+ s.extra_rdoc_files = ["README", "LICENSE"]
+ s.summary = SUMMARY
+ s.description = s.summary
+ s.author = AUTHOR
+ s.email = EMAIL
+ s.homepage = HOMEPAGE
+ s.require_path = 'lib'
+ s.files = %w(install.rb LICENSE README newrelic.yml Rakefile) + Dir.glob("{lib,bin,recipes,test,ui}/**/*")
+ s.bindir = "bin" # Use these for applications.
+ s.executables = ["newrelic_cmd"]
+ s.default_executable = "newrelic_cmd"
+end
+
+Rake::GemPackageTask.new(spec) do |pkg|
+ pkg.gem_spec = spec
+end
+
+desc "Create a gemspec file"
+task :gemspec do
+ File.open("#{GEM_NAME}.gemspec", "w") do |file|
+ file.puts spec.to_ruby
+ end
+end
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+# executes one of the commands in the new_relic/commands directory
+# pass the name of the command as an argument
+require File.dirname(__FILE__) + '/../lib/new_relic/commands/new_relic_commands'
@@ -0,0 +1,30 @@
+# This is the initialization for the RPM Rails plugin
+require 'new_relic/config'
+
+# If you are having problems seeing data, be sure and check the
+# newrelic_agent log files.
+#
+# If you can't find any log files and you don't see anything in your
+# application log files, try uncommenting these lines to verify
+# the plugin is being loaded, then contact support@newrelic.com
+# if you are unable to resolve the issue.
+# STDOUT.puts "RPM detected environment: #{NewRelic::Config.instance.local_env}, RAILS_ENV: #{RAILS_ENV}"
+
+# Initializer for the NewRelic Agent
+
+begin
+ # JRuby's glassfish plugin is trying to run the Initializer twice,
+ # which isn't a good thing so we ignore subsequent invocations here.
+ if ! defined?(::NEWRELIC_STARTED)
+ ::NEWRELIC_STARTED = "#{caller.join("\n")}"
+ NewRelic::Config.instance.start_plugin (defined?(config) ? config : nil)
+ else
+ NewRelic::Config.instance.log.debug "Attempt to initialize the plugin twice!"
+ NewRelic::Config.instance.log.debug "Original call: \n#{::NEWRELIC_STARTED}"
+ NewRelic::Config.instance.log.debug "Here we are now: \n#{caller.join("\n")}"
+ end
+rescue => e
+ NewRelic::Config.instance.log! "Error initializing New Relic plugin (#{e})", :error
+ NewRelic::Config.instance.log! e.backtrace.join("\n"), :error
+ NewRelic::Config.instance.log! "Agent is disabled."
+end
@@ -0,0 +1,37 @@
+require 'ftools'
+require 'erb'
+
+# Install a newrelic.yml file into the local config directory.
+# If no such directory exists, install it in ~/.newrelic.
+#
+# If a config file already exists, print a warning and exit.
+#
+if File.directory? "config"
+ dest_dir = "config"
+else
+ dest_dir = File.join(ENV["HOME"],".newrelic") rescue nil
+ FileUtils.mkdir(dest_dir) if dest_dir
+end
+
+src_config_file = File.join(File.dirname(__FILE__),"newrelic.yml")
+dest_config_file = File.join(dest_dir, "newrelic.yml") if dest_dir
+
+if !dest_dir
+ STDERR.puts "Could not find a config or ~/.newrelic directory to locate the default newrelic.yml file"
+elsif File::exists? dest_config_file
+ STDERR.puts "\nA config file already exists at #{dest_config_file}.\n"
+else
+ generated_for_user = ""
+ license_key = "PASTE_YOUR_KEY_HERE"
+ yaml = ERB.new(File.read(src_config_file)).result(binding)
+ File.open( dest_config_file, 'w' ) do |out|
+ out.puts yaml
+ end
+
+ puts IO.read(File.join(File.dirname(__FILE__), 'README'))
+ puts "\n--------------------------------------------------------\n"
+ puts "Installing a default configuration file in #{dest_dir}."
+ puts "To monitor your application in production mode, you must enter a license key."
+ puts "See #{dest_config_file}"
+ puts "For a license key, sign up at http://rpm.newrelic.com/signup."
+end
@@ -0,0 +1,29 @@
+require 'new_relic/version'
+require 'new_relic/local_environment'
+require 'new_relic/stats'
+require 'new_relic/metric_spec'
+require 'new_relic/metric_data'
+require 'new_relic/transaction_analysis'
+require 'new_relic/transaction_sample'
+require 'new_relic/noticed_error'
+
+require 'new_relic/agent/chained_call'
+require 'new_relic/agent/agent'
+require 'new_relic/agent/method_tracer'
+require 'new_relic/agent/synchronize'
+require 'new_relic/agent/worker_loop'
+require 'new_relic/agent/stats_engine'
+require 'new_relic/agent/collection_helper'
+require 'new_relic/agent/transaction_sampler'
+require 'new_relic/agent/error_collector'
+
+require 'set'
+require 'sync'
+require 'thread'
+require 'resolv'
+require 'timeout'
+
+
+module NewRelic::Agent
+
+end
Oops, something went wrong.

0 comments on commit 6f32288

Please sign in to comment.