Class: Omnitrack::Middleware::RequestTracker

Inherits:
Object
  • Object
show all
Defined in:
lib/omnitrack/middleware/request_tracker.rb

Overview

Rack middleware that:

1. Builds an Omnitrack::Context from the incoming request
2. Makes it available thread-locally as Omnitrack::Context.current
3. Clears it after the response (prevents cross-request data leakage)

Auto-inserted by the Railtie; can also be added manually:

config.middleware.use Omnitrack::Middleware::RequestTracker

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RequestTracker

Returns a new instance of RequestTracker.



16
17
18
# File 'lib/omnitrack/middleware/request_tracker.rb', line 16

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/omnitrack/middleware/request_tracker.rb', line 20

def call(env)
  request = Rack::Request.new(env)

  if Omnitrack.config.auto_capture
    ctx = Omnitrack::Context.from_request(request)
    Omnitrack::Context.current = ctx

    Omnitrack.logger.debug("middleware.request",
                           method:     request.request_method,
                           path:       request.path,
                           click_ids:  ctx.click_ids,
                           utm_params: ctx.utm_params)
  end

  @app.call(env)
ensure
  Omnitrack::Context.clear!
end