def self.control(name, command)
watches = Array(self.watches[name] || self.groups[name])
jobs = []
case command
when "start", "monitor"
watches.each { |w| jobs << Thread.new { w.monitor if w.state != :up } }
when "restart"
watches.each { |w| jobs << Thread.new { w.move(:restart) } }
when "stop"
watches.each { |w| jobs << Thread.new { w.unmonitor.action(:stop) if w.state != :unmonitored } }
when "unmonitor"
watches.each { |w| jobs << Thread.new { w.unmonitor if w.state != :unmonitored } }
when "remove"
watches.each { |w| jobs << Thread.new { self.unwatch(w) } }
else
raise InvalidCommandError.new
end
jobs.each { |j| j.join }
watches.map { |x| x.name }
end