func (s *Scheduler) followHost(h utils.HostClient) { if _, ok := s.hostStreams[h.ID()]; ok { return } log := logger.New("fn", "followHost", "host.id", h.ID()) log.Info("streaming job events") events := make(chan *host.Event) stream, err := h.StreamEvents("all", events) if err != nil { log.Error("error streaming job events", "err", err) return } s.hostStreams[h.ID()] = stream log.Info("getting active jobs") jobs, err := h.ListJobs() if err != nil { log.Error("error getting active jobs", "err", err) return } log.Info(fmt.Sprintf("got %d active job(s) for host %s", len(jobs), h.ID())) for _, job := range jobs { s.handleActiveJob(&job) } s.triggerSyncFormations() go func() { for e := range events { s.jobEvents <- e } // TODO: reconnect this stream unless unfollowHost was called gh#1921 log.Error("job event stream closed unexpectedly") }() }