Class: Rack::ActionLogger::Metrics::RackMetrics

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/action_logger/metrics/rack_metrics.rb

Constant Summary collapse

METRICS =
[
  :path, :method, :params, :request_headers, :status_code, :remote_ip, :user_agent, :device, :os, :browser,
  :browser_version, :request_id, :response_headers, :response_json_body,
]
RACK_TAG_PREFIX =
'rack'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(env, status_code, headers, body) ⇒ RackMetrics

Returns a new instance of RackMetrics.



15
16
17
18
19
20
21
22
23
24
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 15

def initialize(env, status_code, headers, body)
  @env = env
  @status_code = status_code
  @headers = headers
  @body = body
  @request = Rack::Request.new(env)
  @ua = Woothee.parse(@request.user_agent)
  filters = Rack::ActionLogger.configuration.filters
  @compiled_filters = Rack::ActionLogger::ParameterFiltering.compile(filters)
end

Instance Attribute Details

#status_codeObject (readonly)

Returns the value of attribute status_code.



13
14
15
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 13

def status_code
  @status_code
end

Instance Method Details

#browserObject



75
76
77
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 75

def browser
  @ua[:name]
end

#browser_versionObject



79
80
81
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 79

def browser_version
  @ua[:version]
end

#deviceObject



67
68
69
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 67

def device
  @ua[:category]
end

#methodObject



47
48
49
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 47

def method
  @request.request_method
end

#metricsObject



35
36
37
38
39
40
41
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 35

def metrics
  METRICS.inject({}) do |result, metric|
    result[metric] = self.send(metric) unless
        Rack::ActionLogger.configuration.rack_request_blacklist.include? metric
    result
  end
end

#osObject



71
72
73
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 71

def os
  @ua[:os]
end

#paramsObject



51
52
53
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 51

def params
  Rack::ActionLogger::ParameterFiltering.apply_filter(@request.params, @compiled_filters)
end

#pathObject



43
44
45
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 43

def path
  @request.path
end

#remote_ipObject



59
60
61
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 59

def remote_ip
  @request.ip
end

#request_headersObject



55
56
57
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 55

def request_headers
  @env.select { |v| v.start_with? 'HTTP_' }
end

#request_idObject



83
84
85
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 83

def request_id
  @env['action_dispatch.request_id']
end

#response_headersObject



87
88
89
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 87

def response_headers
  @headers
end

#response_json_bodyObject



91
92
93
94
95
96
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 91

def response_json_body
  response_bodies = []
  @body.each { |part| response_bodies << part } if @body
  result = JSON.parse(response_bodies.join('')) rescue {}
  Rack::ActionLogger::ParameterFiltering.apply_filter(result, @compiled_filters)
end

#tag_suffixObject



26
27
28
29
30
31
32
33
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 26

def tag_suffix
  if @status_code == 404
    tags = ['not_found']
  else
    tags = URI(path).path.split('/').reject { |c| c.empty? }
  end
  (Array(RACK_TAG_PREFIX) + tags).join('.')
end

#user_agentObject



63
64
65
# File 'lib/rack/action_logger/metrics/rack_metrics.rb', line 63

def user_agent
  @request.user_agent
end