Class: Appsignal::Rack::SinatraBaseInstrumentation
- Defined in:
- lib/appsignal/rack/sinatra_instrumentation.rb
Instance Attribute Summary collapse
-
#raise_errors_on ⇒ Object
readonly
Returns the value of attribute raise_errors_on.
Instance Method Summary collapse
- #action_name(env) ⇒ Object
- #call(env) ⇒ Object
- #call_with_appsignal_monitoring(env) ⇒ Object
-
#initialize(app, options = {}) ⇒ SinatraBaseInstrumentation
constructor
A new instance of SinatraBaseInstrumentation.
Constructor Details
#initialize(app, options = {}) ⇒ SinatraBaseInstrumentation
Returns a new instance of SinatraBaseInstrumentation.
29 30 31 32 33 |
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 29 def initialize(app, = {}) Appsignal.logger.debug 'Initializing Appsignal::Rack::SinatraInstrumentation' @app, @options = app, @raise_errors_on = raise_errors?(@app) end |
Instance Attribute Details
#raise_errors_on ⇒ Object (readonly)
Returns the value of attribute raise_errors_on.
27 28 29 |
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 27 def raise_errors_on @raise_errors_on end |
Instance Method Details
#action_name(env) ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 75 def action_name(env) return unless env['sinatra.route'] if env['SCRIPT_NAME'] method, route = env['sinatra.route'].split(" ") "#{method} #{env['SCRIPT_NAME']}#{route}" else env['sinatra.route'] end end |
#call(env) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 35 def call(env) if Appsignal.active? call_with_appsignal_monitoring(env) else @app.call(env) end end |
#call_with_appsignal_monitoring(env) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/appsignal/rack/sinatra_instrumentation.rb', line 43 def call_with_appsignal_monitoring(env) if @options[:params_method] env[:params_method] = @options[:params_method] end request = @options.fetch(:request_class, Sinatra::Request).new(env) transaction = Appsignal::Transaction.create( SecureRandom.uuid, Appsignal::Transaction::HTTP_REQUEST, request, {:force => @options.include?(:force) && @options[:force]} ) begin Appsignal.instrument('process_action.sinatra') do @app.call(env) end rescue => error transaction.set_error(error) raise error ensure # If raise_error is off versions of Sinatra don't raise errors, but store # them in the sinatra.error env var. if !@raise_errors_on && env['sinatra.error'] && !env['sinatra.skip_appsignal_error'] transaction.set_error(env['sinatra.error']) end transaction.set_action(action_name(env)) transaction.('path', request.path) transaction.('method', request.request_method) transaction.set_http_or_background_queue_start Appsignal::Transaction.complete_current! end end |