From 951bee15fdb5141dbe33d726d0c4b4bc2883e1dd Mon Sep 17 00:00:00 2001 From: Christopher Ramey Date: Mon, 11 Jan 2021 06:28:14 -0900 Subject: [PATCH] improved command line argument handling, migrated json to config at higher debug levels --- config/parser.go | 4 +-- main.go | 94 ++++++++++++++++++++++++++---------------------- 2 files changed, 54 insertions(+), 44 deletions(-) diff --git a/config/parser.go b/config/parser.go index 99a52e4..d7579a7 100644 --- a/config/parser.go +++ b/config/parser.go @@ -195,11 +195,11 @@ func (p *Parser) setState(state int) { p.lastcheck = nil } - if p.DebugLevel > 0 { + if p.DebugLevel > 1 { fmt.Printf("Parser state: %s", p.stateName()) } p.states = append(p.states, state) - if p.DebugLevel > 0 { + if p.DebugLevel > 1 { fmt.Printf(" -> %s\n", p.stateName()) } } diff --git a/main.go b/main.go index be5440e..ae4f051 100644 --- a/main.go +++ b/main.go @@ -1,18 +1,19 @@ package main import ( + "alrm/config" "encoding/json" - "fmt" "flag" + "fmt" "os" "strings" - "alrm/config" ) func main() { cfgPath := flag.String("c", "", "path to configuration file") debuglvl := flag.Int("d", 0, "debug level") + flag.Usage = printUsage flag.Parse() if *cfgPath == "" { @@ -23,63 +24,72 @@ func main() { *cfgPath = "/etc/alrmrc" } if *cfgPath == "" { - fmt.Fprintf(os.Stderr, "Cannot find configuration\n") + fmt.Fprintf(os.Stderr, "cannot find configuration\n") os.Exit(1) } } command := strings.ToLower(flag.Arg(0)) switch command { - case "json": - cfg, err := config.ReadConfig(*cfgPath, *debuglvl) - if err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err.Error()) - os.Exit(1) - } + case "config": + cfg, err := config.ReadConfig(*cfgPath, *debuglvl) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err.Error()) + os.Exit(1) + } + if *debuglvl > 0 { o, err := json.MarshalIndent(cfg, "", " ") if err != nil { fmt.Fprintf(os.Stderr, "JSON error: %s\n", err.Error()) os.Exit(1) } - fmt.Fprintf(os.Stdout, "%s\n", string(o)) + fmt.Printf("%s\n", string(o)) + } - case "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") + fmt.Printf("config is OK\n") - case "check": - tn := flag.Arg(1) - if tn == "" { - fmt.Fprintf(os.Stderr, "test requires a host or group\n") - os.Exit(1) - } - - cfg, err := config.ReadConfig(*cfgPath, 0) - if err != nil { - fmt.Fprintf(os.Stderr, "%s\n", err.Error()) - os.Exit(1) - } + case "check": + tn := flag.Arg(1) + if tn == "" { + fmt.Fprintf(os.Stderr, "check 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) - } + cfg, err := config.ReadConfig(*cfgPath, 0) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err.Error()) + os.Exit(1) + } - err = group.Check(*debuglvl) - if err != nil { - fmt.Fprintf(os.Stderr, "Check failed: %s\n", err.Error()) - os.Exit(1) - } - fmt.Fprintf(os.Stdout, "Check successful\n") + group, exists := cfg.Groups[tn] + if !exists { + fmt.Fprintf(os.Stderr, "group or host is not defined\n") + os.Exit(1) + } - default: - fmt.Fprintf(os.Stderr, "Unknown command: %s\n", command) + err = group.Check(*debuglvl) + if err != nil { + fmt.Fprintf(os.Stderr, "check failed: %s\n", err.Error()) os.Exit(1) + } + fmt.Printf("check successful\n") + + case "": + printUsage() + + default: + fmt.Fprintf(os.Stderr, "unknown command: %s\n", command) + os.Exit(1) } } + +func printUsage() { + fmt.Printf("Usage: %s [args] ...\n", os.Args[0]) + fmt.Printf("Arguments:\n") + fmt.Printf(" -c : path to configuration file\n") + fmt.Printf(" -d : debug level (0-9, higher for more debugging)\n") + fmt.Printf("Actions:\n") + fmt.Printf(" verify configuration: %s [args] config\n", os.Args[0]) + fmt.Printf(" run a check manually: %s [args] check \n", os.Args[0]) +}