diff --git a/alrmrc b/alrmrc index 592d062..28a6c88 100644 --- a/alrmrc +++ b/alrmrc @@ -8,6 +8,8 @@ monitor group webservers check ping # or the end of a line check ping # checks are not named, so multiple is okay -monitor host gateway address 10.11.135.100 +monitor host gateway address 10.79.37.200 + check ping -monitor host database +# Hosts without any checks will always be successful +monitor host database address 10.11.135.103 diff --git a/check/check_ping.go b/check/check_ping.go index c25f5a1..85b1434 100644 --- a/check/check_ping.go +++ b/check/check_ping.go @@ -1,11 +1,16 @@ package check +import ( + "fmt" +) + type CheckPing struct { Type string Address string } func (c *CheckPing) Check() error { + fmt.Printf("Pinging %s .. \n", c.Address) return nil } diff --git a/config/group.go b/config/group.go index 7e46185..9b32648 100644 --- a/config/group.go +++ b/config/group.go @@ -22,3 +22,15 @@ func (ag *AlrmGroup) NewHost(name string) (*AlrmHost, error) { ag.Hosts[name] = host return host, nil } + +func (ag *AlrmGroup) Check() error { + for _, host := range ag.Hosts { + for _, chk := range host.Checks { + err := chk.Check() + if err != nil { + return err + } + } + } + return nil +} diff --git a/main.go b/main.go index 07c5e98..cabe3fb 100644 --- a/main.go +++ b/main.go @@ -44,15 +44,39 @@ func main() { } fmt.Fprintf(os.Stdout, "%s\n", string(o)) - case "", "config": + case "check", "config", "": _, err := config.ReadConfig(*cfgPath, *debuglvl) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) os.Exit(1) } - fmt.Fprintf(os.Stdout, "Config is OK.\n") - os.Exit(0) + + case "test": + cfg, err := config.ReadConfig(*cfgPath, *debuglvl) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err.Error()) + os.Exit(1) + } + + tn := flag.Arg(1) + if tn == "" { + fmt.Fprintf(os.Stderr, "test requires a host or group\n") + os.Exit(1) + } + + group, exists := cfg.Groups[tn] + if !exists { + fmt.Fprintf(os.Stderr, "group or host is not defined\n") + os.Exit(1) + } + + err = group.Check() + if err != nil { + fmt.Fprintf(os.Stderr, "Check failed: %s\n", err.Error()) + os.Exit(1) + } + fmt.Fprintf(os.Stdout, "Check successful\n") default: fmt.Fprintf(os.Stderr, "Unknown command: %s\n", command)