/
main.go
61 lines (50 loc) · 1.3 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"github.com/quintype/check-haproxy-statistics"
"os"
"fmt"
"flag"
)
func readEntitiesFromSocket(filename string) ([]map[string]string) {
stream, err := haproxy.StatsStream(filename)
if (err != nil) {
fmt.Println("Couldn't connect to Socket")
os.Exit(2)
}
defer stream.Close()
reader := haproxy.NewCSVReader(stream)
entities, err := reader.ReadAll()
if (err != nil) {
fmt.Println("Malformed CSV")
os.Exit(2)
}
return entities
}
func findEntity(entities []map[string]string, f func(map[string]string) bool) (map[string]string) {
for _, row := range entities {
if(f(row)) {
return row
}
}
fmt.Println("The Server is not in HAProxy")
os.Exit(2)
return nil
}
func main() {
socket := flag.String("H", "/tmp/haproxysock", "HAProxy stat socket")
pxname := flag.String("pxname", "", "PXName of the group (name of backend)")
svname := flag.String("svname", "", "Name of the server")
flag.Parse()
if(*pxname == "" || *svname == "") {
fmt.Println("Must pass in pxname and svname")
os.Exit(2)
}
entities := readEntitiesFromSocket(*socket)
entity := findEntity(entities, func (row map[string]string) bool {
return row["pxname"] == *pxname && row["svname"] == *svname
})
fmt.Println("The Server is", entity["status"])
if(entity["status"] != "UP") {
os.Exit(2)
}
}