18870: Need to declare NODES as array
[arvados.git] / services / crunchstat / crunchstat.go
index ad433bb3b532fea36610e975a14b6ca750f5b353..6383eae5452dd1d145420e7da41ce773878b5cef 100644 (file)
@@ -16,7 +16,8 @@ import (
        "syscall"
        "time"
 
-       "git.curoverse.com/arvados.git/lib/crunchstat"
+       "git.arvados.org/arvados.git/lib/cmd"
+       "git.arvados.org/arvados.git/lib/crunchstat"
 )
 
 const MaxLogLine = 1 << 14 // Child stderr lines >16KiB will be split
@@ -32,20 +33,23 @@ func main() {
                Logger: log.New(os.Stderr, "crunchstat: ", 0),
        }
 
-       flag.StringVar(&reporter.CgroupRoot, "cgroup-root", "", "Root of cgroup tree")
-       flag.StringVar(&reporter.CgroupParent, "cgroup-parent", "", "Name of container parent under cgroup")
-       flag.StringVar(&reporter.CIDFile, "cgroup-cid", "", "Path to container id file")
-       flag.IntVar(&signalOnDeadPPID, "signal-on-dead-ppid", signalOnDeadPPID, "Signal to send child if crunchstat's parent process disappears (0 to disable)")
-       flag.DurationVar(&ppidCheckInterval, "ppid-check-interval", ppidCheckInterval, "Time between checks for parent process disappearance")
-       pollMsec := flag.Int64("poll", 1000, "Reporting interval, in milliseconds")
-       getVersion := flag.Bool("version", false, "Print version information and exit.")
-
-       flag.Parse()
-
-       // Print version information if requested
-       if *getVersion {
+       flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
+       flags.StringVar(&reporter.CgroupRoot, "cgroup-root", "", "Root of cgroup tree")
+       flags.StringVar(&reporter.CgroupParent, "cgroup-parent", "", "Name of container parent under cgroup")
+       flags.StringVar(&reporter.CIDFile, "cgroup-cid", "", "Path to container id file")
+       flags.IntVar(&signalOnDeadPPID, "signal-on-dead-ppid", signalOnDeadPPID, "Signal to send child if crunchstat's parent process disappears (0 to disable)")
+       flags.DurationVar(&ppidCheckInterval, "ppid-check-interval", ppidCheckInterval, "Time between checks for parent process disappearance")
+       pollMsec := flags.Int64("poll", 1000, "Reporting interval, in milliseconds")
+       getVersion := flags.Bool("version", false, "Print version information and exit.")
+
+       if ok, code := cmd.ParseFlags(flags, os.Args[0], os.Args[1:], "program [args ...]", os.Stderr); !ok {
+               os.Exit(code)
+       } else if *getVersion {
                fmt.Printf("crunchstat %s\n", version)
                return
+       } else if flags.NArg() == 0 {
+               fmt.Fprintf(os.Stderr, "missing required argument: program (try -help)\n")
+               os.Exit(2)
        }
 
        reporter.Logger.Printf("crunchstat %s started", version)
@@ -58,7 +62,7 @@ func main() {
        reporter.PollPeriod = time.Duration(*pollMsec) * time.Millisecond
 
        reporter.Start()
-       err := runCommand(flag.Args(), reporter.Logger)
+       err := runCommand(flags.Args(), reporter.Logger)
        reporter.Stop()
 
        if err, ok := err.(*exec.ExitError); ok {
@@ -107,7 +111,7 @@ func runCommand(argv []string, logger *log.Logger) error {
        }
 
        // Funnel stderr through our channel
-       stderr_pipe, err := cmd.StderrPipe()
+       stderrPipe, err := cmd.StderrPipe()
        if err != nil {
                logger.Fatalln("error in StderrPipe:", err)
        }
@@ -121,7 +125,7 @@ func runCommand(argv []string, logger *log.Logger) error {
        os.Stdin.Close()
        os.Stdout.Close()
 
-       copyPipeToChildLog(stderr_pipe, log.New(os.Stderr, "", 0))
+       copyPipeToChildLog(stderrPipe, log.New(os.Stderr, "", 0))
 
        return cmd.Wait()
 }