evt-event_store-http-connect 0.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/lib/event_store/http/connect.rb +16 -0
  3. data/lib/event_store/http/connect/assertions.rb +23 -0
  4. data/lib/event_store/http/connect/connect.rb +174 -0
  5. data/lib/event_store/http/connect/controls.rb +20 -0
  6. data/lib/event_store/http/connect/controls/cluster.rb +21 -0
  7. data/lib/event_store/http/connect/controls/cluster/hostname.rb +15 -0
  8. data/lib/event_store/http/connect/controls/cluster/ip_address.rb +52 -0
  9. data/lib/event_store/http/connect/controls/cluster/resolve_host.rb +22 -0
  10. data/lib/event_store/http/connect/controls/cluster/size.rb +15 -0
  11. data/lib/event_store/http/connect/controls/host.rb +19 -0
  12. data/lib/event_store/http/connect/controls/hostname.rb +35 -0
  13. data/lib/event_store/http/connect/controls/ip_address.rb +13 -0
  14. data/lib/event_store/http/connect/controls/ip_address/loopback.rb +15 -0
  15. data/lib/event_store/http/connect/controls/ip_address/loopback/alias.rb +66 -0
  16. data/lib/event_store/http/connect/controls/ip_address/non_routable.rb +15 -0
  17. data/lib/event_store/http/connect/controls/ip_address/unavailable.rb +25 -0
  18. data/lib/event_store/http/connect/controls/net_http.rb +37 -0
  19. data/lib/event_store/http/connect/controls/port.rb +32 -0
  20. data/lib/event_store/http/connect/controls/resolve_host.rb +18 -0
  21. data/lib/event_store/http/connect/controls/settings.rb +22 -0
  22. data/lib/event_store/http/connect/controls/timeouts.rb +25 -0
  23. data/lib/event_store/http/connect/defaults.rb +11 -0
  24. data/lib/event_store/http/connect/log.rb +13 -0
  25. data/lib/event_store/http/connect/log_attributes.rb +19 -0
  26. data/lib/event_store/http/connect/net_http.rb +25 -0
  27. data/lib/event_store/http/connect/settings.rb +21 -0
  28. data/lib/event_store/http/connect/telemetry.rb +24 -0
  29. metadata +98 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 97a7bd0fee4ca0e32f4c360b0a6133c080be1933
