class OpenTracing::Instrumentation::Rack::TraceMiddleware
TraceMiddleware
observer rack requests.
Constants
- DEFAULT_COMMAND_NAME_BUILDER
- REQUEST_URI
Attributes
app[R]
http_tagger[R]
logger[R]
tracer[R]
Public Class Methods
new( app, logger: nil, command_name_builder: DEFAULT_COMMAND_NAME_BUILDER, http_tagger: HttpTagger.new, tracer: OpenTracing.global_tracer )
click to toggle source
# File lib/opentracing/instrumentation/rack/trace_middleware.rb, line 12 def initialize( app, logger: nil, command_name_builder: DEFAULT_COMMAND_NAME_BUILDER, http_tagger: HttpTagger.new, tracer: OpenTracing.global_tracer ) @app = app @logger = logger @command_name_builder = command_name_builder @http_tagger = http_tagger @tracer = tracer end
Public Instance Methods
call(env)
click to toggle source
# File lib/opentracing/instrumentation/rack/trace_middleware.rb, line 26 def call(env) trace_request(env) do |span| catch_error(span) do status, headers, body = app.call(env) set_response_tags(span, status, headers) [status, headers, body] end end end
Private Instance Methods
catch_error(span) { || ... }
click to toggle source
# File lib/opentracing/instrumentation/rack/trace_middleware.rb, line 57 def catch_error(span) yield rescue StandardError => e logger&.error(e) error_tag(span, e) raise end
error_tag(span, error)
click to toggle source
# File lib/opentracing/instrumentation/rack/trace_middleware.rb, line 90 def error_tag(span, error) span.set_tag('error', true) span.log_kv('error.kind': error.class.to_s) end
set_status_tag(span, status)
click to toggle source
# File lib/opentracing/instrumentation/rack/trace_middleware.rb, line 80 def set_status_tag(span, status) span.set_tag('http.status', status) end
trace_request(env) { |span| ... }
click to toggle source
# File lib/opentracing/instrumentation/rack/trace_middleware.rb, line 44 def trace_request(env) extracted_ctx = tracer.extract(OpenTracing::FORMAT_RACK, env) logger&.info('Tracing context extracted') if extracted_ctx command_name = @command_name_builder.build_command_name(env) tracer.start_active_span( command_name, child_of: extracted_ctx, tags: request_tags(env), ) do |scope| yield(scope.span) end end