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.4.0'
Class Method Summary
collapse
Class Method Details
.clear!(job_class) ⇒ Object
43
44
45
46
47
48
|
# File 'lib/philiprehberger/job_meter.rb', line 43
def clear!(job_class)
cleared = @collector.clear!(job_class)
bucket = @buckets.delete(job_class)
bucket&.reset!
cleared
end
|
.histogram(job_class, buckets:) ⇒ Object
68
69
70
71
72
73
|
# File 'lib/philiprehberger/job_meter.rb', line 68
def histogram(job_class, buckets:)
data = @collector.entries(job_class)
return nil unless data
Histogram.compute(data[:durations], buckets)
end
|
.measure(job_class, tags: {}) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/philiprehberger/job_meter.rb', line 23
def measure(job_class, tags: {})
raise ArgumentError, 'measure requires a block' unless block_given?
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
success = true
begin
yield
rescue StandardError
success = false
raise
ensure
duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
record(job_class, duration: duration, success: success, tags: tags)
end
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
91
92
93
94
95
|
# File 'lib/philiprehberger/job_meter.rb', line 91
def reset!
@collector.reset!
@buckets.each_value(&:reset!)
@buckets.clear
end
|
.stats(job_class, tags: {}) ⇒ Object
61
62
63
64
65
66
|
# File 'lib/philiprehberger/job_meter.rb', line 61
def stats(job_class, tags: {})
data = @collector.entries(job_class, tags: tags)
return nil unless data
Stats.compute(data[:durations], data[:successes])
end
|
.tag_values(job_class, key) ⇒ Object
39
40
41
|
# File 'lib/philiprehberger/job_meter.rb', line 39
def tag_values(job_class, key)
@collector.tag_values(job_class, key)
end
|
.to_json_export ⇒ Object
79
80
81
|
# File 'lib/philiprehberger/job_meter.rb', line 79
def to_json_export
Exporter.to_json_export(@collector)
end
|
.to_prometheus ⇒ Object
75
76
77
|
# File 'lib/philiprehberger/job_meter.rb', line 75
def to_prometheus
Exporter.to_prometheus(@collector)
end
|
.top_failing(num = 5) ⇒ Object
87
88
89
|
# File 'lib/philiprehberger/job_meter.rb', line 87
def top_failing(num = 5)
Report.top_failing(@collector, num)
end
|
.top_slowest(num = 5) ⇒ Object
83
84
85
|
# File 'lib/philiprehberger/job_meter.rb', line 83
def top_slowest(num = 5)
Report.top_slowest(@collector, num)
end
|
.trending(job_class) ⇒ Object
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/philiprehberger/job_meter.rb', line 50
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
|