Class: OpenCensus::Trace::Integrations::RackMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/opencensus/trace/integrations/rack_middleware.rb

Overview

Rack integration

This is a middleware for Rack applications:

  • It wraps all incoming requests in a root span
  • It exports the captured spans at the end of the request.

Example:

require "opencensus/trace/integrations/rack_middleware"

use OpenCensus::Trace::Integrations::RackMiddleware

Instance Method Summary collapse

Constructor Details

#initialize(app, exporter: nil) ⇒ RackMiddleware

Create the Rack middleware.



55
56
57
58
# File 'lib/opencensus/trace/integrations/rack_middleware.rb', line 55

def initialize app, exporter: nil
  @app = app
  @exporter = exporter || OpenCensus::Trace.config.exporter
end

Instance Method Details

#call(env) ⇒ Array

Run the Rack middleware.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/opencensus/trace/integrations/rack_middleware.rb', line 68

def call env
  formatter = AUTODETECTABLE_FORMATTERS.detect do |f|
    env.key? f.rack_header_name
  end
  if formatter
    context = formatter.deserialize env[formatter.rack_header_name]
  end

  Trace.start_request_trace \
    trace_context: context,
    same_process_as_parent: false do |span_context|
    begin
      Trace.in_span get_path(env) do |span|
        start_request span, env
        @app.call(env).tap do |response|
          finish_request span, response
        end
      end
    ensure
      @exporter.export span_context.build_contained_spans
    end
  end
end