class Flipper::Adapters::Sync::IntervalSynchronizer
Internal: Wraps a Synchronizer instance and only invokes it every N milliseconds.
Constants
- DEFAULT_INTERVAL_MS
Private: Number of milliseconds between syncs (default: 10 seconds).
Attributes
interval[R]
Public: The number of milliseconds between invocations of the wrapped synchronizer.
Public Class Methods
new(synchronizer, interval: nil)
click to toggle source
Public: Initializes a new interval synchronizer.
synchronizer - The Synchronizer to call when the interval has passed. interval - The Integer number of milliseconds between invocations of
the wrapped synchronizer.
# File lib/flipper/adapters/sync/interval_synchronizer.rb, line 24 def initialize(synchronizer, interval: nil) @synchronizer = synchronizer @interval = interval || DEFAULT_INTERVAL_MS # TODO: add jitter to this so all processes booting at the same time # don't phone home at the same time. @last_sync_at = 0 end
now_ms()
click to toggle source
Private
# File lib/flipper/adapters/sync/interval_synchronizer.rb, line 11 def self.now_ms Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond) end
Public Instance Methods
call()
click to toggle source
# File lib/flipper/adapters/sync/interval_synchronizer.rb, line 32 def call return unless time_to_sync? @last_sync_at = now_ms @synchronizer.call nil end
Private Instance Methods
now_ms()
click to toggle source
# File lib/flipper/adapters/sync/interval_synchronizer.rb, line 47 def now_ms self.class.now_ms end
time_to_sync?()
click to toggle source
# File lib/flipper/adapters/sync/interval_synchronizer.rb, line 43 def time_to_sync? (now_ms - @last_sync_at) >= @interval end