Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/srawlins/rack-allocation_stats
Rack middleware for tracing object allocations in Ruby 2.1
https://github.com/srawlins/rack-allocation_stats
Last synced: 6 days ago
JSON representation
Rack middleware for tracing object allocations in Ruby 2.1
- Host: GitHub
- URL: https://github.com/srawlins/rack-allocation_stats
- Owner: srawlins
- License: apache-2.0
- Created: 2013-08-19T15:57:53.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2014-02-07T22:30:14.000Z (almost 11 years ago)
- Last Synced: 2024-08-01T19:55:49.453Z (3 months ago)
- Language: Ruby
- Size: 616 KB
- Stars: 29
- Watchers: 6
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.markdown
- Changelog: CHANGELOG.markdown
- License: LICENSE
Awesome Lists containing this project
README
Rack AllocationStats [![Build Status](https://travis-ci.org/srawlins/rack-allocation_stats.png?branch=master)](https://travis-ci.org/srawlins/rack-allocation_stats)
====================Rack AllocationStats is a Rack Middleware, similar in design to
[rack-perftools_profiler](https://github.com/bhb/rack-perftools_profiler), that
will show information about object allocations that occurr during an HTTP
request. The heart of Rack AllocationStats is the
[AllocationStats](https://github.com/srawlins/allocation_stats) gem. Install
Rack AllocationStats with Ruby 2.1 (newer than preview1) and:* Bundler: add `gem 'rack-allocation_stats'` to your Gemfile, or
* RubyGems: run `gem install rack-allocation_stats`Rack AllocationStats must also be included in your Rack application's middleware:
Rails:
```ruby
# in your config/application.rb
config.middleware.use ::Rack::AllocationStats
```Other Rack apps:
```ruby
# in your rackup file
use Rack::AllocationStats
```Summary
=======In order to trigger Rack AllocationStats, a parameter must be appended to the
request URL: `ras[trace]=true` ('ras' for Rack AllocationStats). This will
trace the object allocations that occur inside your Rack app during your
request.For example, if you have a Rack app that responds to the following request:
```bash
http://my.rack.app:9292/path?foo=bar
```then you can just add `&ras[trace]=true` to activate Rack AllocationStats:
```bash
http://my.rack.app:9292/path?foo=bar&ras[trace]=true
```Instead of the normal response that your app generates, Rack
AllocationStats will respond with a tabular listing of allocation statistics.![Demonstration](basic-screen.gif)
There are additional paramters that you can attach to the request URL to change
the response:Help text
=========To see some help text on what options are available, use `ras[trace]=true`, and
also add `ras[help]`. Rack AllocationStats will respond with man page-style
help text.Limit the file system scope
===========================If you only wish to see allocations that originate from a certain directory, you can
use the `ras[scope]` parameter. For example:* To limit the list of allocations to those with a `sourcefile` that includes
`yajl`, append to the location:
```
?ras[trace]=true&ras[scope]=yajl
```* To limit the list of allocations to those in the present working directory.
`.` is a special value for `ras[scope]` that is expanded to the full path of
the present working directory, append to the location:
```
?ras[trace]=true&ras[scope]=.
```Alias paths
===========In order to reduce the with of the `sourcefile`, you can add
`ras[alias_paths]=true`, which will shorten paths in the following directories:* your present working directory (to be replaced with ``)
* Ruby's `lib` directory (to be replaced with ``)
* the Gem directory, where installed gems live (eg: sqlite3-1.3.8 to be
replaced with ``)Change the output
=================There are several values that you can pass with `ras[output]` parameter:
* `columnar` is the default response output, displaying allocation groups in
text columns.
* `json` will respond with a JSON string representing all of the groups of
allocations (by default grouped by sourcefile, sourceline, and object class).
* `interactive` will respond with a JavaScript application that allows you to
interactively tweak how you wish to group, arrange, and filter the traced
allocations.Request multiple times
======================If your Rack application appears to have some variability, you can use
`ras[times]=N` to pass the request onto your Rack application `N` times. The
response that Rack AllocationStats generates will contain all of the requests
that occurred over the `N` requests.