# File lib/god/task.rb, line 129
    def move(to_state)
      self.mutex.synchronize do
        orig_to_state = to_state
        from_state = self.state
        
        msg = "#{self.name} move '#{from_state}' to '#{to_state}'"
        applog(self, :info, msg)
        
        # cleanup from current state
        self.metrics[from_state].each { |m| m.disable }
        
        if to_state == :unmonitored
          self.metrics[nil].each { |m| m.disable }
        end
        
        # perform action
        self.action(to_state)
        
        # enable simple mode
        if [:start, :restart].include?(to_state) && self.metrics[to_state].empty?
          to_state = :up
        end
        
        # move to new state
        self.metrics[to_state].each { |m| m.enable }
        
        # if no from state, enable lifecycle metric
        if from_state == :unmonitored
          self.metrics[nil].each { |m| m.enable }
        end
        
        # set state
        self.state = to_state
        
        # trigger
        Trigger.broadcast(self, :state_change, [from_state, orig_to_state])
        
        # return self
        self
      end
    end