Class: Kaal::Internal::ActiveRecord::DispatchRegistry

Inherits:
Dispatch::Registry show all
Defined in:
lib/kaal/internal/active_record/dispatch_registry.rb

Overview

Active Record-backed registry for dispatch audit records.

Instance Method Summary collapse

Methods inherited from Dispatch::Registry

#dispatched?

Constructor Details

#initialize(connection: nil, model: DispatchRecord, namespace: nil) ⇒ DispatchRegistry

Returns a new instance of DispatchRegistry.



14
15
16
17
18
19
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 14

def initialize(connection: nil, model: DispatchRecord, namespace: nil)
  super()
  ConnectionSupport.configure!(connection)
  @model = model
  @namespace = namespace
end

Instance Method Details

#cleanup(recovery_window: 86_400) ⇒ Object



46
47
48
49
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 46

def cleanup(recovery_window: 86_400)
  cutoff_time = Time.now.utc - recovery_window
  cleanup_scope.where(fire_time: ...cutoff_time).delete_all
end

#find_by_key(key) ⇒ Object



34
35
36
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 34

def find_by_key(key)
  query(key: namespaced_key(key))
end

#find_by_node(node_id) ⇒ Object



38
39
40
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 38

def find_by_node(node_id)
  query(node_id: node_id)
end

#find_by_status(status) ⇒ Object



42
43
44
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 42

def find_by_status(status)
  query(status: status)
end

#find_dispatch(key, fire_time) ⇒ Object



30
31
32
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 30

def find_dispatch(key, fire_time)
  normalize(@model.find_by(key: namespaced_key(key), fire_time: fire_time))
end

#log_dispatch(key, fire_time, node_id, status = 'dispatched') ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/kaal/internal/active_record/dispatch_registry.rb', line 21

def log_dispatch(key, fire_time, node_id, status = 'dispatched')
  record = @model.find_or_initialize_by(key: namespaced_key(key), fire_time: fire_time)
  record.dispatched_at = Time.now.utc
  record.node_id = node_id
  record.status = status
  record.save!
  normalize(record)
end