4
+ data.tar.gz: 8252510cab8534e3cb9194f2f7421c0dfb1fab82
5
+ SHA512:
6
+ metadata.gz: fb4b8d2b156765f99275efd0f32cf3fb15e451f86f0cf1ce20b37b1a3c97300fb0589b6f38453aa2d7706bed95e256fd25a50ca49d29a9d1c4ea71cf472cdebb
7
+ data.tar.gz: 512436e0c43e5d6bbf3b7010309d49236d2f05068921633b47ffdc484757b8c96cb04a688694b802b1be24c05398b005a1eb8f41d35b431ae55bb03f267f70ea
@@ -0,0 +1,16 @@
1
+ require 'net/http'
2
+
3
+ require 'dns/resolve_host'
4
+
5
+ require 'event_store/http/connect/log'
6
+
7
+ require 'event_store/http/connect/defaults'
8
+ require 'event_store/http/connect/net_http'
9
+ require 'event_store/http/connect/settings'
10
+
11
+ require 'event_store/http/connect/assertions'
12
+ require 'event_store/http/connect/log_attributes'
13
+
14
+ require 'event_store/http/connect/telemetry'
15
+
16
+ require 'event_store/http/connect/connect'
@@ -0,0 +1,23 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Assertions
5
+ def settings?(settings, namespace: nil)
6
+ namespace = Array(namespace)
7
+
8
+ Settings.names.all? do |name|
9
+ settings_value = settings.get name, *namespace
10
+
11
+ if settings_value.nil?
12
+ true
13
+ else
14
+ instance_value = __send__ name
15
+
16
+ instance_value == settings_value
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,174 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ include Log::Dependency
5
+
6
+ dependency :resolve_host, DNS::ResolveHost
7
+ dependency :telemetry, ::Telemetry
8
+
9
+ setting :host
10
+ setting :port
11
+
12
+ setting :continue_timeout
13
+ setting :keep_alive_timeout
14
+ setting :open_timeout
15
+ setting :read_timeout
16
+
17
+ def self.build(settings=nil, namespace: nil)
18
+ settings ||= Settings.build
19
+ namespace = Array(namespace)
20
+
21
+ instance = new
22
+ DNS::ResolveHost.configure instance
23
+ ::Telemetry.configure instance
24
+ settings.set instance, *namespace
25
+ instance
26
+ end
27
+
28
+ def self.call(settings=nil, namespace: nil, host: nil, &block)
29
+ instance = build settings, namespace: namespace
30
+ instance.(host, &block)
31
+ end
32
+
33
+ def self.configure(receiver, settings=nil, namespace: nil, connect: nil, attr_name: nil)
34
+ attr_name ||= :connect
35
+
36
+ if connect.nil?
37
+ instance = build settings, namespace: namespace
38
+ else
39
+ instance = connect
40
+ end
41
+
42
+ receiver.public_send "#{attr_name}=", instance
43
+
44
+ instance
45
+ end
46
+
47
+ def self.register_telemetry_sink(instance)
48
+ sink = Telemetry::Sink.new
49
+ instance.telemetry.register sink
50
+ sink
51
+ end
52
+
53
+ def call(host=nil, &block)
54
+ log_attributes = LogAttributes.get self, host: host
55
+
56
+ host ||= self.host
57
+
58
+ logger.trace { "Establishing HTTP connection to EventStore (#{log_attributes})" }
59
+
60
+ begin
61
+ ip_addresses = resolve_ip_address host
62
+ rescue DNS::ResolveHost::ResolutionError => error
63
+ error_message = "Could not connect to EventStore (#{log_attributes}, Error: #{error.class})"
64
+ logger.error error_message
65
+
66
+ record_host_resolution_failed host, error
67
+
68
+ raise ConnectionError, error
69
+ end
70
+
71
+ record_host_resolved host, ip_addresses
72
+
73
+ net_http = nil
74
+
75
+ ip_addresses.each_with_index do |ip_address, index|
76
+ net_http = new_connection ip_address
77
+
78
+ begin
79
+ net_http.start
80
+
81
+ record_connection_established host, ip_address, net_http
82
+
83
+ break
84
+ rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED, SocketError => error
85
+ record_connection_attempt_failed host, ip_address, error
86
+
87
+ error_message = "Could not connect to EventStore (#{log_attributes}, IPAddress: #{ip_address} (#{index.next} of #{ip_addresses.count}), Error: #{error.class})"
88
+
89
+ if index + 1 == ip_addresses.count
90
+ logger.error error_message
91
+ raise ConnectionError, error_message
92
+ else
93
+ logger.warn error_message
94
+ net_http = nil
95
+ end
96
+ end
97
+ end
98
+
99
+ unless block.nil?
100
+ begin
101
+ block.(net_http)
102
+ ensure
103
+ net_http.finish
104
+ end
105
+ end
106
+
107
+ logger.info { "HTTP connection to EventStore established (#{log_attributes}, IPAddress: #{net_http.address})" }
108
+
109
+ net_http
110
+ end
111
+
112
+ def resolve_ip_address(host)
113
+ logger.trace { "Resolving IP address from host (Host: #{host})" }
114
+
115
+ ip_addresses = resolve_host.(host) do |dns_resolver|
116
+ dns_resolver.timeouts = open_timeout
117
+ end
118
+
119
+ logger.debug { "Resolved IP address from host (Host: #{host}, IPAddresses: #{ip_addresses.inspect})" }
120
+
121
+ ip_addresses
122
+ end
123
+
124
+ def record_connection_established(host, ip_address, connection)
125
+ record = Telemetry::ConnectionEstablished.new host, ip_address, port, connection
126
+
127
+ telemetry.record :connection_established, record
128
+
129
+ record
130
+ end
131
+
132
+ def record_connection_attempt_failed(host, ip_address, error)
133
+ record = Telemetry::ConnectionAttemptFailed.new host, ip_address, port, error
134
+
135
+ telemetry.record :connection_attempt_failed, record
136
+
137
+ record
138
+ end
139
+
140
+ def record_host_resolved(host, ip_addresses)
141
+ record = Telemetry::HostResolved.new host, ip_addresses
142
+
143
+ telemetry.record :host_resolved, record
144
+
145
+ record
146
+ end
147
+
148
+ def record_host_resolution_failed(host, error)
149
+ record = Telemetry::HostResolutionFailed.new host, error
150
+
151
+ telemetry.record :host_resolution_failed, record
152
+
153
+ record
154
+ end
155
+
156
+ def new_connection(ip_address)
157
+ net_http = Net::HTTP.new ip_address, port
158
+
159
+ net_http.continue_timeout = continue_timeout unless continue_timeout.nil?
160
+ net_http.keep_alive_timeout = keep_alive_timeout unless keep_alive_timeout.nil?
161
+ net_http.open_timeout = open_timeout unless open_timeout.nil?
162
+ net_http.read_timeout = read_timeout unless read_timeout.nil?
163
+
164
+ net_http
165
+ end
166
+
167
+ def port
168
+ @port ||= Defaults.port
169
+ end
170
+
171
+ ConnectionError = Class.new StandardError
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,20 @@
1
+ require 'securerandom'
2
+
3
+ require 'event_store/http/connect/controls/ip_address'
4
+ require 'event_store/http/connect/controls/ip_address/loopback'
5
+ require 'event_store/http/connect/controls/ip_address/loopback/alias'
6
+ require 'event_store/http/connect/controls/ip_address/non_routable'
7
+ require 'event_store/http/connect/controls/ip_address/unavailable'
8
+
9
+ require 'event_store/http/connect/controls/cluster/hostname'
10
+ require 'event_store/http/connect/controls/cluster/ip_address'
11
+ require 'event_store/http/connect/controls/cluster/resolve_host'
12
+ require 'event_store/http/connect/controls/cluster/size'
13
+
14
+ require 'event_store/http/connect/controls/host'
15
+ require 'event_store/http/connect/controls/hostname'
16
+ require 'event_store/http/connect/controls/net_http'
17
+ require 'event_store/http/connect/controls/port'
18
+ require 'event_store/http/connect/controls/resolve_host'
19
+ require 'event_store/http/connect/controls/settings'
20
+ require 'event_store/http/connect/controls/timeouts'
@@ -0,0 +1,21 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Cluster
6
+ module Hostname
7
+ def self.example
8
+ Hostname.example 'cluster'
9
+ end
10
+ end
11
+
12
+ module Size
13
+ def self.example
14
+ 3
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Cluster
6
+ module Hostname
7
+ def self.example
8
+ Controls::Hostname.example 'cluster'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,52 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Cluster
6
+ module IPAddress
7
+ def self.example(member_index=nil, third_octet: nil)
8
+ member_index ||= 1
9
+ third_octet ||= 111
10
+
11
+ Controls::IPAddress::Loopback::Alias.example(
12
+ member_index,
13
+ third_octet: third_octet
14
+ )
15
+ end
16
+
17
+ module List
18
+ def list
19
+ (1..Size.example).map do |member_index|
20
+ example member_index
21
+ end
22
+ end
23
+ end
24
+ extend List
25
+
26
+ module Unavailable
27
+ extend List
28
+
29
+ def self.example(member_index=nil)
30
+ IPAddress.example member_index, third_octet: 222
31
+ end
32
+ end
33
+
34
+ module PartiallyAvailable
35
+ extend List
36
+
37
+ def self.example(member_index=nil)
38
+ member_index ||= nil
39
+
40
+ if member_index == 1
41
+ Unavailable.example member_index
42
+ else
43
+ IPAddress.example member_index
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,22 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Cluster
6
+ module ResolveHost
7
+ def self.configure(receiver, host: nil, ip_addresses: nil)
8
+ host ||= Hostname.example
9
+ ip_addresses ||= IPAddress.list
10
+
11
+ Controls::ResolveHost.configure(
12
+ receiver,
13
+ host: host,
14
+ ip_addresses: ip_addresses
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Cluster
6
+ module Size
7
+ def self.example
8
+ 3
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Host
6
+ def self.example
7
+ Hostname.example
8
+ end
9
+
10
+ module Other
11
+ def self.example
12
+ IPAddress.example
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Hostname
6
+ def self.example(suffix=nil)
7
+ if suffix.nil?
8
+ 'eventstore.local'
9
+ else
10
+ "eventstore-#{suffix}.local"
11
+ end
12
+ end
13
+
14
+ module Localhost
15
+ def self.example
16
+ 'localhost'
17
+ end
18
+ end
19
+
20
+ module Other
21
+ def self.example(randomize: nil)
22
+ if randomize
23
+ random = SecureRandom.hex 7
24
+
25
+ "some-hostname-#{random}"
26
+ else
27
+ 'some-hostname'
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module IPAddress
6
+ def self.example
7
+ Loopback.example
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module IPAddress
6
+ module Loopback
7
+ def self.example
8
+ '127.0.0.1'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,66 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module IPAddress
6
+ module Loopback
7
+ module Alias
8
+ def self.example(fourth_octet=nil, third_octet: nil)
9
+ third_octet ||= 0
10
+
11
+ if third_octet == 0
12
+ fourth_octet ||= 2
13
+ else
14
+ fourth_octet ||= 1
15
+ end
16
+
17
+ "127.0.#{third_octet}.#{fourth_octet}"
18
+ end
19
+
20
+ module VerifyAll
21
+ def self.call
22
+ port = Port::Unused.get
23
+
24
+ unaliased_ip_addresses = list.select do |ip_address|
25
+ begin
26
+ server = TCPServer.new ip_address, port
27
+ server.close
28
+ false
29
+ rescue Errno::EADDRNOTAVAIL
30
+ true
31
+ end
32
+ end
33
+
34
+ return true if unaliased_ip_addresses.none?
35
+
36
+ warn <<~MESSAGE
37
+ The following loopback aliases are not configured:
38
+
39
+ #{unaliased_ip_addresses * "\n "}
40
+
41
+ To setup a loopback alias, run the following command:
42
+
43
+ sudo ifconfig lo0 alias 127.0.111.1
44
+
45
+ Note that the above command was tested on OS X and may vary
46
+ on Linux systems.
47
+ MESSAGE
48
+
49
+ false
50
+ end
51
+
52
+ def self.list
53
+ [
54
+ Alias.example,
55
+ *Cluster::IPAddress.list,
56
+ *Cluster::IPAddress::Unavailable.list
57
+ ]
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,15 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module IPAddress
6
+ module NonRoutable
7
+ def self.example
8
+ '127.0.0.0'
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module IPAddress
6
+ module Unavailable
7
+ def self.example
8
+ external
9
+ end
10
+
11
+ def self.external
12
+ local_ip_address_list = Socket.ip_address_list
13
+
14
+ local_ip_address_list.map! &:ip_address
15
+
16
+ local_ip_address_list.find do |ip_address|
17
+ ip_address != IPAddress::Loopback.example
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module NetHTTP
6
+ def self.example
7
+ net_http = Net::HTTP.new host, port
8
+ net_http.start
9
+ net_http
10
+ end
11
+
12
+ def self.host
13
+ IPAddress.example
14
+ end
15
+
16
+ def self.port
17
+ Port.example
18
+ end
19
+
20
+ module Defaults
21
+ def self.keep_alive_timeout
22
+ 2
23
+ end
24
+
25
+ def self.open_timeout
26
+ 60
27
+ end
28
+
29
+ def self.read_timeout
30
+ 60
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Port
6
+ def self.example
7
+ Connect::Defaults.port
8
+ end
9
+
10
+ module Unused
11
+ def self.get
12
+ localhost = IPAddress::Loopback.example
13
+
14
+ (10000..19999).each do |port|
15
+ begin
16
+ socket = TCPSocket.new localhost, port
17
+ socket.close
18
+ next
19
+
20
+ rescue Errno::ECONNREFUSED
21
+ return port
22
+ end
23
+ end
24
+
25
+ fail
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module ResolveHost
6
+ def self.configure(receiver, host: nil, ip_addresses: nil)
7
+ host ||= Hostname.example
8
+ ip_addresses ||= [IPAddress.example]
9
+
10
+ resolve_host = SubstAttr::Substitute.(:resolve_host, receiver)
11
+ resolve_host.set host, ip_addresses
12
+ resolve_host
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Settings
6
+ def self.example(host: nil, namespace: nil, **attributes)
7
+ host ||= IPAddress.example
8
+ namespace = Array(namespace)
9
+
10
+ attributes[:host] = host
11
+
12
+ data_source = namespace.reduce attributes do |hash, namespace|
13
+ { namespace => hash }
14
+ end
15
+
16
+ EventStore::HTTP::Connect::Settings.build data_source
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Controls
5
+ module Timeouts
6
+ def self.continue
7
+ 1
8
+ end
9
+
10
+ def self.keep_alive
11
+ 2
12
+ end
13
+
14
+ def self.open
15
+ 3
16
+ end
17
+
18
+ def self.read
19
+ 4
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Defaults
5
+ def self.port
6
+ 2113
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ class Log < ::Log
5
+ def tag!(tags)
6
+ tags << :event_store_http_connect
7
+ tags << :event_store
8
+ tags << :verbose
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module LogAttributes
5
+ def self.get(connect, host: nil)
6
+ if host.nil?
7
+ host_text = connect.host
8
+ else
9
+ host_text = "#{host} [Overriding setting: #{connect.host}]"
10
+ end
11
+
12
+ connect.instance_exec do
13
+ "Host: #{host_text}, Port: #{port}, KeepAliveTimeout: #{keep_alive_timeout || '(default)'}, ReadTimeout: #{read_timeout || '(default)'}, OpenTimeout: #{open_timeout || '(default)'}, ContinueTimeout: #{continue_timeout || '(none)'}"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module NetHTTP
5
+ module Assertions
6
+ def connected?(ip_address: nil, port: nil)
7
+ unless ip_address.nil? || ip_address == self.address
8
+ return false
9
+ end
10
+
11
+ unless port.nil? || port == self.port
12
+ return false
13
+ end
14
+
15
+ active?
16
+ end
17
+
18
+ def closed?
19
+ not active?
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ class Settings < ::Settings
5
+ def self.data_source
6
+ 'settings/event_store_http.json'
7
+ end
8
+
9
+ def self.names
10
+ %i(
11
+ host
12
+ port
13
+ continue_timeout
14
+ read_timeout
15
+ open_timeout
16
+ )
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ module EventStore
2
+ module HTTP
3
+ class Connect
4
+ module Telemetry
5
+ class Sink
6
+ include ::Telemetry::Sink
7
+
8
+ record :host_resolved
9
+ record :host_resolution_failed
10
+ record :connection_attempt_failed
11
+ record :connection_established
12
+ end
13
+
14
+ HostResolved = Struct.new :host, :ip_addresses
15
+
16
+ HostResolutionFailed = Struct.new :host, :error
17
+
18
+ ConnectionAttemptFailed = Struct.new :host, :ip_address, :port, :error
19
+
20
+ ConnectionEstablished = Struct.new :host, :ip_address, :port, :connection
21
+ end
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-event_store-http-connect
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-dns-resolve_host
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: test_bench
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: " "
42
+ email: opensource@eventide-project.org
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/event_store/http/connect.rb
48
+ - lib/event_store/http/connect/assertions.rb
49
+ - lib/event_store/http/connect/connect.rb
50
+ - lib/event_store/http/connect/controls.rb
51
+ - lib/event_store/http/connect/controls/cluster.rb
52
+ - lib/event_store/http/connect/controls/cluster/hostname.rb
53
+ - lib/event_store/http/connect/controls/cluster/ip_address.rb
54
+ - lib/event_store/http/connect/controls/cluster/resolve_host.rb
55
+ - lib/event_store/http/connect/controls/cluster/size.rb
56
+ - lib/event_store/http/connect/controls/host.rb
57
+ - lib/event_store/http/connect/controls/hostname.rb
58
+ - lib/event_store/http/connect/controls/ip_address.rb
59
+ - lib/event_store/http/connect/controls/ip_address/loopback.rb
60
+ - lib/event_store/http/connect/controls/ip_address/loopback/alias.rb
61
+ - lib/event_store/http/connect/controls/ip_address/non_routable.rb
62
+ - lib/event_store/http/connect/controls/ip_address/unavailable.rb
63
+ - lib/event_store/http/connect/controls/net_http.rb
64
+ - lib/event_store/http/connect/controls/port.rb
65
+ - lib/event_store/http/connect/controls/resolve_host.rb
66
+ - lib/event_store/http/connect/controls/settings.rb
67
+ - lib/event_store/http/connect/controls/timeouts.rb
68
+ - lib/event_store/http/connect/defaults.rb
69
+ - lib/event_store/http/connect/log.rb
70
+ - lib/event_store/http/connect/log_attributes.rb
71
+ - lib/event_store/http/connect/net_http.rb
72
+ - lib/event_store/http/connect/settings.rb
73
+ - lib/event_store/http/connect/telemetry.rb
74
+ homepage: https://github.com/eventide-project/event-store-http-connect
75
+ licenses:
76
+ - MIT
77
+ metadata: {}
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 2.3.3
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 2.6.8
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: Connection library to EventStore's HTTP interface
98
+ test_files: []