Class: Meter::Rails::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/meter/rails/middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Middleware

Returns a new instance of Middleware.



7
8
9
# File 'lib/meter/rails/middleware.rb', line 7

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/meter/rails/middleware.rb', line 11

def call(env)
  request = Rack::Request.new(env)
  Meter::MDC.data['request_id']   = env['action_dispatch.request_id']
  Meter::MDC.data['pid']          = Process.pid
  Meter::MDC.data['ip']           = request.ip.presence || '?'
  Meter::MDC.data['referer']      = request.referer
  Meter::MDC.data['url']          = request.url
  Meter::MDC.data['xhr']          = request.xhr?

  store_user_agent_data(request)
  store_geoip_data(request)

  @app.call(env)
ensure
  Meter::MDC.clear!
end

#store_geoip_data(request) ⇒ Object



38
39
40
41
42
43
# File 'lib/meter/rails/middleware.rb', line 38

def store_geoip_data(request)
  lookup = Locality::IP.new request.ip
  Meter::MDC.data['geoip_country'] = lookup.country_name if lookup.country_name
  Meter::MDC.data['geoip_city']    = lookup.city_name    if lookup.city_name
  Meter::MDC.data['geoip_coords']  = "#{lookup.latitude},#{lookup.longitude}" if lookup.latitude && lookup.longitude
end

#store_user_agent_data(request) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/meter/rails/middleware.rb', line 28

def store_user_agent_data(request)
  user_agent = UserAgent.parse(request.user_agent)
  Meter::MDC.data['user_agent_name']     = user_agent.browser
  Meter::MDC.data['user_agent_platform'] = user_agent.platform
  Meter::MDC.data['user_agent_bot']      = user_agent.bot?
  Meter::MDC.data['user_agent_version']  = "#{user_agent.browser}_#{user_agent.version}"

  Meter::MDC.data['user_agent']          = user_agent.to_s
end