class Dendrite::ServiceNode

Constants

DefaultServer
Dependency
Deploy
DomainName
Metadata
Port
Scale
Telemetry
VALID_EMAIL_REGEX

Attributes

component[R]
default_servers[R]
dependencies[R]
deploy[R]
domain_names[R]
lead_email[R]
metadata[R]
organization[R]
ports[R]
scale[R]
team_email[R]
telemetry[R]
type[R]
users[R]

Public Class Methods

new(**args) click to toggle source
# File lib/dendrite/service_node.rb, line 146
def initialize(**args)
  @ports = {}
  @default_servers = {}
  @domain_names = {}
  args.each do |k,v|
    case k
    when :ports
      v.each do |name, port|
        @ports[name] = Port.new(name, port)
      end
    when :deploy
      @deploy = Deploy.new(v[:repository], v[:package]) if v != nil
    when :scale
      @scale = Scale.new(v[:max_instance_count], v[:min_instance_count], v[:min_memory], v[:min_cpu]) if v != nil
    when :telemetry
      @telemetry = Telemetry.new(v[:health_url], v[:notification_email]) if v != nil
    when :default_servers
      v.each do |node|
        @default_servers[node[:environment]] ||= []
        @default_servers[node[:environment]] << DefaultServer.new(node[:environment], node[:host], node[:port])
      end
    when :domain_names
      v.each do |dns|
        @domain_names[dns[:environment]] ||= []
        @domain_names[dns[:environment]] << DomainName.new(dns[:environment], dns[:domain_name])
      end
    when :metadata
      @metadata = Metadata.new(v)
    when :users
      @users = v.keys
    else
      instance_variable_set("@#{k}", v)
    end
  end
  @dependencies = {}
end

Public Instance Methods

add_dependency(service:, latency:, identifier:, read_only: false) click to toggle source
# File lib/dendrite/service_node.rb, line 199
def add_dependency(service:, latency:, identifier:, read_only: false)
  @dependencies[service.name] = Dependency.new(service, latency, identifier, read_only == true)
end
loadbalancer_port() click to toggle source
# File lib/dendrite/service_node.rb, line 195
def loadbalancer_port
  ports[:loadbalancer_port].port if ports[:loadbalancer_port]
end
name() click to toggle source
# File lib/dendrite/service_node.rb, line 187
def name
  "#{organization}_#{component}_#{@name}" if @name
end
real_name() click to toggle source
# File lib/dendrite/service_node.rb, line 183
def real_name
  @name
end
service_port() click to toggle source
# File lib/dendrite/service_node.rb, line 191
def service_port
  ports[:service_port].port if ports[:service_port]
end
to_h() click to toggle source
# File lib/dendrite/service_node.rb, line 203
def to_h
  data = {
    organization: organization,
    component: component,
    name: real_name,
    complete_name: name,
    lead_email: lead_email,
    team_email: team_email,
    type: type,
    ports: ports.values.collect(&:to_h),
    dependencies: dependencies.keys
  }
  data.merge!({deploy: deploy ? deploy.to_h : {}})
  data.merge!({scale: scale ? scale.to_h : {}})
  data.merge!({telemetry: telemetry ? telemetry.to_h : {}})
  data.merge!({default_servers: default_servers.values.flatten.collect(&:to_h)})
end