canaryBot/checker.go
checker.goRaw
1package main
2
3import (
4 "log"
5 "net/http"
6 "strconv"
7 "time"
8)
9
10func checker(services []Service) {
11 log.Println("serverChecker started")
12 log.Println(services)
13
14 ticker := time.NewTicker(time.Second * time.Duration(int64(config.SleepTime)))
15 for _ = range ticker.C {
16 for k, service := range services {
17 resp, err := checkUrl(service.Url)
18 if err != nil {
19 if service.Counter == 0 {
20 msg := "⚠️ Service " + service.Name + ", with url " + service.Url + " is not responding"
21 matrixSendMsg(msg)
22 }
23 services[k].Counter = services[k].Counter + 1
24 } else if resp.StatusCode != service.StatusCode {
25 if service.Counter == 0 {
26 msg := "⚠️ Service " + service.Name + ", with url " + service.Url + " has returned a non expected StatusCode: " + strconv.Itoa(resp.StatusCode) + ", expected: " + strconv.Itoa(service.StatusCode)
27 matrixSendMsg(msg)
28 }
29 services[k].Counter = services[k].Counter + 1
30 } else {
31 if services[k].Counter != 0 {
32 msg := "✔️ Service " + service.Name + ", with url " + service.Url + " is alive again"
33 matrixSendMsg(msg)
34 }
35 services[k].Counter = 0
36 }
37
38 if services[k].Counter > config.Retry {
39 msg := "⚠️ Service " + services[k].Name + ", with url " + services[k].Url + " is still failing"
40 matrixSendNotice(msg)
41 services[k].Counter = 1
42 }
43 }
44 }
45}
46
47func checkUrl(url string) (*http.Response, error) {
48 timeout := time.Duration(1 * time.Second)
49 client := http.Client{
50 Timeout: timeout,
51 }
52 resp, err := client.Get(url)
53 return resp, err
54}