Module: Philiprehberger::JobMeter

Defined in:
lib/philiprehberger/job_meter.rb,
lib/philiprehberger/job_meter/stats.rb,
lib/philiprehberger/job_meter/bucket.rb,
lib/philiprehberger/job_meter/report.rb,
lib/philiprehberger/job_meter/version.rb,
lib/philiprehberger/job_meter/exporter.rb,
lib/philiprehberger/job_meter/collector.rb,
lib/philiprehberger/job_meter/histogram.rb

Defined Under Namespace

Modules: Exporter, Histogram, Report, Stats Classes: Bucket, Collector

Constant Summary collapse

VERSION =
'0.3.0'

Class Method Summary collapse

Class Method Details

.histogram(job_class, buckets:) ⇒ Object



41
42
43
44
45
46
# File 'lib/philiprehberger/job_meter.rb', line 41

def histogram(job_class, buckets:)
  data = @collector.entries(job_class)
  return nil unless data

  Histogram.compute(data[:durations], buckets)
end

.record(job_class, duration:, success:, tags: {}) ⇒ Object



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

def record(job_class, duration:, success:, tags: {})
  @collector.record(job_class, duration: duration, success: success, tags: tags)
  (@buckets[job_class] ||= Bucket.new).record(duration: duration, success: success)
end

.reset!Object



64
65
66
67
68
# File 'lib/philiprehberger/job_meter.rb', line 64

def reset!
  @collector.reset!
  @buckets.each_value(&:reset!)
  @buckets.clear
end

.stats(job_class, tags: {}) ⇒ Object



34
35
36
37
38
39
# File 'lib/philiprehberger/job_meter.rb', line 34

def stats(job_class, tags: {})
  data = @collector.entries(job_class, tags: tags)
  return nil unless data

  Stats.compute(data[:durations], data[:successes])
end

.to_json_exportObject



52
53
54
# File 'lib/philiprehberger/job_meter.rb', line 52

def to_json_export
  Exporter.to_json_export(@collector)
end

.to_prometheusObject



48
49
50
# File 'lib/philiprehberger/job_meter.rb', line 48

def to_prometheus
  Exporter.to_prometheus(@collector)
end

.top_failing(num = 5) ⇒ Object



60
61
62
# File 'lib/philiprehberger/job_meter.rb', line 60

def top_failing(num = 5)
  Report.top_failing(@collector, num)
end

.top_slowest(num = 5) ⇒ Object



56
57
58
# File 'lib/philiprehberger/job_meter.rb', line 56

def top_slowest(num = 5)
  Report.top_slowest(@collector, num)
end


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

def trending(job_class)
  bucket = @buckets[job_class]
  unless bucket
    return Bucket::WINDOWS.each_with_object({}) do |(label, _), h|
      h[label] = { avg_duration: 0.0, success_rate: 0.0, total: 0, failed: 0 }
    end
  end

  bucket.trending
end