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.

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