class ConsulDo::Elect
Public Class Methods
new() { |configure!| ... }
click to toggle source
# File lib/consul_do/elect.rb, line 6 def initialize() yield ConsulDo.configure! if block_given? end
Public Instance Methods
base_url()
click to toggle source
# File lib/consul_do/elect.rb, line 10 def base_url "http://#{ConsulDo.config.host}:#{ConsulDo.config.port}" end
cleanup()
click to toggle source
# File lib/consul_do/elect.rb, line 98 def cleanup delete_session unless session_has_lock? end
create_session()
click to toggle source
# File lib/consul_do/elect.rb, line 34 def create_session url = "#{base_url}/v1/session/create" response = ConsulDo.http_put(url, {'name' => ConsulDo.config.session_name}) ConsulDo.log "create_session", parse_json(response.body, {})['ID'] or raise "Could not create session: #{response.code} - #{response.message} (#{response.body})" end
delete_session(session_id = session)
click to toggle source
# File lib/consul_do/elect.rb, line 45 def delete_session(session_id = session) url = "#{base_url}/v1/session/destroy/#{session_id}" response = ConsulDo.http_put(url) case response when Net::HTTPSuccess @session = nil else raise "Could not delete session: #{response.code} - #{response.message} (#{response.body})" end response end
delete_sessions() { |session_hash| ... }
click to toggle source
# File lib/consul_do/elect.rb, line 58 def delete_sessions url = "#{base_url}/v1/session/node/#{get_session_info(session)['Node']}" response = ConsulDo.http_get(url) parse_json(response.body, []).each do |session_hash| if block_given? delete_session(session_hash['ID']) if yield session_hash['Name'] else delete_session(session_hash['ID']) if session_hash['Name'] == ConsulDo.config.session_name end end end
get_key()
click to toggle source
# File lib/consul_do/elect.rb, line 14 def get_key url = "#{base_url}/v1/kv/service/#{ConsulDo.config.key}/leader?" + token_str response = ConsulDo.http_get(url) ConsulDo.log "get_key", parse_json(response.body, [{}]).first end
get_lock()
click to toggle source
# File lib/consul_do/elect.rb, line 78 def get_lock url = "#{base_url}/v1/kv/service/#{ConsulDo.config.key}/leader?acquire=#{session}" + token_str response = ConsulDo.http_put(url, {'updated' => Time.now}) @session_has_lock = true if response.body == "true" end
get_session_info(session_id)
click to toggle source
# File lib/consul_do/elect.rb, line 28 def get_session_info(session_id) url = "#{base_url}/v1/session/info/#{session_id}" response = ConsulDo.http_get(url) ConsulDo.log "get_session_info", parse_json(response.body, []).first or raise "Invalid Session" end
is_leader?()
click to toggle source
# File lib/consul_do/elect.rb, line 88 def is_leader? leader_session = get_key['Session'] if (leader_session && (session_has_lock? || get_session_info(leader_session)['Node'] == get_session_info(session)['Node'])) ConsulDo.log "is_leader?", true else ConsulDo.log "is_leader?", false end end
parse_json(json_blob, default_value)
click to toggle source
# File lib/consul_do/elect.rb, line 20 def parse_json(json_blob, default_value) begin JSON.parse(json_blob) rescue JSON::ParserError, TypeError default_value end end
session()
click to toggle source
# File lib/consul_do/elect.rb, line 41 def session ConsulDo.log "session", @session ||= create_session end
session_has_lock?()
click to toggle source
# File lib/consul_do/elect.rb, line 84 def session_has_lock? @session_has_lock end
token_str()
click to toggle source
# File lib/consul_do/elect.rb, line 70 def token_str if ConsulDo.config.token "&token=#{ConsulDo.config.token}" else "" end end