Module: Legion::Gaia::TrackerPersistence

Extended by:
Logging::Helper
Defined in:
lib/legion/gaia/tracker_persistence.rb

Constant Summary collapse

FLUSH_INTERVAL =

5 minutes

300

Class Method Summary collapse

Class Method Details

.flush_all(store: nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/legion/gaia/tracker_persistence.rb', line 52

def flush_all(store: nil)
  return unless store

  failed = false
  entries = registered_trackers.values
  entries.each do |entry|
    failed ||= !flush_tracker(entry[:tracker], store: store)
  end
  mutex.synchronize { @last_flush_at = Time.now.utc } unless failed
  log.info("TrackerPersistence flushed all trackers count=#{entries.size}")
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'gaia.tracker_persistence.flush_all')
end

.flush_dirty(store: nil) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/legion/gaia/tracker_persistence.rb', line 26

def flush_dirty(store: nil)
  return unless store

  failed = false
  flushed = 0
  entries = registered_trackers.values
  entries.each do |entry|
    tracker = entry[:tracker]
    next unless tracker.dirty?

    if flush_tracker(tracker, store: store)
      flushed += 1
    else
      failed = true
    end
  end
  mutex.synchronize { @last_flush_at = Time.now.utc } unless failed
  if failed
    log.warn("TrackerPersistence flush_dirty completed with errors flushed=#{flushed}")
  else
    log.info("TrackerPersistence flushed dirty trackers flushed=#{flushed}")
  end
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'gaia.tracker_persistence.flush_dirty')
end

.hydrate_all(store: nil) ⇒ Object



66
67
68
69
70
71
72
73
74
75
# File 'lib/legion/gaia/tracker_persistence.rb', line 66

def hydrate_all(store: nil)
  return unless store

  registered_trackers.each_value do |entry|
    entry[:tracker].from_apollo(store: store)
  end
  log.info("TrackerPersistence hydrated trackers count=#{registered_trackers.size}")
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'gaia.tracker_persistence.hydrate_all')
end

.last_flush_atObject



77
78
79
# File 'lib/legion/gaia/tracker_persistence.rb', line 77

def last_flush_at
  mutex.synchronize { @last_flush_at }
end

.register_tracker(name, tracker:, tags:) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/legion/gaia/tracker_persistence.rb', line 14

def register_tracker(name, tracker:, tags:)
  mutex.synchronize do
    @trackers ||= {}
    @trackers[name] = { tracker: tracker, tags: tags }
  end
  log.info("TrackerPersistence registered tracker=#{name} tags=#{Array(tags).join(',')}")
end

.registered_trackersObject



22
23
24
# File 'lib/legion/gaia/tracker_persistence.rb', line 22

def registered_trackers
  mutex.synchronize { (@trackers || {}).dup }
end

.reset!Object



89
90
91
92
93
94
# File 'lib/legion/gaia/tracker_persistence.rb', line 89

def reset!
  mutex.synchronize do
    @trackers = {}
    @last_flush_at = nil
  end
end

.should_flush?Boolean

Returns:

  • (Boolean)


81
82
83
84
85
86
87
# File 'lib/legion/gaia/tracker_persistence.rb', line 81

def should_flush?
  mutex.synchronize do
    return true if @last_flush_at.nil?

    (Time.now.utc - @last_flush_at) >= FLUSH_INTERVAL
  end
end