6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/event_store/http/controls/cluster/current_members.rb', line 6
def self.get
port = Port.example
ip_address = IPAddress::Cluster.list.detect do |ip_address|
begin
socket = TCPSocket.new ip_address, port
socket.close
true
rescue SystemCallError
false
end
end
leader_ip_address = nil
follower_ip_addresses = []
Net::HTTP.start ip_address, port do |connection|
connection.read_timeout = 0.1
response = connection.request_get '/gossip', { 'Accept' => 'application/json' }
fail unless response.code == '200'
json_text = response.body
gossip_status = ::JSON.parse json_text
members = gossip_status['members']
members.each do |member|
ip_address = member['externalHttpIp']
if member['state'] == 'Master'
leader_ip_address = ip_address
else
follower_ip_addresses << ip_address
end
end
end
return leader_ip_address, *follower_ip_addresses
end
|