Class: Appsignal::Rack::StreamingListener Private
- Defined in:
- lib/appsignal/rack/streaming_listener.rb
Overview
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.
Appsignal module that tracks exceptions in Streaming rack responses.
Instance Method Summary collapse
- #call(env) ⇒ Object private
- #call_with_appsignal_monitoring(env) ⇒ Object private
-
#initialize(app, options = {}) ⇒ StreamingListener
constructor
private
A new instance of StreamingListener.
Constructor Details
#initialize(app, options = {}) ⇒ StreamingListener
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 StreamingListener.
9 10 11 12 13 |
# File 'lib/appsignal/rack/streaming_listener.rb', line 9 def initialize(app, = {}) Appsignal.logger.debug "Initializing Appsignal::Rack::StreamingListener" @app = app @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/streaming_listener.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 49 |
# File 'lib/appsignal/rack/streaming_listener.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 ) # Instrument a `process_action`, to set params/action name status, headers, body = Appsignal.instrument("process_action.rack") do begin @app.call(env) rescue Exception => e # rubocop:disable Lint/RescueException transaction.set_error(e) raise e ensure transaction.set_action_if_nil(env["appsignal.action"]) transaction.("path", request.path) transaction.("method", request.request_method) transaction.set_http_or_background_queue_start end end # Wrap the result body with our StreamWrapper [status, headers, StreamWrapper.new(body, transaction)] end |