summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-02-19 01:23:44 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-02-19 01:23:44 +0100
commitdc152722044f4be94fe344c46cdf2c1e0cdd1806 (patch)
treeb975a205c127d46dd8a98845eed6b4b5b78844db
parentd9eebc8feb68035941c005ddfa45995559c967eb (diff)
Kind of working
-rw-r--r--check.go6
-rw-r--r--main.go32
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()
}