Class: Labkit::Tracing::RackMiddleware
- Inherits:
-
Object
- Object
- Labkit::Tracing::RackMiddleware
- Includes:
- Common
- Defined in:
- lib/labkit/tracing/rack_middleware.rb
Constant Summary collapse
- REQUEST_METHOD =
'REQUEST_METHOD'
Class Method Summary collapse
-
.build_sanitized_url_from_env(env) ⇒ Object
Generate a sanitized (safe) request URL from the rack environment.
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app) ⇒ RackMiddleware
constructor
A new instance of RackMiddleware.
Methods included from Common
#in_tracing_span, #kv_tags_for_exception, #log_exception_on_span, #postnotify_span, #tracer
Constructor Details
#initialize(app) ⇒ RackMiddleware
Returns a new instance of RackMiddleware.
14 15 16 |
# File 'lib/labkit/tracing/rack_middleware.rb', line 14 def initialize(app) @app = app end |
Class Method Details
.build_sanitized_url_from_env(env) ⇒ Object
Generate a sanitized (safe) request URL from the rack environment
30 31 32 33 34 35 36 37 38 |
# File 'lib/labkit/tracing/rack_middleware.rb', line 30 def self.build_sanitized_url_from_env(env) request = ::ActionDispatch::Request.new(env) original_url = request.original_url uri = URI.parse(original_url) uri.query = request.filtered_parameters.to_query if uri.query.present? uri.to_s end |
Instance Method Details
#call(env) ⇒ Object
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/labkit/tracing/rack_middleware.rb', line 18 def call(env) method = env[REQUEST_METHOD] context = tracer.extract(OpenTracing::FORMAT_RACK, env) = { 'component' => 'rack', 'span.kind' => 'server', 'http.method' => method, 'http.url' => self.class.build_sanitized_url_from_env(env) } in_tracing_span(operation_name: "http:#{method}", child_of: context, tags: ) do |span| @app.call(env).tap { |status_code, _headers, _body| span.set_tag('http.status_code', status_code) } end end |