a command line interface for elastic (work in progress)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
4.2 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "io/ioutil"
  7. "os"
  8. "strings"
  9. )
  10. func handleIndexCommand() {
  11. if len(os.Args) < 3 {
  12. fmt.Fprintf(os.Stderr, "%s index: subcommand missing\n", os.Args[0])
  13. printIndexUsage()
  14. os.Exit(1)
  15. }
  16. subcmd := strings.ToLower(os.Args[2])
  17. switch subcmd {
  18. case "list", "ls", "l":
  19. listcmd := flag.NewFlagSet("index list", flag.ExitOnError)
  20. listcmd.SetOutput(os.Stdout)
  21. cfgpath := listcmd.String("config", "", "path to configuration")
  22. server := listcmd.String("server", "", "server name to use")
  23. listcmd.Parse(os.Args[3:])
  24. cfg := LoadConfig(*cfgpath)
  25. es := cfg.GetClient(*server)
  26. indexes, err := es.IndexNames()
  27. if err != nil {
  28. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  29. os.Exit(1)
  30. }
  31. for _, index := range indexes {
  32. fmt.Printf("%s\n", index)
  33. }
  34. case "delete", "del", "d":
  35. cmd := flag.NewFlagSet("index delete", flag.ExitOnError)
  36. cmd.SetOutput(os.Stdout)
  37. cmd.Usage = func() {
  38. fmt.Printf("Usage: %s index %s [args] <index>...\n",
  39. os.Args[0], subcmd)
  40. cmd.PrintDefaults()
  41. }
  42. cfgpath := cmd.String("config", "", "path to configuration")
  43. server := cmd.String("server", "", "server name to use")
  44. cmd.Parse(os.Args[3:])
  45. if len(cmd.Args()) < 1 {
  46. fmt.Fprintf(os.Stderr, "index name required for index delete\n")
  47. cmd.Usage()
  48. os.Exit(1)
  49. }
  50. cfg := LoadConfig(*cfgpath)
  51. es := cfg.GetClient(*server)
  52. _, err := es.DeleteIndex(cmd.Args()...).Do(context.Background())
  53. if err != nil {
  54. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  55. os.Exit(1)
  56. }
  57. case "add", "a":
  58. cmd := flag.NewFlagSet("index add", flag.ExitOnError)
  59. cmd.SetOutput(os.Stdout)
  60. cmd.Usage = func() {
  61. fmt.Printf("Usage: %s index %s [args] <index>\n",
  62. os.Args[0], subcmd)
  63. cmd.PrintDefaults()
  64. }
  65. cfgpath := cmd.String("config", "", "path to configuration")
  66. server := cmd.String("server", "", "server name to use")
  67. bodystr := cmd.String("body", "",
  68. "json string to use as body options during add")
  69. bodyfile := cmd.String("bodyfile", "",
  70. "json file to use as body options during add")
  71. cmd.Parse(os.Args[3:])
  72. if len(cmd.Args()) < 1 {
  73. fmt.Fprintf(os.Stderr, "index name required for index add\n")
  74. cmd.PrintDefaults()
  75. os.Exit(1)
  76. }
  77. if *bodystr != "" && *bodyfile != "" {
  78. fmt.Fprintf(os.Stderr,
  79. "body parameter cannot be used with bodyfile parameter\n")
  80. os.Exit(1)
  81. }
  82. body := *bodystr
  83. if *bodyfile != "" {
  84. raw, err := ioutil.ReadFile(*bodyfile)
  85. if err != nil {
  86. fmt.Fprintf(os.Stderr, "read error: %s\n", err.Error())
  87. os.Exit(1)
  88. }
  89. body = string(raw)
  90. }
  91. cfg := LoadConfig(*cfgpath)
  92. es := cfg.GetClient(*server)
  93. ics := es.CreateIndex(cmd.Arg(0))
  94. if body != "" {
  95. ics.Body(body)
  96. }
  97. _, err := ics.Do(context.Background())
  98. if err != nil {
  99. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  100. os.Exit(1)
  101. }
  102. case "refresh":
  103. cmd := flag.NewFlagSet("index refresh", flag.ExitOnError)
  104. cmd.SetOutput(os.Stdout)
  105. cmd.Usage = func() {
  106. fmt.Printf("Usage: %s index %s [args] <index>...\n",
  107. os.Args[0], subcmd)
  108. cmd.PrintDefaults()
  109. }
  110. cfgpath := cmd.String("config", "", "path to configuration")
  111. server := cmd.String("server", "", "server name to use")
  112. cmd.Parse(os.Args[3:])
  113. if len(cmd.Args()) < 1 {
  114. fmt.Fprintf(os.Stderr, "index name required for index refresh\n")
  115. cmd.Usage()
  116. os.Exit(1)
  117. }
  118. cfg := LoadConfig(*cfgpath)
  119. es := cfg.GetClient(*server)
  120. _, err := es.Refresh(cmd.Args()...).Do(context.Background())
  121. if err != nil {
  122. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  123. os.Exit(1)
  124. }
  125. case "--help":
  126. printIndexUsage()
  127. os.Exit(0)
  128. default:
  129. fmt.Fprintf(os.Stderr, "%s: index '%s' is not a recognized subcommand\n",
  130. os.Args[0], os.Args[2])
  131. printIndexUsage()
  132. os.Exit(1)
  133. }
  134. }
  135. func printIndexUsage() {
  136. fmt.Printf("Usage: %s index <subcommand> ... \n", os.Args[0])
  137. fmt.Printf("See '%s index <subcommand> --help' for information", os.Args[0])
  138. fmt.Printf(" on a specific command\n")
  139. fmt.Printf("valid subcommands:\n")
  140. fmt.Printf(" list list indexes\n")
  141. fmt.Printf(" add add index\n")
  142. fmt.Printf(" delete delete index\n")
  143. fmt.Printf(" refresh refresh index\n")
  144. }