Class: Appsignal::Rack::GenericInstrumentation Private

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

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Instance Method Summary collapse

Constructor Details

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of GenericInstrumentation.



9
10
11
12
13
# File 'lib/appsignal/rack/generic_instrumentation.rb', line 9

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

Instance Method Details

#call(env) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



15
16
17
18
19
20
21
# File 'lib/appsignal/rack/generic_instrumentation.rb', line 15

def call(env)
  if Appsignal.active?
    call_with_appsignal_monitoring(env)
  else
    @app.call(env)
  end
end

#call_with_appsignal_monitoring(env) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/appsignal/rack/generic_instrumentation.rb', line 23

def call_with_appsignal_monitoring(env)
  request = ::Rack::Request.new(env)
  transaction = Appsignal::Transaction.create(
    SecureRandom.uuid,
    Appsignal::Transaction::HTTP_REQUEST,
    request
  )
  begin
    Appsignal.instrument("process_action.generic") do
      @app.call(env)
    end
  rescue Exception => error # rubocop:disable Lint/RescueException
    transaction.set_error(error)
    raise error
  ensure
    if env["appsignal.route"]
      transaction.set_action_if_nil(env["appsignal.route"])
    else
      transaction.set_action_if_nil("unknown")
    end
    transaction.("path", request.path)
    transaction.("method", request.request_method)
    transaction.set_http_or_background_queue_start
    Appsignal::Transaction.complete_current!
  end
end