Class: Katello::EventQueue
- Inherits:
-
Object
- Object
- Katello::EventQueue
- Defined in:
- app/services/katello/event_queue.rb
Constant Summary collapse
- MAX_RETRY_AGE =
6.hours
Class Method Summary collapse
- .clear_events(event_type, object_id, on_or_earlier_than) ⇒ Object
- .create_instance(event) ⇒ Object
- .event_class(event_type) ⇒ Object
- .mark_in_progress(event) ⇒ Object
- .next_event ⇒ Object
- .push_event(event_type, id) {|attrs| ... } ⇒ Object
- .queue_depth ⇒ Object
- .register_event(event_type, klass) ⇒ Object
- .reschedule_event(event) ⇒ Object
- .reset_in_progress ⇒ Object
- .runnable_events ⇒ Object
- .supported_event_types ⇒ Object
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_event ⇒ Object
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
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_depth ⇒ Object
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_progress ⇒ Object
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_events ⇒ Object
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_types ⇒ Object
69 70 71 |
# File 'app/services/katello/event_queue.rb', line 69 def self.supported_event_types @event_types.keys end |