class GalacticSenate::Delegation
Constants
- KEY
- RAND_INTERVAL
- SENATOR_INTERVAL
- SUPREME_CHANCELLOR_INTERVAL
Public Class Methods
instance()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 16 def self.instance @galactic_senate ||= GalacticSenate::Delegation.new end
new()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 11 def initialize @running = true @supreme_chancellor_timeout = 0 end
supreme_chancellor?()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 21 def self.supreme_chancellor? instance.supreme_chancellor? end
Also aliased as: leader?
Public Instance Methods
debate()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 34 def debate vote_of_no_confidence timer_task = Concurrent::TimerTask.new(execution_interval: interval) do |task| begin vote_now task.execution_interval = interval rescue => e GalacticSenate.config.logger.error "GalacticSenate::Delegation.debate - #{e.message}" GalacticSenate.config.logger.error "GalacticSenate::Delegation.debate - #{e.backtrace.inspect}" end end timer_task.execute end
fire_event(event, val = nil)
click to toggle source
# File lib/galactic-senate/delegation.rb, line 75 def fire_event(event, val = nil) GalacticSenate.config.events[event].each do |block| begin block.call(val) rescue => e GalacticSenate.config.logger.error "GalacticSenate::Delegation.fire_event - #{e.message}" GalacticSenate.config.logger.error "GalacticSenate::Delegation.fire_event - #{e.backtrace.inspect}" end end end
interval()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 86 def interval supreme_chancellor? ? SUPREME_CHANCELLOR_INTERVAL : SENATOR_INTERVAL end
supreme_chancellor?()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 25 def supreme_chancellor? ( @supreme_chancellor_timeout > Time.now.to_f ) end
Also aliased as: leader?
vote_now()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 53 def vote_now if supreme_chancellor? if update_supreme_chancellor @supreme_chancellor_timeout = Time.now.to_f + SENATOR_INTERVAL else @supreme_chancellor_timeout = 0 fire_event(:ousted) end else vote_of_no_confidence end end
vote_of_no_confidence()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 66 def vote_of_no_confidence if elect_me_supreme_chancellor? @supreme_chancellor_timeout = Time.now.to_f + SENATOR_INTERVAL fire_event(:elected) else @supreme_chancellor_timeout = 0 end end
Private Instance Methods
delete_supreme_chancellor()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 96 def delete_supreme_chancellor GalacticSenate.config.redis.call("del",KEY) end
elect_me_supreme_chancellor?()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 104 def elect_me_supreme_chancellor? val = GalacticSenate.config.redis.set(KEY, GalacticSenate.whoami, ex: SENATOR_INTERVAL, nx: true) val end
expire_supreme_chancellor()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 100 def expire_supreme_chancellor GalacticSenate.config.redis.call("expire",KEY, SENATOR_INTERVAL) end
get_supreme_chancellor()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 92 def get_supreme_chancellor GalacticSenate.config.redis.call("get",KEY) end
update_supreme_chancellor()
click to toggle source
# File lib/galactic-senate/delegation.rb, line 109 def update_supreme_chancellor ( get_supreme_chancellor == GalacticSenate.whoami ? expire_supreme_chancellor : 0 ) != 0 end