class OpenTracing::Instrumentation::Rack::ExtractMiddleware
ExtractMiddleware
extract trace context and push it to scope manager.
Public Class Methods
new( app, tracer: OpenTracing.global_tracer, logger: nil )
click to toggle source
@param app [RackApp] inner rack application @param tracer [OpenTracing::Tracer] @param logger [Logger]
# File lib/opentracing/instrumentation/rack/extract_middleware.rb, line 22 def initialize( app, tracer: OpenTracing.global_tracer, logger: nil ) @app = app @tracer = tracer @logger = logger end
Public Instance Methods
call(env)
click to toggle source
@param env [Hash<String, String>] rack env
# File lib/opentracing/instrumentation/rack/extract_middleware.rb, line 33 def call(env) span_context = @tracer.extract(OpenTracing::FORMAT_RACK, env) return @app.call(env) unless span_context with_scope(span_context) do @app.call(env) end end
Private Instance Methods
safe_close_scope(scope)
click to toggle source
# File lib/opentracing/instrumentation/rack/extract_middleware.rb, line 60 def safe_close_scope(scope) scope&.close rescue StandardError => e @logger&.error(e) end
safe_create_scope(span_context)
click to toggle source
# File lib/opentracing/instrumentation/rack/extract_middleware.rb, line 52 def safe_create_scope(span_context) fake_span = FakeSpan.new(span_context) @tracer.scope_manager.activate(fake_span, finish_on_close: false) rescue StandardError => e @logger&.error(e) nil end
with_scope(span_context) { || ... }
click to toggle source
# File lib/opentracing/instrumentation/rack/extract_middleware.rb, line 44 def with_scope(span_context) scope = safe_create_scope(span_context) yield ensure safe_close_scope(scope) end