HostChecker/main.go

60 lines
1.2 KiB
Go

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)
}
}
}