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