package main import "fmt" import "net/http" import "io" import "io/ioutil" 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"` Check Check `yaml:"check"` } func main() { 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) } 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) } } }