Class: Stoplight::Infrastructure::Memory::DataStore::SlidingWindow Private
- Inherits:
-
Object
- Object
- Stoplight::Infrastructure::Memory::DataStore::SlidingWindow
- Defined in:
- lib/stoplight/infrastructure/memory/data_store/sliding_window.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Not thread-safe; synchronization must be handled externally
Hash-based sliding window for O(1) amortized operations.
Maintains a running sum and stores per-second counts in a Hash. Ruby’s Hash preserves insertion order (FIFO), allowing efficient removal of expired buckets from the front via Hash#shift, with their counts subtracted from the running sum.
Performance: O(1) amortized for both reads and writes Memory: Bounded to the number of buckets
Instance Method Summary collapse
-
#increment ⇒ Object
private
Increment the count at a given timestamp.
-
#initialize(clock:) ⇒ SlidingWindow
constructor
private
A new instance of SlidingWindow.
- #inspect ⇒ Object private
- #sum_in_window(window_start) ⇒ Object private
Constructor Details
#initialize(clock:) ⇒ SlidingWindow
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of SlidingWindow.
20 21 22 23 24 |
# File 'lib/stoplight/infrastructure/memory/data_store/sliding_window.rb', line 20 def initialize(clock:) @buckets = Hash.new { |buckets, bucket| buckets[bucket] = 0 } @running_sum = 0 @clock = clock end |
Instance Method Details
#increment ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Increment the count at a given timestamp
27 28 29 30 |
# File 'lib/stoplight/infrastructure/memory/data_store/sliding_window.rb', line 27 def increment buckets[current_bucket] += 1 self.running_sum += 1 end |
#inspect ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
37 38 39 |
# File 'lib/stoplight/infrastructure/memory/data_store/sliding_window.rb', line 37 def inspect "#<#{self.class.name} #{buckets}>" end |
#sum_in_window(window_start) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
32 33 34 35 |
# File 'lib/stoplight/infrastructure/memory/data_store/sliding_window.rb', line 32 def sum_in_window(window_start) (window_start) self.running_sum end |