Module: Prefab::PeriodicSync

Instance Method Summary collapse

Instance Method Details

#log_internal(message) ⇒ Object



44
45
46
# File 'lib/prefab/periodic_sync.rb', line 44

def log_internal(message)
  @client.log.log_internal message, @name, nil, ::Logger::DEBUG
end

#on_prepare_data ⇒ Object



25
26
27
# File 'lib/prefab/periodic_sync.rb', line 25

def on_prepare_data
  # noop -- override as you wish
end

#pool ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/prefab/periodic_sync.rb', line 48

def pool
  @pool ||= Concurrent::ThreadPoolExecutor.new(
    fallback_policy: :discard,
    max_queue: 5,
    max_threads: 4,
    min_threads: 1,
    name: @name
  )
end

#prepare_data ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/prefab/periodic_sync.rb', line 16

def prepare_data
  to_ship = @data.dup
  @data.clear

  on_prepare_data

  to_ship
end

#start_periodic_sync(sync_interval) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/prefab/periodic_sync.rb', line 29

def start_periodic_sync(sync_interval)
  @start_at = Prefab::TimeHelpers.now_in_ms

  @sync_interval = calculate_sync_interval(sync_interval)

  Thread.new do
    log_internal "Initialized #{@name} instance_hash=#{@client.instance_hash}"

    loop do
      sleep @sync_interval.call
      sync
    end
  end
end

#sync ⇒ Object



5
6
7
8
9
10
11
12
13
14
# File 'lib/prefab/periodic_sync.rb', line 5

def sync
  return if @data.size.zero?

  log_internal "Syncing #{@data.size} items"

  start_at_was = @start_at
  @start_at = Prefab::TimeHelpers.now_in_ms

  flush(prepare_data, start_at_was)
end