evt-event_store-cluster-leader_status 0.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (23) hide show
  1. checksums.yaml +7 -0
  2. data/lib/event_store/cluster/leader_status.rb +14 -0
  3. data/lib/event_store/cluster/leader_status/controls.rb +16 -0
  4. data/lib/event_store/cluster/leader_status/controls/cluster_size.rb +13 -0
  5. data/lib/event_store/cluster/leader_status/controls/connect_http.rb +16 -0
  6. data/lib/event_store/cluster/leader_status/controls/current_members.rb +43 -0
  7. data/lib/event_store/cluster/leader_status/controls/gossip_endpoint/response.rb +111 -0
  8. data/lib/event_store/cluster/leader_status/controls/gossip_endpoint/response/member.rb +112 -0
  9. data/lib/event_store/cluster/leader_status/controls/hostname.rb +17 -0
  10. data/lib/event_store/cluster/leader_status/controls/ip_address.rb +27 -0
  11. data/lib/event_store/cluster/leader_status/controls/port.rb +33 -0
  12. data/lib/event_store/cluster/leader_status/controls/resolve_host.rb +9 -0
  13. data/lib/event_store/cluster/leader_status/controls/time.rb +9 -0
  14. data/lib/event_store/cluster/leader_status/controls/uuid.rb +9 -0
  15. data/lib/event_store/cluster/leader_status/data.rb +15 -0
  16. data/lib/event_store/cluster/leader_status/get.rb +54 -0
  17. data/lib/event_store/cluster/leader_status/gossip_endpoint/get.rb +95 -0
  18. data/lib/event_store/cluster/leader_status/gossip_endpoint/response.rb +24 -0
  19. data/lib/event_store/cluster/leader_status/gossip_endpoint/response/member.rb +42 -0
  20. data/lib/event_store/cluster/leader_status/gossip_endpoint/response/state.rb +19 -0
  21. data/lib/event_store/cluster/leader_status/gossip_endpoint/response/transformer.rb +61 -0
  22. data/lib/event_store/cluster/leader_status/log.rb +13 -0
  23. metadata +134 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 718dd84c0ac14c746c5056ded4fd7d1d2bf900f6
