Sha256: b806754d25b445293abae119fecb2882d76624fd5d080e993d4ca01e265223cf
Contents?: true
Size: 1.45 KB
Versions: 2
Compression:
Stored size: 1.45 KB
Contents
module Flipper module Adapters class Sync # Internal: Wraps a Synchronizer instance and only invokes it every # N milliseconds. class IntervalSynchronizer # Private: Number of milliseconds between syncs (default: 10 seconds). DEFAULT_INTERVAL_MS = 10_000 # Private def self.now_ms Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond) end # Public: The number of milliseconds between invocations of the # wrapped synchronizer. attr_reader :interval # 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. 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 def call return unless time_to_sync? @last_sync_at = now_ms @synchronizer.call nil end private def time_to_sync? (now_ms - @last_sync_at) >= @interval end def now_ms self.class.now_ms end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
flipper-0.13.0 | lib/flipper/adapters/sync/interval_synchronizer.rb |
flipper-0.13.0.beta1 | lib/flipper/adapters/sync/interval_synchronizer.rb |