class OpenTelemetry::Adapters::Sinatra::Middlewares::TracerMiddleware
Middleware to trace Sinatra
requests
Attributes
app[R]
Public Class Methods
new(app)
click to toggle source
# File lib/opentelemetry/adapters/sinatra/middlewares/tracer_middleware.rb, line 13 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/opentelemetry/adapters/sinatra/middlewares/tracer_middleware.rb, line 17 def call(env) tracer.in_span( env['PATH_INFO'], attributes: { 'http.method' => env['REQUEST_METHOD'], 'http.url' => env['PATH_INFO'] }, kind: :server, with_parent_context: parent_context(env) ) do |span| app.call(env).tap { |resp| trace_response(span, env, resp) } end end
Private Instance Methods
parent_context(env)
click to toggle source
# File lib/opentelemetry/adapters/sinatra/middlewares/tracer_middleware.rb, line 33 def parent_context(env) OpenTelemetry.propagation.http.extract(env) end
trace_response(span, env, resp)
click to toggle source
# File lib/opentelemetry/adapters/sinatra/middlewares/tracer_middleware.rb, line 41 def trace_response(span, env, resp) status, _headers, _response_body = resp span.set_attribute('http.status_code', status) span.set_attribute('http.status_text', ::Rack::Utils::HTTP_STATUS_CODES[status]) span.set_attribute('http.route', env['sinatra.route'].split.last) if env['sinatra.route'] span.status = OpenTelemetry::Trace::Status.http_to_status(status) end
tracer()
click to toggle source
# File lib/opentelemetry/adapters/sinatra/middlewares/tracer_middleware.rb, line 37 def tracer OpenTelemetry::Adapters::Sinatra::Adapter.instance.tracer end