Module: OneApm::Rack::MiddlewareTracing
- Included in:
- MiddlewareBase, MiddlewareWrapper
- Defined in:
- lib/one_apm/rack/middleware_tracing.rb
Constant Summary collapse
- OA_TXN_STARTED_KEY =
'oneapm.transaction_started'.freeze
Instance Method Summary collapse
- #_oa_has_middleware_tracing ⇒ Object
- #build_transaction_options(env, first_middleware) ⇒ Object
- #call(env) ⇒ Object
- #capture_http_response_code(state, result) ⇒ Object
- #events ⇒ Object
- #merge_first_middleware_options(opts, env) ⇒ Object
- #note_transaction_started(env) ⇒ Object
Instance Method Details
#_oa_has_middleware_tracing ⇒ Object
28 29 30 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 28 def _oa_has_middleware_tracing true end |
#build_transaction_options(env, first_middleware) ⇒ Object
32 33 34 35 36 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 32 def (env, first_middleware) opts = opts = (opts, env) if first_middleware opts end |
#call(env) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 56 def call(env) first_middleware = note_transaction_started(env) state = OneApm::TransactionState.tl_get begin = (env, first_middleware) current_transaction = OneApm::Transaction.start(state, category, ) current_transaction.ignore_frames << [:transaction_name] if respond_to?(:middleware_ignore?) && middleware_ignore? events.notify(:before_call, env) if first_middleware result = (target == self) ? traced_call(env) : target.call(env) capture_http_response_code(state, result) events.notify(:after_call, env, result) if first_middleware result rescue Exception => e OneApm::Manager.notice_error(e) raise e ensure OneApm::Transaction.stop(state) end end |
#capture_http_response_code(state, result) ⇒ Object
50 51 52 53 54 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 50 def capture_http_response_code(state, result) if result.is_a?(Array) && state.current_transaction state.current_transaction.http_response_code = result[0] end end |
#events ⇒ Object
82 83 84 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 82 def events OneApm::Manager.agent.events end |
#merge_first_middleware_options(opts, env) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 38 def (opts, env) opts.merge( :request => ::Rack::Request.new(env), :apdex_start_time => OneApm::Agent::Instrumentation::QueueTime.(env) ) end |
#note_transaction_started(env) ⇒ Object
45 46 47 |
# File 'lib/one_apm/rack/middleware_tracing.rb', line 45 def note_transaction_started(env) env[OA_TXN_STARTED_KEY] = true unless env[OA_TXN_STARTED_KEY] end |