Class: Async::Service::Supervisor::Envoy::Endpoint

Inherits:
Object
  • Object
show all
Defined in:
lib/async/service/supervisor/envoy/endpoint.rb

Overview

Represents one upstream endpoint published to Envoy EDS.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, scheme:, protocols:, addresses:) ⇒ Endpoint

Initialize an endpoint.

Raises:

  • (ArgumentError)


46
47
48
49
50
51
52
53
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 46

def initialize(name:, scheme:, protocols:, addresses:)
	@name = name.to_s
	@scheme = scheme.to_sym
	@protocols = protocols.map(&:to_s).uniq.freeze
	raise ArgumentError, "An endpoint requires at least one protocol!" if @protocols.empty?
	@addresses = addresses.map{|value| self.class.normalize_address(value)}.freeze
	raise ArgumentError, "An endpoint requires at least one address!" if @addresses.empty?
end

Instance Attribute Details

#addressesObject (readonly)

Returns the value of attribute addresses.



65
66
67
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 65

def addresses
  @addresses
end

#nameObject (readonly)

Returns the value of attribute name.



56
57
58
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 56

def name
  @name
end

#protocolsObject (readonly)

Returns the value of attribute protocols.



62
63
64
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 62

def protocols
  @protocols
end

#schemeObject (readonly)

Returns the value of attribute scheme.



59
60
61
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 59

def scheme
  @scheme
end

#The grouped concrete addresses.(groupedconcreteaddresses.) ⇒ Object (readonly)



65
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 65

attr :addresses

#The supported upstream HTTP protocol names.(supportedupstreamHTTPprotocolnames.) ⇒ Object (readonly)



62
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 62

attr :protocols

#The upstream cluster name.(upstreamclustername.) ⇒ Object (readonly)



56
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 56

attr :name

Class Method Details

.normalize_address(value) ⇒ Object

Normalize a concrete endpoint address.



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 29

def self.normalize_address(value)
	if path = value[:path]
		raise ArgumentError, "A Unix endpoint cannot specify an IP address or port!" if value[:address] || value[:port]
		
		{path: path.to_s}.freeze
	elsif value[:address] && value[:port]
		{address: value[:address].to_s, port: Integer(value[:port])}.freeze
	else
		raise ArgumentError, "An endpoint address requires either path, or address and port: #{value.inspect}"
	end
end

.wrap(value) ⇒ Object

Wrap serialized endpoint state.



15
16
17
18
19
20
21
22
23
24
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 15

def self.wrap(value)
	case value
	when self
		value
	when Hash
		new(**value)
	else
		raise ArgumentError, "Invalid Envoy endpoint: #{value.inspect}"
	end
end

Instance Method Details

#The upstream application scheme.=(upstreamapplicationscheme. = (value)) ⇒ Object



59
# File 'lib/async/service/supervisor/envoy/endpoint.rb', line 59

attr :scheme