lib/opentelemetry/instrumentation/sinatra/middlewares/tracer_middleware.rb in opentelemetry-instrumentation-sinatra-0.21.4 vs lib/opentelemetry/instrumentation/sinatra/middlewares/tracer_middleware.rb in opentelemetry-instrumentation-sinatra-0.21.5
- old
+ new
@@ -14,20 +14,28 @@
def initialize(app)
@app = app
end
def call(env)
- @app.call(env)
+ response = @app.call(env)
ensure
- trace_response(env)
+ trace_response(env, response)
end
- def trace_response(env)
+ def trace_response(env, response)
span = OpenTelemetry::Instrumentation::Rack.current_span
return unless span.recording?
span.set_attribute('http.route', env['sinatra.route'].split.last) if env['sinatra.route']
span.name = env['sinatra.route'] if env['sinatra.route']
+
+ return if response.nil?
+
+ sinatra_response = ::Sinatra::Response.new([], response.first)
+ return unless sinatra_response.server_error?
+
+ span.record_exception(env['sinatra.error']) if env['sinatra.error']
+ span.status = OpenTelemetry::Trace::Status.error
end
end
end
end
end