Class: Labkit::Tracing::RackMiddleware

Inherits:
Object
  • Object
show all
Includes:
Common
Defined in:
lib/labkit/tracing/rack_middleware.rb

Constant Summary collapse

REQUEST_METHOD =
'REQUEST_METHOD'

Class Method Summary collapse

Instance Method Summary collapse

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.



13
14
15
# File 'lib/labkit/tracing/rack_middleware.rb', line 13

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



29
30
31
32
33
34
35
36
37
# File 'lib/labkit/tracing/rack_middleware.rb', line 29

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



17
18
19
20
21
22
23
24
25
26
# File 'lib/labkit/tracing/rack_middleware.rb', line 17

def call(env)
  method = env[REQUEST_METHOD]

  context = 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) }

  in_tracing_span(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