Module: LogStats::Requests::Stats

Defined in:
lib/log_stats/requests/stats.rb

Class Method Summary collapse

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

Returns:

  • (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