Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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.