Class: Dendrite::ServiceNode

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations, Validator
Defined in:
lib/dendrite/service_node.rb

Defined Under Namespace

Classes: DefaultServer, Dependency, Deploy, Port, Scale, Telemetry

Constant Summary collapse

VALID_EMAIL_REGEX =
/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validator

#valid?

Constructor Details

#initialize(**args) ⇒ ServiceNode

Returns a new instance of ServiceNode.



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/dendrite/service_node.rb', line 125

def initialize(**args)
  @ports = {}
  @default_servers = {}
  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]) 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
    else
      instance_variable_set("@#{k}", v)
    end
  end
  @dependencies = {}
end

Instance Attribute Details

#componentObject (readonly)

Returns the value of attribute component.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def component
  @component
end

#default_serversObject (readonly)

Returns the value of attribute default_servers.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def default_servers
  @default_servers
end

#dependenciesObject (readonly)

Returns the value of attribute dependencies.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def dependencies
  @dependencies
end

#deployObject (readonly)

Returns the value of attribute deploy.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def deploy
  @deploy
end

#lead_emailObject (readonly)

Returns the value of attribute lead_email.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def lead_email
  @lead_email
end

#organizationObject (readonly)

Returns the value of attribute organization.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def organization
  @organization
end

#portsObject (readonly)

Returns the value of attribute ports.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def ports
  @ports
end

#scaleObject (readonly)

Returns the value of attribute scale.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def scale
  @scale
end

#team_emailObject (readonly)

Returns the value of attribute team_email.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def team_email
  @team_email
end

#telemetryObject (readonly)

Returns the value of attribute telemetry.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def telemetry
  @telemetry
end

#typeObject (readonly)

Returns the value of attribute type.



109
110
111
# File 'lib/dendrite/service_node.rb', line 109

def type
  @type
end

Instance Method Details

#add_dependency(service:, latency:) ⇒ Object



168
169
170
# File 'lib/dendrite/service_node.rb', line 168

def add_dependency(service:, latency:)
  @dependencies[service.name] = Dependency.new(service, latency)
end

#loadbalancer_portObject



164
165
166
# File 'lib/dendrite/service_node.rb', line 164

def loadbalancer_port
  ports[:loadbalancer_port].port if ports[:loadbalancer_port]
end

#nameObject



156
157
158
# File 'lib/dendrite/service_node.rb', line 156

def name
  "#{organization}_#{component}_#{@name}" if @name
end

#real_nameObject



152
153
154
# File 'lib/dendrite/service_node.rb', line 152

def real_name
  @name
end

#service_portObject



160
161
162
# File 'lib/dendrite/service_node.rb', line 160

def service_port
  ports[:service_port].port if ports[:service_port]
end

#to_hObject



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/dendrite/service_node.rb', line 172

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