From 04d3c2a2e4ea1b77e9b0dd34e3e14aeb6accb99d Mon Sep 17 00:00:00 2001 From: laurentu Date: Wed, 16 Aug 2023 09:55:47 +0200 Subject: [PATCH] aha --- conf.yaml | 19 +++++++++++++++ main.go | 71 ++++++++++++++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 29 deletions(-) diff --git a/conf.yaml b/conf.yaml index d64ea4f..b7f9d98 100644 --- a/conf.yaml +++ b/conf.yaml @@ -4,6 +4,11 @@ IDE: hosts: - 172.17.4.30 - 172.17.4.31 + check: + type: http + port: 80 + uri: / + method: HEAD PLOOPI: tables: @@ -11,3 +16,17 @@ PLOOPI: hosts: - 172.17.4.40 - 172.17.4.20 + check: + type: tcp + port: 80 + +SMTP: + tables: + - smtp + hosts: + - 172.17.4.40 + - 172.17.4.20 + check: + type: smtp + port: 25 + diff --git a/main.go b/main.go index 1bb75db..019f461 100644 --- a/main.go +++ b/main.go @@ -8,39 +8,52 @@ import "log" import "gopkg.in/yaml.v3" import "time" +type Check struct { + Type string `yaml:"type"` + Port int `yaml:"port"` + Uri string `yaml:"uri"` + Method string `yaml:"method"` +} type Group struct { - Name string `yaml:"group"` - Tables []string `yaml:"tables"` - Hosts []string `yaml:"hosts"` + Name string `yaml:"group"` + Tables []string `yaml:"tables"` + Hosts []string `yaml:"hosts"` + Check Check `yaml:"check"` } + func main() { - fmt.Println("starting") + log.Println("Starting") - var conf map[string]Group - yamlFile, err := ioutil.ReadFile("conf.yaml") - if err != nil { - log.Printf("Configuration open error #%v ", err) - } - err = yaml.Unmarshal(yamlFile, &conf) - if err != nil { - log.Fatalf("Configuration read error #%v", err) - } + var conf map[string]Group + yamlFile, err := ioutil.ReadFile("conf.yaml") + if err != nil { + log.Printf("Configuration open error #%v ", err) + } + err = yaml.Unmarshal(yamlFile, &conf) + if err != nil { + log.Fatalf("Configuration read error #%v", err) + } - for name, group := range conf { - fmt.Println("Checking group", name ) - for _, host := range group.Hosts { - client := &http.Client{ - Timeout: time.Second * 5, - } - resp, err := client.Head(fmt.Sprintf("http://%s", host)) - if err != nil { - fmt.Println(host, "Failed") - } else { - _, _ = io.ReadAll(resp.Body) - resp.Body.Close() - fmt.Println(host, "Status", resp.StatusCode) - } - } - } + for name, group := range conf { + + log.Println("Checking group", name, group) + go checkGroup(group) + } +} + +func checkGroup(group Group) { + for _, host := range group.Hosts { + client := &http.Client{ + Timeout: time.Second * 5, + } + resp, err := client.Head(fmt.Sprintf("http://%s", host)) + if err != nil { + log.Println(host, "Failed") + } else { + _, _ = io.ReadAll(resp.Body) + resp.Body.Close() + log.Println(host, "Status", resp.StatusCode) + } + } }