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
Metadata =
OpenStruct

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validator

#valid?

Constructor Details

#initialize(**args) ⇒ ServiceNode



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/dendrite/service_node.rb', line 130

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], 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 :metadata
       = .new(v)
    when :users
      @users = v.keys
    else
      instance_variable_set("@#{k}", v)
    end
  end
  @dependencies = {}
end

Instance Attribute Details

#componentObject (readonly)

Returns the value of attribute component.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def component
  @component
end

#default_serversObject (readonly)

Returns the value of attribute default_servers.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def default_servers
  @default_servers
end

#dependenciesObject (readonly)

Returns the value of attribute dependencies.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def dependencies
  @dependencies
end

#deployObject (readonly)

Returns the value of attribute deploy.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def deploy
  @deploy
end

#lead_emailObject (readonly)

Returns the value of attribute lead_email.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def lead_email
  @lead_email
end

#metadataObject (readonly)

Returns the value of attribute metadata.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def 
  
end

#organizationObject (readonly)

Returns the value of attribute organization.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def organization
  @organization
end

#portsObject (readonly)

Returns the value of attribute ports.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def ports
  @ports
end

#scaleObject (readonly)

Returns the value of attribute scale.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def scale
  @scale
end

#team_emailObject (readonly)

Returns the value of attribute team_email.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def team_email
  @team_email
end

#telemetryObject (readonly)

Returns the value of attribute telemetry.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def telemetry
  @telemetry
end

#typeObject (readonly)

Returns the value of attribute type.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def type
  @type
end

#usersObject (readonly)

Returns the value of attribute users.



114
115
116
# File 'lib/dendrite/service_node.rb', line 114

def users
  @users
end

Instance Method Details

#add_dependency(service:, latency:, identifier:) ⇒ Object



177
178
179
# File 'lib/dendrite/service_node.rb', line 177

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

#loadbalancer_portObject



173
174
175
# File 'lib/dendrite/service_node.rb', line 173

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

#nameObject



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

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

#real_nameObject



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

def real_name
  @name
end

#service_portObject



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

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

#to_hObject



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/dendrite/service_node.rb', line 181

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