Class: Appsignal::Rack::SinatraInstrumentation

Inherits:
Object
  • Object
show all
Defined in:
lib/appsignal/rack/sinatra_instrumentation.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ SinatraInstrumentation

Returns a new instance of SinatraInstrumentation.



4
5
6
7
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 4

def initialize(app, options = {})
  Appsignal.logger.debug 'Initializing Appsignal::Rack::SinatraInstrumentation'
  @app, @options = app, options
end

Instance Method Details

#call(env) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 9

def call(env)
  ActiveSupport::Notifications.instrument(
    'process_action.sinatra',
    raw_payload(env)
  ) do |payload|
    begin
      @app.call(env)
    ensure
      # This information is available only after the
      # request has been processed by Sinatra.
      payload[:action] = env['sinatra.route']
    end
  end
ensure
  # In production newer versions of Sinatra don't raise errors, but store
  # them in the sinatra.error env var.
  Appsignal::Transaction.current.add_exception(env['sinatra.error']) if env['sinatra.error']
end

#raw_payload(env) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 28

def raw_payload(env)
  request = @options.fetch(:request_class, ::Sinatra::Request).new(env)
  params = request.public_send(@options.fetch(:params_method, :params))
  {
    :params  => params,
    :session => request.session,
    :method  => request.request_method,
    :path    => request.path
  }
end