60 lines
1.2 KiB
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)
|
|
}
|
|
}
|
|
|
|
}
|