evt-event_store-cluster-leader_status 0.0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []