Class: Wakame::Service::AgentPool

Inherits:
Wakame::StatusDB::Model show all
Defined in:
lib/wakame/service.rb

Constant Summary collapse

ID =
self.to_s

Constants included from AttributeHelper

AttributeHelper::CLASS_TYPE_KEY, AttributeHelper::CONVERT_CLASSES, AttributeHelper::PRIMITIVE_CLASSES

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Wakame::StatusDB::Model

#delete, #dirty?, inherited, #new_record?, #on_after_delete, #on_after_load, #on_before_delete, #on_before_load, #reload, #save

Methods included from AttributeHelper

#dump_attrs, #retrieve_attr_attribute

Class Method Details

.instanceObject



113
114
115
116
117
118
119
120
# File 'lib/wakame/service.rb', line 113

def self.instance
  a = self.find(ID)
  if a.nil?
    a = self.new
    a.save
  end
  a
end

.resetObject



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/wakame/service.rb', line 122

def self.reset
  ap = self.instance
  
  nil_cloud_host_id = lambda { |agent_id|
    agent = Agent.find(agent_id)
    agent.cloud_host_id = nil
    agent.save
  }

  ap.group_observed.keys.each &nil_cloud_host_id
  ap.group_active.keys.each &nil_cloud_host_id
  ap.save
end

Instance Method Details

#create_or_find(agent_id) ⇒ Object



141
142
143
144
145
146
147
148
149
# File 'lib/wakame/service.rb', line 141

def create_or_find(agent_id)
  agent = Service::Agent.find(agent_id)
  if agent.nil?
    agent = Service::Agent.new
    agent.id = agent_id
    Wakame.log.debug("#{self.class}: Created new agent object with Agent ID: #{agent_id}")
  end
  agent
end

#find_agent(agent_id) ⇒ Object



213
214
215
216
# File 'lib/wakame/service.rb', line 213

def find_agent(agent_id)
  raise "The agent ID \"#{agent_id}\" is not registered in the pool" unless group_active.has_key? agent_id
  Agent.find(agent_id) || raise("The agent ID #{agent_id} is registered. but not in the database.")
end

#idObject



137
138
139
# File 'lib/wakame/service.rb', line 137

def id
  ID
end

#register(agent) ⇒ Object

Raises:

  • (ArgumentError)


169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/wakame/service.rb', line 169

def register(agent)
  raise ArgumentError unless agent.is_a?(Agent)
  agent_id = agent.id
  if group_active.has_key?(agent_id)
  else
    if group_observed.has_key?(agent_id)
      # Move the reference from unregistered group to the registered group.
      group_observed.delete(agent_id)
      group_active[agent_id]=1
    else
      # The agent is going to be registered at first time.
      group_active[agent_id]=1
    end

    self.save

    Wakame.log.debug("#{self.class}: Register agent to active group: #{agent_id}")
    ED.fire_event(Event::AgentMonitored.new(agent))
  end
end

#register_as_observed(agent) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/wakame/service.rb', line 151

def register_as_observed(agent)
  agent_id = agent.id
  if group_observed.has_key?(agent_id)
  else
    if group_active.has_key?(agent_id)
      # Move the reference from unregistered group to the registered group.
      group_active.delete(agent_id)
      group_observed[agent_id]=1
    else
      # The agent is going to be registered at first time.
      group_observed[agent_id]=1
    end

    self.save
    Wakame.log.debug("#{self.class}: Register agent to observed group: #{agent_id}")
  end
end

#unregister(agent) ⇒ Object

Raises:

  • (ArgumentError)


190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'lib/wakame/service.rb', line 190

def unregister(agent)
  raise ArgumentError unless agent.is_a?(Agent)
  agent_id = agent.id
  
  unregistered = false
  if group_active.has_key?(agent_id)
    group_active.delete(agent_id)
    unregistered = true
  end

  if group_observed.has_key?(agent_id)
    group_observed.delete(agent_id)
    unregistered = true
  end

  if unregistered
    self.save
    
    Wakame.log.debug("#{self.class}: Unregister agent: #{agent.id}")
    ED.fire_event(Event::AgentUnMonitored.new(agent))
  end
end