Class: Katello::EventQueue

Inherits:
Object
  • Object
show all
Defined in:
app/services/katello/event_queue.rb

Constant Summary collapse

MAX_RETRY_AGE =
6.hours

Class Method Summary collapse

Class Method Details

.clear_events(event_type, object_id, on_or_earlier_than) ⇒ Object



23
24
25
# File 'app/services/katello/event_queue.rb', line 23

def self.clear_events(event_type, object_id, on_or_earlier_than)
  Katello::Event.where(:in_progress => true, :object_id => object_id, :event_type => event_type).where('created_at <= ?', on_or_earlier_than).delete_all
end

.create_instance(event) ⇒ Object



7
8
9
10
11
12
13
# File 'app/services/katello/event_queue.rb', line 7

def self.create_instance(event)
  event_class = ::Katello::EventQueue.event_class(event.event_type)

  event_class.new(event.object_id) do |instance|
    instance. = event. if event.
  end
end

.event_class(event_type) ⇒ Object



73
74
75
76
# File 'app/services/katello/event_queue.rb', line 73

def self.event_class(event_type)
  fail _("Invalid event_type %s") % event_type if @event_types[event_type].nil?
  @event_types[event_type].constantize
end

.mark_in_progress(event) ⇒ Object



36
37
38
39
# File 'app/services/katello/event_queue.rb', line 36

def self.mark_in_progress(event)
  ::Katello::Event.where(:in_progress => false, :object_id => event.object_id, :event_type => event.event_type).
                   update_all(:in_progress => true)
end

.next_eventObject



27
28
29
30
31
32
33
34
# File 'app/services/katello/event_queue.rb', line 27

def self.next_event
  first = runnable_events.where(:in_progress => false).order(:created_at => 'asc').first
  return if first.nil?
  last = runnable_events.where(:in_progress => false, :object_id => first.object_id,
                                :event_type => first.event_type).order(:created_at => 'desc').first
  mark_in_progress(first)
  last
end

.push_event(event_type, id) {|attrs| ... } ⇒ Object

Yields:

  • (attrs)


45
46
47
48
49
50
51
52
53
54
# File 'app/services/katello/event_queue.rb', line 45

def self.push_event(event_type, id)
  attrs = {
    event_type: event_type,
    object_id: id
  }

  yield(attrs) if block_given?

  Event.create!(attrs)
end

.queue_depthObject



15
16
17
# File 'app/services/katello/event_queue.rb', line 15

def self.queue_depth
  ::Katello::Event.all.size
end

.register_event(event_type, klass) ⇒ Object



65
66
67
# File 'app/services/katello/event_queue.rb', line 65

def self.register_event(event_type, klass)
  @event_types[event_type] = klass.name
end

.reschedule_event(event) ⇒ Object



56
57
58
59
60
61
62
63
# File 'app/services/katello/event_queue.rb', line 56

def self.reschedule_event(event)
  return :expired if event.created_at <= MAX_RETRY_AGE.ago

  retry_seconds = event_class(event.event_type).try(:retry_seconds)
  if retry_seconds
    Katello::Event.update(event.id, in_progress: false, process_after: Time.zone.now + retry_seconds)
  end
end

.reset_in_progressObject



41
42
43
# File 'app/services/katello/event_queue.rb', line 41

def self.reset_in_progress
  Katello::Event.where(:in_progress => true).update_all(:in_progress => false)
end

.runnable_eventsObject



19
20
21
# File 'app/services/katello/event_queue.rb', line 19

def self.runnable_events
  Katello::Event.where(process_after: nil).or(Katello::Event.where(process_after: Date.new..Time.zone.now))
end

.supported_event_typesObject



69
70
71
# File 'app/services/katello/event_queue.rb', line 69

def self.supported_event_types
  @event_types.keys
end