Module: LogStats::Requests::Stats
- Defined in:
- lib/log_stats/requests/stats.rb
Class Method Summary collapse
- .apdex_metric(stat) ⇒ Object
- .duration_metric(stat) ⇒ Object
- .error_rate_metric(stat) ⇒ Object
- .error_status?(status) ⇒ Boolean
- .popularity_metric(stat) ⇒ Object
- .requests_by_duration(requests) ⇒ Object
- .stats(requests, event_config) ⇒ Object
- .stats_by_metric(stats, metric, direction = 1) ⇒ Object
- .timeout_metric(stat) ⇒ Object
Class Method Details
.apdex_metric(stat) ⇒ Object
70 71 72 |
# File 'lib/log_stats/requests/stats.rb', line 70 def self.apdex_metric(stat) (stat[:satisfied_count] + stat[:tolerating_count].to_f/2)/stat[:count] end |
.duration_metric(stat) ⇒ Object
54 55 56 |
# File 'lib/log_stats/requests/stats.rb', line 54 def self.duration_metric(stat) stat[:service].to_f/stat[:count] end |
.error_rate_metric(stat) ⇒ Object
58 59 60 |
# File 'lib/log_stats/requests/stats.rb', line 58 def self.error_rate_metric(stat) stat[:error_count].to_f/stat[:count] end |
.error_status?(status) ⇒ Boolean
46 47 48 |
# File 'lib/log_stats/requests/stats.rb', line 46 def self.error_status?(status) status / 100 == 5 end |
.popularity_metric(stat) ⇒ Object
66 67 68 |
# File 'lib/log_stats/requests/stats.rb', line 66 def self.popularity_metric(stat) stat[:count] end |
.requests_by_duration(requests) ⇒ Object
50 51 52 |
# File 'lib/log_stats/requests/stats.rb', line 50 def self.requests_by_duration(requests) requests.sort_by { |request| -request[:service].to_i } end |
.stats(requests, event_config) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/log_stats/requests/stats.rb', line 4 def self.stats(requests, event_config) requests.reduce({}) do |acc, request| id = (request[:method] == "GET" ? '' : "#{request[:method]} ") + [request[:host], request[:path]].join('') acc[id] ||= { id: id, method: request[:method], path: request[:path], count: 0, success_count: 0, error_count: 0, timeout_count: 0, code_count: Hash.new(0), satisfied_count: 0, tolerating_count: 0, frustrated_count: 0, service: 0 } acc[id][:count] += 1 if error_status?(request[:status]) acc[id][:error_count] += 1 acc[id][:frustrated_count] += 1 else acc[id][:success_count] += 1 if request[:service] <= event_config[:apdex][:tolerating] acc[id][:satisfied_count] += 1 elsif request[:service] <= event_config[:apdex][:frustrated] acc[id][:tolerating_count] += 1 else acc[id][:frustrated_count] += 1 end end if request[:code] acc[id][:code_count][request[:code]] += 1 end if request[:code] == "H12" acc[id][:timeout_count] += 1 end acc[id][:service] += request[:service] acc end.values end |
.stats_by_metric(stats, metric, direction = 1) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/log_stats/requests/stats.rb', line 74 def self.stats_by_metric(stats, metric, direction = 1) stats.sort do |stat1, stat2| metric1 = -1 * direction * metric.call(stat1) metric2 = -1 * direction * metric.call(stat2) if metric1 == metric2 0 elsif metric1.nil? || metric2.nil? metric1.nil? ? -1 : 1 else metric1 > metric2 ? 1 : -1 end end end |
.timeout_metric(stat) ⇒ Object
62 63 64 |
# File 'lib/log_stats/requests/stats.rb', line 62 def self.timeout_metric(stat) stat[:timeout_count] end |