Class: Synapse::Rails::Consul

Inherits:
Object
  • Object
show all
Defined in:
lib/synapse/rails/consul.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.datacenterObject

Returns the value of attribute datacenter.



7
8
9
# File 'lib/synapse/rails/consul.rb', line 7

def datacenter
  @datacenter
end

Class Method Details

.discover(service) ⇒ Object



15
16
17
# File 'lib/synapse/rails/consul.rb', line 15

def discover service
  resolv hostnames for:service
end

.host_resolverObject



41
42
43
# File 'lib/synapse/rails/consul.rb', line 41

def host_resolver
  @host_resolver         ||= Resolv::DNS.new
end

.hostnames(params = {}) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/synapse/rails/consul.rb', line 8

def hostnames params={}
  return unless params[:for]
  [
    ("#{params[:for]}.service.#{datacenter}.consul" if datacenter),
    "#{params[:for]}.service.consul."
  ].compact
end

.local_consul_resolverObject



44
45
46
# File 'lib/synapse/rails/consul.rb', line 44

def local_consul_resolver
  @local_consul_resolver ||= Resolv::DNS.new(nameserver_port:[['127.0.0.1',8600]])
end

.resolv(hostnames) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/synapse/rails/consul.rb', line 18

def resolv hostnames
  @resolvers ||= Set.new
  hostnames.collect do |hostname|
    if @resolvers.empty?
      resolv_and_check_resolver_with hostname
    else
      use_resolvers hostname
    end
  end.flatten
end

.resolv_and_check_resolver_with(hostname) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/synapse/rails/consul.rb', line 33

def resolv_and_check_resolver_with hostname
  [host_resolver,local_consul_resolver].each do |resolver|
    addresses = resolver.getaddresses hostname
    next if addresses.empty?
    @resolvers << resolver
    return addresses
  end
end

.use_resolvers(hostname) ⇒ Object



28
29
30
31
32
# File 'lib/synapse/rails/consul.rb', line 28

def use_resolvers hostname
  @resolvers.collect do |resolver|
    resolver.getaddresses hostname
  end
end