// Run determines and runs the command specified by the CLI args. func (m *Main) Run(args ...string) error { name, args := cmd.ParseCommandName(args) // Extract name from args. switch name { case "", "help": if err := help.NewCommand().Run(args...); err != nil { return fmt.Errorf("help: %s", err) } case "dumptsmdev": fmt.Fprintf(m.Stderr, "warning: dumptsmdev is deprecated, use dumptsm instead.\n") fallthrough case "dumptsm": name := dumptsm.NewCommand() if err := name.Run(args...); err != nil { return fmt.Errorf("dumptsm: %s", err) } case "export": name := export.NewCommand() if err := name.Run(args...); err != nil { return fmt.Errorf("export: %s", err) } case "report": name := report.NewCommand() if err := name.Run(args...); err != nil { return fmt.Errorf("report: %s", err) } case "verify": name := verify.NewCommand() if err := name.Run(args...); err != nil { return fmt.Errorf("verify: %s", err) } default: return fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'influx_inspect help' for usage`+"\n\n", name) } return nil }
// Run determines and runs the command specified by the CLI args. func (m *Main) Run(args ...string) error { name, args := cmd.ParseCommandName(args) // Extract name from args. switch name { case "", "run": cmd := run.NewCommand() // Tell the server the build details. cmd.Version = version cmd.Commit = commit cmd.Branch = branch cmd.Logger = m.Logger if err := cmd.Run(args...); err != nil { return fmt.Errorf("run: %s", err) } signalCh := make(chan os.Signal, 1) signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) m.Logger.Info("Listening for signals") // Block until one of the signals above is received select { case <-signalCh: m.Logger.Info("Signal received, initializing clean shutdown...") go func() { cmd.Close() }() } // Block again until another signal is received, a shutdown timeout elapses, // or the Command is gracefully closed m.Logger.Info("Waiting for clean shutdown...") select { case <-signalCh: m.Logger.Info("second signal received, initializing hard shutdown") case <-time.After(time.Second * 30): m.Logger.Info("time limit reached, initializing hard shutdown") case <-cmd.Closed: m.Logger.Info("server shutdown completed") } // goodbye. case "backup": name := backup.NewCommand() if err := name.Run(args...); err != nil { return fmt.Errorf("backup: %s", err) } case "restore": name := restore.NewCommand() if err := name.Run(args...); err != nil { return fmt.Errorf("restore: %s", err) } case "config": if err := run.NewPrintConfigCommand().Run(args...); err != nil { return fmt.Errorf("config: %s", err) } case "version": if err := NewVersionCommand().Run(args...); err != nil { return fmt.Errorf("version: %s", err) } case "help": if err := help.NewCommand().Run(args...); err != nil { return fmt.Errorf("help: %s", err) } default: return fmt.Errorf(`unknown command "%s"`+"\n"+`Run 'influxd help' for usage`+"\n\n", name) } return nil }