class RubySkynet::StaticServiceRegistry

Public Class Methods

new(params = {}) click to toggle source

Create a service registry

# File lib/ruby_skynet/static_service_registry.rb, line 19
def initialize(params = {})
  @services = params[:registry]
  raise "Missing :registry in config that must list the availables services" unless @services
end

Public Instance Methods

deregister_service(name, version, region, hostname, port) click to toggle source

Deregister the supplied service from the Registry

# File lib/ruby_skynet/static_service_registry.rb, line 39
def deregister_service(name, version, region, hostname, port)
  server = "#{hostname}:#{port}"
  key = "#{name}/#{version}/#{region}"
  if servers = @services[key]
    servers.delete_if {|s| s == server}
    @services.delete(key) if servers.count == 0
  end
  key
end
on_server_removed(server, &block) click to toggle source

Invokes registered callbacks when a specific server is shutdown or terminates Not when a server de-registers itself The callback will only be called once and will need to be re-registered after being called if future callbacks are required for that server

# File lib/ruby_skynet/static_service_registry.rb, line 70
def on_server_removed(server, &block)
  #nop
end
register_service(name, version, region, hostname, port) click to toggle source

Register the supplied service at this Skynet Server host and Port Returns the UUID for the service that was created

# File lib/ruby_skynet/static_service_registry.rb, line 31
def register_service(name, version, region, hostname, port)
  server = "#{hostname}:#{port}"
  key = "#{name}/#{version}/#{region}"
  (@services[key] ||= []) << server
  key
end
servers_for(name, version='*', region=RubySkynet.region) click to toggle source

Returns [Array<String>] a list of servers implementing the requested service

# File lib/ruby_skynet/static_service_registry.rb, line 50
def servers_for(name, version='*', region=RubySkynet.region)
  if version == '*'
    # Find the highest version for the named service in this region
    version = -1
    @services.keys.each do |key|
      if match = key.match(/#{name}\/(\d+)\/#{region}/)
        ver = match[1].to_i
        version = ver if ver > version
      end
    end
  end
  servers = @services["#{name}/#{version}/#{region}"]
  raise ServiceUnavailable.new("No servers available for service: #{name} with version: #{version} in region: #{region}") unless servers
  servers
end
to_h() click to toggle source

Returns the Service Registry as a Hash

# File lib/ruby_skynet/static_service_registry.rb, line 25
def to_h
  @services.dup
end