From dc152722044f4be94fe344c46cdf2c1e0cdd1806 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 19 Feb 2016 01:23:44 +0100 Subject: Kind of working --- check.go | 6 ++---- main.go | 32 +++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/check.go b/check.go index b61bb66..f66813e 100644 --- a/check.go +++ b/check.go @@ -3,7 +3,7 @@ package main import ( "bytes" "encoding/hex" - "errors" + "fmt" "io/ioutil" "math/rand" "net/http" @@ -14,8 +14,6 @@ func init() { rand.Seed(time.Now().UnixNano()) } -var errDiffer = errors.New("key differs") - func Key() string { b := make([]byte, 16) for i := range b { @@ -37,7 +35,7 @@ func Check(uri string) error { } body = bytes.TrimSpace(body) if string(body) != key { - return errDiffer + return fmt.Errorf("%v down", uri) } return nil } diff --git a/main.go b/main.go index cca1043..f45e290 100644 --- a/main.go +++ b/main.go @@ -2,25 +2,43 @@ package main import ( "flag" - "fmt" "log" + "sync" "time" ) var conf = flag.String("conf", "config.yml", "configuration file") +func Checker(uri string, errc chan<- error) { + t := time.NewTicker(time.Second * 5) + var n int + defer t.Stop() + for range t.C { + log.Println("check", uri) + err := Check(uri) + if err != nil { + n++ + errc <- err + } + if n > 5 { + return + } + } +} + func main() { c, err := LoadConfig(*conf) if err != nil { log.Fatal(err) } errc := Logger() + wg := sync.WaitGroup{} for _, uri := range c.Check { - log.Println(uri) - err := Check(uri) - if err != nil { - errc <- fmt.Errorf("%v: down %v", uri, err) - } + wg.Add(1) + go func(uri string) { + Checker(uri, errc) + wg.Done() + }(uri) } - time.Sleep(time.Second) + wg.Wait() } -- cgit v1.2.3