main.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "io"
  6. "os"
  7. )
  8. var globalOpts struct {
  9. ctlSock string
  10. verbose bool
  11. }
  12. type commandFunc func([]string) error
  13. var cmdMap map[string]commandFunc
  14. func init() {
  15. cmdMap = map[string]commandFunc{
  16. // TODO: implement set and get of config at runtime
  17. //"set": setCmd,
  18. //"get": getCmd,
  19. "pause": pauseCmd,
  20. "reload": reloadCmd,
  21. "restart": restartCmd,
  22. "help": helpCmd,
  23. }
  24. }
  25. //func setCmd(ctlSock string, args []string) error {}
  26. //func getCmd(ctlSock string, args []string) error {}
  27. func pauseCmd(args []string) error {
  28. return nil
  29. }
  30. func reloadCmd(args []string) error {
  31. return nil
  32. }
  33. func restartCmd(args []string) error {
  34. return nil
  35. }
  36. func helpCmd(args []string) error {
  37. usage(os.Stdout)
  38. os.Exit(0)
  39. return nil
  40. }
  41. func usage(w io.Writer) {
  42. fmt.Fprintf(w, "USAGE: %s [globalOpts] [SUBCOMMAND] [opts]\n", os.Args[0])
  43. fmt.Fprintf(w, "\nSUBCOMMANDS:\n\n")
  44. for command := range cmdMap {
  45. fmt.Fprintf(w, "\t%s\n", command)
  46. }
  47. }
  48. func parseAndRun(args []string) {
  49. cmdName := args[0]
  50. cmdToRun, ok := cmdMap[cmdName]
  51. if !ok {
  52. fmt.Fprintf(os.Stderr, "Unknown subcommand: %s\n", cmdName)
  53. usage(os.Stderr)
  54. os.Exit(2)
  55. }
  56. err := cmdToRun(args)
  57. if err != nil {
  58. fmt.Fprintf(os.Stderr, "Error:\n%s\n", err)
  59. os.Exit(1)
  60. }
  61. }
  62. func main() {
  63. flag.StringVar(&globalOpts.ctlSock, "ctl-socket", "/tmp/circologd-ctl.sock",
  64. "Path to a unix domain socket for the control server; leave empty to disable")
  65. flag.BoolVar(&globalOpts.verbose, "verbose", false, "Print more output")
  66. flag.Parse()
  67. args := flag.Args()
  68. if globalOpts.verbose {
  69. fmt.Fprintf(os.Stdout, "Args: %v", args)
  70. }
  71. if len(args) == 0 {
  72. usage(os.Stderr)
  73. os.Exit(-1)
  74. }
  75. parseAndRun(args)
  76. }