Class: Philiprehberger::JobMeter::Bucket

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/job_meter/bucket.rb

Constant Summary collapse

WINDOWS =
{ last_1m: 60, last_5m: 300, last_15m: 900 }.freeze

Instance Method Summary collapse

Constructor Details

#initializeBucket

Returns a new instance of Bucket.



8
9
10
11
# File 'lib/philiprehberger/job_meter/bucket.rb', line 8

def initialize
  @mutex = Mutex.new
  @events = []
end

Instance Method Details

#record(duration:, success:) ⇒ Object



13
14
15
16
17
# File 'lib/philiprehberger/job_meter/bucket.rb', line 13

def record(duration:, success:)
  @mutex.synchronize do
    @events << { at: Process.clock_gettime(Process::CLOCK_MONOTONIC), duration: duration, success: success }
  end
end

#reset!Object



30
31
32
# File 'lib/philiprehberger/job_meter/bucket.rb', line 30

def reset!
  @mutex.synchronize { @events.clear }
end


19
20
21
22
23
24
25
26
27
28
# File 'lib/philiprehberger/job_meter/bucket.rb', line 19

def trending
  now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  @mutex.synchronize do
    prune(now)
    WINDOWS.each_with_object({}) do |(label, window), result|
      subset = @events.select { |e| e[:at] >= now - window }
      result[label] = compute(subset)
    end
  end
end