package main import ( "flag" "fmt" "log" "sync" "time" ) var ( conf = flag.String("conf", "config.yml", "configuration file") intr = flag.Duration("interval", time.Second*5, "check interval") ) func Checker(uri string, intr time.Duration, errc chan<- error) { t := time.NewTicker(intr) var stalled bool defer t.Stop() key := Keys() for range t.C { err := Check(uri, <-key) if err != nil { stalled = true errc <- err } else if stalled { stalled = false errc <- fmt.Errorf("%v back online", uri) } } } func main() { flag.Parse() c, err := LoadConfig(*conf) if err != nil { log.Fatal(err) } errc := Logger() wg := sync.WaitGroup{} for _, uri := range c.Check { wg.Add(1) go func(uri string) { Checker(uri, *intr, errc) wg.Done() }(uri) } wg.Wait() }