def move(to_state)
if Thread.current != self.driver.thread
self.driver.message(:move, [to_state])
else
orig_to_state = to_state
from_state = self.state
msg = "#{self.name} move '#{from_state}' to '#{to_state}'"
applog(self, :info, msg)
self.driver.clear_events
self.metrics[from_state].each { |m| m.disable }
if to_state == :unmonitored
self.metrics[nil].each { |m| m.disable }
end
self.action(to_state)
if [:start, :restart].include?(to_state) && self.metrics[to_state].empty?
to_state = :up
end
self.metrics[to_state].each { |m| m.enable }
if from_state == :unmonitored
self.metrics[nil].each { |m| m.enable }
end
self.state = to_state
Trigger.broadcast(self, :state_change, [from_state, orig_to_state])
msg = "#{self.name} moved '#{from_state}' to '#{to_state}'"
applog(self, :info, msg)
end
self
end