Module: LogStats::Requests::KPI
- Defined in:
- lib/log_stats/requests/kpi.rb
Constant Summary collapse
- PRECISION =
5
Class Method Summary collapse
- .avg(metric, requests) ⇒ Object
- .calculate(requests, stats) ⇒ Object
- .count(predicate, requests) ⇒ Object
- .error?(request) ⇒ Boolean
- .percentile(field, percentile, requests) ⇒ Object
- .rate(predicate, requests) ⇒ Object
- .timeout?(request) ⇒ Boolean
Class Method Details
.avg(metric, requests) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/log_stats/requests/kpi.rb', line 25 def self.avg(metric, requests) sum = requests.reduce(0) do |acc, request| value = metric.respond_to?(:call) ? metric.call(request) : request[metric] acc + value end (sum/requests.size.to_f).round(PRECISION) end |
.calculate(requests, stats) ⇒ Object
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/log_stats/requests/kpi.rb', line 6 def self.calculate(requests, stats) { request_count: requests.size, response_time_avg: avg(:service, requests), response_time_95p: percentile(:service, 0.95, requests), apdex: avg(Stats.method(:apdex_metric), stats), error_rate: rate(method(:error?), requests), timeout_rate: rate(method(:timeout?), requests) } end |
.count(predicate, requests) ⇒ Object
21 22 23 |
# File 'lib/log_stats/requests/kpi.rb', line 21 def self.count(predicate, requests) requests.select(&predicate).size end |
.error?(request) ⇒ Boolean
39 40 41 |
# File 'lib/log_stats/requests/kpi.rb', line 39 def self.error?(request) Stats.error_status?(request[:status]) end |
.percentile(field, percentile, requests) ⇒ Object
33 34 35 36 37 |
# File 'lib/log_stats/requests/kpi.rb', line 33 def self.percentile(field, percentile, requests) index = (requests.size*percentile).round - 1 request = requests.sort_by { |request| request[field] }[index] request && request[field] end |
.rate(predicate, requests) ⇒ Object
17 18 19 |
# File 'lib/log_stats/requests/kpi.rb', line 17 def self.rate(predicate, requests) (count(predicate, requests).to_f/requests.size).round(PRECISION) end |
.timeout?(request) ⇒ Boolean
43 44 45 |
# File 'lib/log_stats/requests/kpi.rb', line 43 def self.timeout?(request) request[:code] == "H12" end |