Module: Philiprehberger::JobMeter::Stats

Defined in:
lib/philiprehberger/job_meter/stats.rb

Class Method Summary collapse

Class Method Details

.compute(durations, successes) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/philiprehberger/job_meter/stats.rb', line 23

def compute(durations, successes)
  sorted = durations.sort
  {
    avg_duration: sorted.sum.to_f / sorted.length,
    p50_duration: percentile(sorted, 50),
    p95_duration: percentile(sorted, 95),
    p99_duration: percentile(sorted, 99),
    success_rate: success_rate(successes),
    total: successes.length,
    failed: successes.count(false)
  }
end

.percentile(sorted_values, pct) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/philiprehberger/job_meter/stats.rb', line 8

def percentile(sorted_values, pct)
  return 0.0 if sorted_values.empty?

  rank = (pct / 100.0 * (sorted_values.length - 1))
  lower = sorted_values[rank.floor]
  upper = sorted_values[rank.ceil]
  lower + ((upper - lower) * (rank - rank.floor))
end

.success_rate(successes) ⇒ Object



17
18
19
20
21
# File 'lib/philiprehberger/job_meter/stats.rb', line 17

def success_rate(successes)
  return 0.0 if successes.empty?

  successes.count(true).to_f / successes.length
end