Module: Rack::Timeout::Rollbar

Defined in:
lib/rack/timeout/rollbar.rb

Overview

Groups timeout exceptions in rollbar by exception class, http method, and url.

Usage: after requiring rollbar (say, in your rollbar initializer file), call:

require "rack/timeout/rollbar"

Ruby 2.1 is required as we use ‘Module.prepend`.

To use a custom fingerprint for grouping:

Rack::Timeout::Rollbar.fingerprint do |exception, env|
  # … return some kind of string derived from exception and env
end

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.default_rack_timeout_fingerprint(exception, env) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/rack/timeout/rollbar.rb', line 23

def self.default_rack_timeout_fingerprint(exception, env)
  request = ::Rack::Request.new(env)
  [ exception.class.name,
    request.request_method,
    request.path
  ].join(" ")
end

.fingerprint(&block) ⇒ Object



19
20
21
# File 'lib/rack/timeout/rollbar.rb', line 19

def self.fingerprint(&block)
  define_method(:rack_timeout_fingerprint) { |exception, env| block[exception, env] }
end

Instance Method Details

#build_payload(level, message, exception, extra) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/rack/timeout/rollbar.rb', line 34

def build_payload(level, message, exception, extra)
  payload = super(level, message, exception, extra)

  return payload unless exception.is_a?(::Rack::Timeout::ExceptionWithEnv) \
                     && payload.respond_to?(:[])                           \
                     && payload.respond_to?(:[]=)

  data = payload["data"]
  return payload unless data.respond_to?(:[]=)

  payload             = payload.dup
  data                = data.dup
  data["fingerprint"] = rack_timeout_fingerprint(exception, exception.env)
  payload["data"]     = data

  return payload
end