class Labkit::Tracing::RackMiddleware

RackMiddleware is a rack middleware component for instrumenting incoming http requests into a Rails/Rack server

Constants

REQUEST_METHOD

Public Class Methods

build_sanitized_url_from_env(env) click to toggle source

Generate a sanitized (safe) request URL from the rack environment

# 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
new(app) click to toggle source
# File lib/labkit/tracing/rack_middleware.rb, line 14
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/labkit/tracing/rack_middleware.rb, line 18
def call(env)
  method = env[REQUEST_METHOD]

  context = TracingUtils.tracer.extract(OpenTracing::FORMAT_RACK, env)
  tags = { "component" => "rack", "span.kind" => "server", "http.method" => method, "http.url" => self.class.build_sanitized_url_from_env(env) }

  TracingUtils.with_tracing(operation_name: "http:#{method}", child_of: context, tags: tags) do |span|
    @app.call(env).tap { |status_code, _headers, _body| span.set_tag("http.status_code", status_code) }
  end
end