4
+ data.tar.gz: b1dabd36f48acecb20223183e8caf4003a4f0a81
5
+ SHA512:
6
+ metadata.gz: 2d74d2ae9ea5d893607d4c138415a21d546470164142f28a323cef8a160c50cbe7d5dfc0064ec6156b3a8db74d534710a19912dffad6155f9bd3d7eff59a2252
7
+ data.tar.gz: 651ae4ae3bd74fd6cb6fd453bf6bf61eba291942261409190d03628796bb828d1330bd69470bdf96efd7e2592b64eb7525382623c3995a6a9dd9ccf4cf141885
@@ -0,0 +1,14 @@
1
+ require 'event_store/http/connect'
2
+ require 'schema'
3
+ require 'transform'
4
+
5
+ require 'event_store/cluster/leader_status/log'
6
+
7
+ require 'event_store/cluster/leader_status/gossip_endpoint/get'
8
+ require 'event_store/cluster/leader_status/gossip_endpoint/response/member'
9
+ require 'event_store/cluster/leader_status/gossip_endpoint/response/transformer'
10
+ require 'event_store/cluster/leader_status/gossip_endpoint/response/state'
11
+ require 'event_store/cluster/leader_status/gossip_endpoint/response'
12
+
13
+ require 'event_store/cluster/leader_status/data'
14
+ require 'event_store/cluster/leader_status/get'
@@ -0,0 +1,16 @@
1
+ require 'clock/controls'
2
+ require 'identifier/uuid/controls'
3
+ require 'event_store/http/connect/controls'
4
+
5
+ require 'event_store/cluster/leader_status/controls/connect_http'
6
+ require 'event_store/cluster/leader_status/controls/cluster_size'
7
+ require 'event_store/cluster/leader_status/controls/current_members'
8
+ require 'event_store/cluster/leader_status/controls/hostname'
9
+ require 'event_store/cluster/leader_status/controls/ip_address'
10
+ require 'event_store/cluster/leader_status/controls/resolve_host'
11
+ require 'event_store/cluster/leader_status/controls/port'
12
+ require 'event_store/cluster/leader_status/controls/uuid'
13
+ require 'event_store/cluster/leader_status/controls/time'
14
+
15
+ require 'event_store/cluster/leader_status/controls/gossip_endpoint/response'
16
+ require 'event_store/cluster/leader_status/controls/gossip_endpoint/response/member'
@@ -0,0 +1,13 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ module ClusterSize
6
+ def self.example
7
+ 3
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ module ConnectHTTP
6
+ def self.example(host: nil, ip_addresses: nil)
7
+ connect = EventStore::HTTP::Connect.build
8
+ connect.host = host if host
9
+ ResolveHost.configure connect, host: host, ip_addresses: ip_addresses
10
+ connect
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ module CurrentMembers
6
+ def self.get
7
+ ip_address = IPAddress.example
8
+ port = Port::HTTP.example
9
+
10
+ leader_ip_address = nil
11
+ follower_ip_addresses = []
12
+
13
+ Net::HTTP.start ip_address, port do |connection|
14
+ connection.read_timeout = 0.1
15
+
16
+ response = connection.request_get '/gossip', { 'Accept' => 'application/json' }
17
+
18
+ fail unless response.code == '200'
19
+
20
+ json_text = response.body
21
+
22
+ gossip_status = JSON.parse json_text
23
+
24
+ members = gossip_status['members']
25
+
26
+ members.each do |member|
27
+ ip_address = member['externalHttpIp']
28
+
29
+ if member['state'] == 'Master'
30
+ leader_ip_address = ip_address
31
+ else
32
+ follower_ip_addresses << ip_address
33
+ end
34
+ end
35
+ end
36
+
37
+ return leader_ip_address, *follower_ip_addresses
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,111 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ module GossipEndpoint
6
+ module Response
7
+ def self.server_ip
8
+ IPAddress.example
9
+ end
10
+
11
+ def self.server_port
12
+ Port::HTTP::Internal.example
13
+ end
14
+
15
+ module State
16
+ def self.leader
17
+ 'Master'
18
+ end
19
+
20
+ def self.follower
21
+ 'Slave'
22
+ end
23
+ end
24
+
25
+ module JSON
26
+ def self.text
27
+ <<-JSON
28
+ {
29
+ "members": [
30
+ {
31
+ "instanceId": "00000101-0000-4000-8000-000000000000",
32
+ "timeStamp": "2000-01-01T00:00:00.000000Z",
33
+ "state": "Master",
34
+ "isAlive": true,
35
+ "internalTcpIp": "127.0.111.1",
36
+ "internalTcpPort": 1112,
37
+ "internalSecureTcpPort": 0,
38
+ "externalTcpIp": "127.0.111.1",
39
+ "externalTcpPort": 1113,
40
+ "externalSecureTcpPort": 0,
41
+ "internalHttpIp": "127.0.111.1",
42
+ "internalHttpPort": 2112,
43
+ "externalHttpIp": "127.0.111.1",
44
+ "externalHttpPort": 2113,
45
+ "lastCommitPosition": 1111,
46
+ "writerCheckpoint": 111,
47
+ "chaserCheckpoint": 11,
48
+ "epochPosition": 222,
49
+ "epochNumber": 22,
50
+ "epochId": "00000001-0000-4000-8000-000000000000",
51
+ "nodePriority": 0
52
+ },
53
+ {
54
+ "instanceId": "00000102-0000-4000-8000-000000000000",
55
+ "timeStamp": "2000-01-01T00:00:00.000000Z",
56
+ "state": "Slave",
57
+ "isAlive": true,
58
+ "internalTcpIp": "127.0.111.2",
59
+ "internalTcpPort": 1112,
60
+ "internalSecureTcpPort": 0,
61
+ "externalTcpIp": "127.0.111.2",
62
+ "externalTcpPort": 1113,
63
+ "externalSecureTcpPort": 0,
64
+ "internalHttpIp": "127.0.111.2",
65
+ "internalHttpPort": 2112,
66
+ "externalHttpIp": "127.0.111.2",
67
+ "externalHttpPort": 2113,
68
+ "lastCommitPosition": 1111,
69
+ "writerCheckpoint": 111,
70
+ "chaserCheckpoint": 11,
71
+ "epochPosition": 222,
72
+ "epochNumber": 22,
73
+ "epochId": "00000001-0000-4000-8000-000000000000",
74
+ "nodePriority": 0
75
+ },
76
+ {
77
+ "instanceId": "00000103-0000-4000-8000-000000000000",
78
+ "timeStamp": "2000-01-01T00:00:00.000000Z",
79
+ "state": "Slave",
80
+ "isAlive": false,
81
+ "internalTcpIp": "127.0.111.3",
82
+ "internalTcpPort": 1112,
83
+ "internalSecureTcpPort": 0,
84
+ "externalTcpIp": "127.0.111.3",
85
+ "externalTcpPort": 1113,
86
+ "externalSecureTcpPort": 0,
87
+ "internalHttpIp": "127.0.111.3",
88
+ "internalHttpPort": 2112,
89
+ "externalHttpIp": "127.0.111.3",
90
+ "externalHttpPort": 2113,
91
+ "lastCommitPosition": 1111,
92
+ "writerCheckpoint": 111,
93
+ "chaserCheckpoint": 11,
94
+ "epochPosition": 222,
95
+ "epochNumber": 22,
96
+ "epochId": "00000001-0000-4000-8000-000000000000",
97
+ "nodePriority": 0
98
+ }
99
+ ],
100
+ "serverIp": "127.0.111.1",
101
+ "serverPort": 2112
102
+ }
103
+ JSON
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,112 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ module GossipEndpoint
6
+ module Response
7
+ module Member
8
+ def self.instance_id(member_index=nil)
9
+ member_index ||= 1
10
+
11
+ UUID.example member_index + 100
12
+ end
13
+
14
+ def self.time_stamp
15
+ Controls::Time::Raw.example.iso8601 6
16
+ end
17
+
18
+ def self.state(member_index=nil)
19
+ member_index ||= 1
20
+
21
+ if member_index == 1
22
+ State.leader
23
+ else
24
+ State.follower
25
+ end
26
+ end
27
+
28
+ def self.is_alive(member_index=nil)
29
+ if member_index == 3
30
+ false
31
+ else
32
+ true
33
+ end
34
+ end
35
+
36
+ def self.internal_tcp_ip(member_index=nil)
37
+ IPAddress.example member_index
38
+ end
39
+ singleton_class.send :alias_method, :external_tcp_ip, :internal_tcp_ip
40
+ singleton_class.send :alias_method, :internal_http_ip, :internal_tcp_ip
41
+ singleton_class.send :alias_method, :external_http_ip, :internal_tcp_ip
42
+
43
+ def self.internal_tcp_port
44
+ Port::TCP::Internal.example
45
+ end
46
+
47
+ def self.internal_secure_tcp_port
48
+ 0
49
+ end
50
+
51
+ def self.external_tcp_port
52
+ Port::TCP::External.example
53
+ end
54
+
55
+ def self.external_secure_tcp_port
56
+ 0
57
+ end
58
+
59
+ def self.internal_http_port
60
+ Port::HTTP::Internal.example
61
+ end
62
+
63
+ def self.external_http_port
64
+ Port::HTTP.example
65
+ end
66
+
67
+ def self.last_commit_position
68
+ 1111
69
+ end
70
+
71
+ def self.writer_checkpoint
72
+ 111
73
+ end
74
+
75
+ def self.chaser_checkpoint
76
+ 11
77
+ end
78
+
79
+ def self.epoch_position
80
+ 222
81
+ end
82
+
83
+ def self.epoch_number
84
+ 22
85
+ end
86
+
87
+ def self.epoch_id
88
+ UUID.example
89
+ end
90
+
91
+ def self.node_priority
92
+ 0
93
+ end
94
+
95
+ module Index
96
+ def self.leader
97
+ 1
98
+ end
99
+
100
+ def self.follower(follower_index=nil)
101
+ follower_index ||= 1
102
+
103
+ self.leader + follower_index
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,17 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ Hostname = EventStore::HTTP::Connect::Controls::Cluster::Hostname
6
+
7
+ module Hostname
8
+ module NonCluster
9
+ def self.example
10
+ EventStore::HTTP::Connect::Controls::Hostname.example
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ IPAddress = EventStore::HTTP::Connect::Controls::Cluster::IPAddress
6
+
7
+ module IPAddress
8
+ module Leader
9
+ def self.example
10
+ IPAddress.example member_index
11
+ end
12
+
13
+ def self.member_index
14
+ 2
15
+ end
16
+ end
17
+
18
+ module NonCluster
19
+ def self.example
20
+ EventStore::HTTP::Connect::Controls::IPAddress.example
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ module Port
6
+ module TCP
7
+ def self.example
8
+ 1113
9
+ end
10
+
11
+ module Internal
12
+ def self.example
13
+ TCP.example - 1
14
+ end
15
+ end
16
+ end
17
+
18
+ module HTTP
19
+ def self.example
20
+ EventStore::HTTP::Connect::Controls::Port.example
21
+ end
22
+
23
+ module Internal
24
+ def self.example
25
+ HTTP.example - 1
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ ResolveHost = EventStore::HTTP::Connect::Controls::Cluster::ResolveHost
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ Time = Clock::Controls::Time
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module Controls
5
+ UUID = Identifier::UUID::Controls::Incrementing
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ class Data
5
+ include Schema::DataStructure
6
+
7
+ attribute :tcp_ip_address, String
8
+ attribute :tcp_port, Integer
9
+
10
+ attribute :http_ip_address, String
11
+ attribute :http_port, Integer
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,54 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ class Get
5
+ include Log::Dependency
6
+
7
+ configure :get_leader_status
8
+
9
+ dependency :get_gossip_endpoint, GossipEndpoint::Get
10
+
11
+ def self.build(connect_http=nil)
12
+ instance = new
13
+
14
+ GossipEndpoint::Get.configure instance, connect_http
15
+
16
+ instance
17
+ end
18
+
19
+ def self.call(*arguments)
20
+ instance = build *arguments
21
+ instance.()
22
+ end
23
+
24
+ def call
25
+ logger.trace { "Getting leader" }
26
+
27
+ gossip_response = get_gossip_endpoint.()
28
+
29
+ if gossip_response.nil?
30
+ logger.info { "Get leader done; EventStore is non-clustered" }
31
+ return nil
32
+ end
33
+
34
+ data = Data.new
35
+
36
+ SetAttributes.(
37
+ data,
38
+ gossip_response.leader,
39
+ copy: [
40
+ { :external_tcp_ip => :tcp_ip_address },
41
+ { :external_tcp_port => :tcp_port },
42
+ { :external_http_ip => :http_ip_address },
43
+ { :external_http_port => :http_port }
44
+ ]
45
+ )
46
+
47
+ logger.info { "Get leader done (TCP: #{data.tcp_ip_address}:#{data.tcp_port}, HTTP: #{data.http_ip_address}:#{data.http_port})" }
48
+
49
+ data
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,95 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module GossipEndpoint
5
+ class Get
6
+ include Log::Dependency
7
+
8
+ configure :get_gossip_endpoint
9
+
10
+ dependency :connect_http, EventStore::HTTP::Connect
11
+
12
+ def self.build(connect_http=nil)
13
+ instance = new
14
+
15
+ connect_http = EventStore::HTTP::Connect.configure(
16
+ instance,
17
+ connect: connect_http,
18
+ attr_name: :connect_http
19
+ )
20
+
21
+ instance
22
+ end
23
+
24
+ def self.call(host=nil, connect_http=nil)
25
+ instance = build connect_http
26
+ instance.(host)
27
+ end
28
+
29
+ def call(host=nil)
30
+ log_attributes = LogAttributes.get self, host: host
31
+
32
+ logger.trace { "GET gossip endpoint (#{log_attributes})" }
33
+
34
+ connection_telemetry = EventStore::HTTP::Connect.register_telemetry_sink connect_http
35
+
36
+ connect_http.(host) do |connection|
37
+ begin
38
+ response = connection.request_get uri_path, http_headers
39
+ rescue Net::ReadTimeout
40
+ response = nil
41
+ end
42
+
43
+ if response
44
+ log_attributes << ", StatusCode: #{response.code}, ReasonPhrase: #{response.message}"
45
+
46
+ logger.debug { "GET gossip endpoint done (#{log_attributes})" }
47
+ logger.trace { "Data: \n\n#{response.body}" }
48
+ end
49
+
50
+ if response.nil? or non_cluster? response
51
+ error_message = "GET gossip endpoint made against non-clustered EventStore (#{log_attributes})"
52
+ logger.error error_message
53
+ raise NonClusterError, error_message
54
+ end
55
+
56
+ response = Transform::Read.(response.body, :json, Response)
57
+
58
+ return response
59
+ end
60
+ end
61
+
62
+ def uri_path
63
+ '/gossip'
64
+ end
65
+
66
+ def http_headers
67
+ { 'Accept' => 'application/json' }
68
+ end
69
+
70
+ def non_cluster?(response)
71
+ response.code == '408' and response.message == "Server was unable to handle request in time"
72
+ end
73
+
74
+ NonClusterError = Class.new StandardError
75
+
76
+ module LogAttributes
77
+ def self.get(get_instance, host: nil)
78
+ host_setting = get_instance.connect_http.host
79
+
80
+ if host.nil?
81
+ host_text = host_setting
82
+ else
83
+ host_text = "#{host} [Overriding setting: [#{host_setting}]]"
84
+ end
85
+
86
+ get_instance.instance_exec do
87
+ "Host: #{host_text}"
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,24 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module GossipEndpoint
5
+ class Response
6
+ include Schema::DataStructure
7
+
8
+ attribute :server_ip, String
9
+ attribute :server_port, Integer
10
+ attribute :leader, Member
11
+ attribute :followers, Array, default: ->{ Array.new }
12
+
13
+ def add_member(member)
14
+ if member.state == State.leader
15
+ self.leader = member
16
+ else
17
+ followers << member
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module GossipEndpoint
5
+ class Response
6
+ class Member
7
+ include Schema::DataStructure
8
+
9
+ attribute :instance_id, String
10
+ attribute :time_stamp, String
11
+ attribute :state, String
12
+ attribute :is_alive
13
+
14
+ attribute :internal_tcp_ip, String
15
+ attribute :internal_tcp_port, Integer
16
+ attribute :internal_secure_tcp_port, Integer
17
+
18
+ attribute :external_tcp_ip, String
19
+ attribute :external_tcp_port, Integer
20
+ attribute :external_secure_tcp_port, Integer
21
+
22
+ attribute :internal_http_ip, String
23
+ attribute :internal_http_port, Integer
24
+
25
+ attribute :external_http_ip, String
26
+ attribute :external_http_port, Integer
27
+
28
+ attribute :last_commit_position, Integer
29
+ attribute :writer_checkpoint, Integer
30
+ attribute :chaser_checkpoint, Integer
31
+
32
+ attribute :epoch_position, Integer
33
+ attribute :epoch_number, Integer
34
+ attribute :epoch_id, String
35
+
36
+ attribute :node_priority, Integer
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module GossipEndpoint
5
+ class Response
6
+ module State
7
+ def self.leader
8
+ 'Master'
9
+ end
10
+
11
+ def self.follower
12
+ 'Slave'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,61 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ module GossipEndpoint
5
+ class Response
6
+ module Transformer
7
+ def self.json
8
+ JSON
9
+ end
10
+
11
+ def self.instance(raw_data)
12
+ response = Response.new
13
+
14
+ SetAttributes.(response, raw_data)
15
+
16
+ raw_data[:members].each do |member_data|
17
+ member = member_instance member_data
18
+
19
+ response.add_member member
20
+ end
21
+
22
+ response
23
+ end
24
+
25
+ def self.member_instance(member_data)
26
+ member = Response::Member.new
27
+
28
+ SetAttributes.(
29
+ member,
30
+ member_data,
31
+ strict: true
32
+ )
33
+
34
+ member
35
+ end
36
+
37
+ module Status
38
+ def self.leader
39
+ 'Master'
40
+ end
41
+
42
+ def self.follower
43
+ 'Slave'
44
+ end
45
+ end
46
+
47
+ module JSON
48
+ def self.read(text)
49
+ formatted_data = ::JSON.parse text, symbolize_names: true
50
+
51
+ raw_data = Casing::Underscore.(formatted_data)
52
+
53
+ raw_data
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,13 @@
1
+ module EventStore
2
+ module Cluster
3
+ module LeaderStatus
4
+ class Log < ::Log
5
+ def tag!(tags)
6
+ tags << :event_store_clustering
7
+ tags << :event_store
8
+ tags << :verbose
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-event_store-cluster-leader_status
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evt-event_store-http-connect
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: evt-identifier-uuid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: evt-schema
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: evt-transform
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test_bench
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: " "
84
+ email: opensource@eventide-project.org
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/event_store/cluster/leader_status.rb
90
+ - lib/event_store/cluster/leader_status/controls.rb
91
+ - lib/event_store/cluster/leader_status/controls/cluster_size.rb
92
+ - lib/event_store/cluster/leader_status/controls/connect_http.rb
93
+ - lib/event_store/cluster/leader_status/controls/current_members.rb
94
+ - lib/event_store/cluster/leader_status/controls/gossip_endpoint/response.rb
95
+ - lib/event_store/cluster/leader_status/controls/gossip_endpoint/response/member.rb
96
+ - lib/event_store/cluster/leader_status/controls/hostname.rb
97
+ - lib/event_store/cluster/leader_status/controls/ip_address.rb
98
+ - lib/event_store/cluster/leader_status/controls/port.rb
99
+ - lib/event_store/cluster/leader_status/controls/resolve_host.rb
100
+ - lib/event_store/cluster/leader_status/controls/time.rb
101
+ - lib/event_store/cluster/leader_status/controls/uuid.rb
102
+ - lib/event_store/cluster/leader_status/data.rb
103
+ - lib/event_store/cluster/leader_status/get.rb
104
+ - lib/event_store/cluster/leader_status/gossip_endpoint/get.rb
105
+ - lib/event_store/cluster/leader_status/gossip_endpoint/response.rb
106
+ - lib/event_store/cluster/leader_status/gossip_endpoint/response/member.rb
107
+ - lib/event_store/cluster/leader_status/gossip_endpoint/response/state.rb
108
+ - lib/event_store/cluster/leader_status/gossip_endpoint/response/transformer.rb
109
+ - lib/event_store/cluster/leader_status/log.rb
110
+ homepage: https://github.com/eventide-project/event-store-clustering
111
+ licenses:
112
+ - MIT
113
+ metadata: {}
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 2.3.3
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ requirements: []
129
+ rubyforge_project:
130
+ rubygems_version: 2.6.8
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: Cluster leader status support for EventStore
134
+ test_files: []