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
- .flush_all(store: nil) ⇒ Object
- .flush_dirty(store: nil) ⇒ Object
- .hydrate_all(store: nil) ⇒ Object
- .last_flush_at ⇒ Object
- .register_tracker(name, tracker:, tags:) ⇒ Object
- .registered_trackers ⇒ Object
- .reset! ⇒ Object
- .should_flush? ⇒ Boolean
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_at ⇒ Object
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: } end log.info("TrackerPersistence registered tracker=#{name} tags=#{Array().join(',')}") end |
.registered_trackers ⇒ Object
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
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 |