Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Remnant gathers timing information in Rails such as request time, total filters time, template render times and sql query timings.
Ruby

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.rvmrc
Gemfile
Gemfile.lock
LICENSE
README.md
Rakefile
remnant.gemspec

README.md

Remnant hooks into your Rails and discovers your hidden statistics.

Supports
  • Rails 2.3.x with REE for GC (v0.4.3)
  • Rails 3.2.x with 1.9.3 and 2.0.0 for GC (v0.9.x)

What Remnant Captures

  • request - time it takes for a request to be served
  • action - time it takes for the controller action to finish
  • view - total time for the totality of render to complete
  • templates - time it takes for each template/partial to render
  • filters - time it takes for each filter to run
  • db - total time it takes for all queries to execute
  • queries - time it takes for each sql query to execute
  • gc - time spent inside the GC (if avaialble ree, 1.9.3, etc)

These stats are sent to statsd: request, action, view, gc, db, filters

Install

Using bundler:

gem 'remnant'

Usage

Add an initializer to configure (or call configure during application startup):

Remnant.configure do
  # hostname of statsd server
  host "https://remnant.statsd"

  # port of statsd server
  port 8125

  # app name or other unique key for multiple app usage
  tagged "custom"

  # environment of application, defaults to Rails.env
  # included in payload
  environment "production"

  hook do |results|
    # custom hook to run after each remnant capture with results
    # results = {key => ms, key2 => ms2}
  end
end

Remnant::Rails.setup! # needed if on Rails 2.3.x

If you want to capture the times it takes to render templates/partials you should enable Template capturing in a before filter (or before rendering takes place)

before_filter {|c| Remnant::Template.enable! }

If you want to capture the sql query times you should enable Database capturing in a before filter (or before any database calls take place)

before_filter {|c| Remnant::Database.enable! }

Example of using hook

Below is a way to use all captured information remnant offers

hook do |results|
  results.map do |key, ms|
    # loop through specially captures results
    # [request, action, view]
  end

  # total time for db
  Remnant::Database.total_time.to_i

  # total time for all filters
  Remnant::Filters.total_time.to_i

  # time for individual filters
  # [{:type => 'before|after|round',
  #   :name => filter_name,
  #   :time => microseconds,
  #   :ms => ms
  # }]
  Remnant::Filters.filters.to_json

  # time for individual templates/partials
  # [view => {'time' => ms,
  #           'exclusive' => ms,
  #           'depth' => depth,
  #           'children' => []
  # }]
  if Remnant::Template.enabled?
    Remnant::Template.trace.root.children.map(&:results).to_json
  end

  # time for sql queries
  if Remnant::Database.enabled?
    queries = Remnant::Database.queries.map {|q| {:sql => q.sql, :ms => q.time * 1000}}
  end

  # time spent in GC and number of collection attempts
  Remnant::GC.time.to_i
  Remnant::GC.collections.to_i
end
Note

Remnant logs to statsd only if your environment is production, demo or staging. For all other environments it logs via Rails.logger.info

Author

Original author: John "asceth" Long

Something went wrong with that request. Please try again.