arnaucube
arnaucube/canaryBotPublic Self-hosted repository
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}