From cc4f2ccbdb99367fcb8aebd1421d279a30ba80d3 Mon Sep 17 00:00:00 2001 From: sjcsjc123 <1401189096@qq.com> Date: Wed, 5 Jul 2023 00:34:41 +0800 Subject: [PATCH] feat: refactor cli(#149) --- cmd/app.go | 44 -------------------- cmd/cli/flydb.go | 10 ----- cmd/client/app.go | 75 ++++++++++++++++++++-------------- cmd/client/cli/flydb-client.go | 11 +++++ cmd/client/client.go | 6 --- cmd/{ => client}/data.go | 35 +++++++--------- cmd/{ => client}/root.go | 25 +----------- cmd/server.go | 33 --------------- cmd/server/cli/flydb-server.go | 27 ++++++++++++ cmd/server/server.go | 23 ++++++++++- 10 files changed, 120 insertions(+), 169 deletions(-) delete mode 100644 cmd/app.go delete mode 100644 cmd/cli/flydb.go create mode 100644 cmd/client/cli/flydb-client.go delete mode 100644 cmd/client/client.go rename cmd/{ => client}/data.go (73%) rename cmd/{ => client}/root.go (66%) delete mode 100644 cmd/server.go create mode 100644 cmd/server/cli/flydb-server.go diff --git a/cmd/app.go b/cmd/app.go deleted file mode 100644 index 006f3444..00000000 --- a/cmd/app.go +++ /dev/null @@ -1,44 +0,0 @@ -package cmd - -import ( - "fmt" - "github.com/desertbit/grumble" - "github.com/fatih/color" - "os" - "path" - "strings" -) - -// App FlyDB command app -var App = grumble.New(&grumble.Config{ - Name: "FlyDB Cli", - Description: "A command of FlyDB", - HistoryFile: path.Join(os.TempDir(), ".FlyDB_Cli.history"), - HistoryLimit: 10000, - ErrorColor: color.New(color.FgRed, color.Bold, color.Faint), - HelpHeadlineColor: color.New(color.FgGreen), - HelpHeadlineUnderline: false, - HelpSubCommands: true, - Prompt: "flydb $> ", - PromptColor: color.New(color.FgBlue, color.Bold), - Flags: func(f *grumble.Flags) {}, -}) - -func init() { - App.OnInit(func(a *grumble.App, fm grumble.FlagMap) error { - return nil - }) - App.SetPrintASCIILogo(func(a *grumble.App) { - fmt.Println(strings.Join([]string{` - ______ __ ____ ____ - / ____/ / / __ __ / __ \ / __ ) - / / / / / / / / / / / / / /_/ / - / /_ / / / / / / / / / / / __ | - / __/ / / / /_/ / / / / / / / / / - / / / / \__, / / /_/ / / /_/ / - /_/ /_/ ,__/ / /_____/ /_____/ - /____/ -`}, "\r\n")) - }) - register(App) -} diff --git a/cmd/cli/flydb.go b/cmd/cli/flydb.go deleted file mode 100644 index 0e1552a4..00000000 --- a/cmd/cli/flydb.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -import ( - "github.com/ByteStorage/FlyDB/cmd" - "github.com/desertbit/grumble" -) - -func main() { - grumble.Main(cmd.App) -} diff --git a/cmd/client/app.go b/cmd/client/app.go index 7371227b..8cbaeb9b 100644 --- a/cmd/client/app.go +++ b/cmd/client/app.go @@ -1,39 +1,52 @@ package client -import "github.com/desertbit/grumble" +import ( + "errors" + "fmt" + "github.com/desertbit/grumble" + "github.com/fatih/color" + "os" + "path" + "strings" +) -func Register(app *grumble.App) { - app.AddCommand(&grumble.Command{ - Name: "put", - Help: "put data", - Run: putData, - Args: func(a *grumble.Args) { - a.String("key", "key", grumble.Default("")) - a.String("value", "value", grumble.Default("")) - }, - }) +var addr string - app.AddCommand(&grumble.Command{ - Name: "get", - Help: "get data", - Run: getData, - Args: func(a *grumble.Args) { - a.String("key", "key", grumble.Default("")) - }, - }) +// App FlyDB command app +var App = grumble.New(&grumble.Config{ + Name: "FlyDB Cli", + Description: "A command of FlyDB", + HistoryFile: path.Join(os.TempDir(), ".FlyDB_Cli.history"), + HistoryLimit: 10000, + ErrorColor: color.New(color.FgRed, color.Bold, color.Faint), + HelpHeadlineColor: color.New(color.FgGreen), + HelpHeadlineUnderline: false, + HelpSubCommands: true, + Prompt: "flydb $> ", + PromptColor: color.New(color.FgBlue, color.Bold), + Flags: func(f *grumble.Flags) {}, +}) - app.AddCommand(&grumble.Command{ - Name: "delete", - Help: "delete key", - Run: deleteKey, - Args: func(a *grumble.Args) { - a.String("key", "key", grumble.Default("")) - }, +func init() { + App.OnInit(func(a *grumble.App, fm grumble.FlagMap) error { + if len(os.Args) != 1 { + fmt.Println("usage: flydb-cli [addr]") + return errors.New("usage: flydb-cli [addr]") + } + addr = os.Args[1] + return nil }) - - app.AddCommand(&grumble.Command{ - Name: "keys", - Help: "list keys", - Run: getKeys, + App.SetPrintASCIILogo(func(a *grumble.App) { + fmt.Println(strings.Join([]string{` + ______ __ ____ ____ + / ____/ / / __ __ / __ \ / __ ) + / / / / / / / / / / / / / /_/ / + / /_ / / / / / / / / / / / __ | + / __/ / / / /_/ / / / / / / / / / + / / / / \__, / / /_/ / / /_/ / + /_/ /_/ ,__/ / /_____/ /_____/ + /____/ +`}, "\r\n")) }) + register(App) } diff --git a/cmd/client/cli/flydb-client.go b/cmd/client/cli/flydb-client.go new file mode 100644 index 00000000..3b604b12 --- /dev/null +++ b/cmd/client/cli/flydb-client.go @@ -0,0 +1,11 @@ +package main + +import ( + "github.com/ByteStorage/FlyDB/cmd/client" + "github.com/desertbit/grumble" +) + +func main() { + // start client CLI + grumble.Main(client.App) +} diff --git a/cmd/client/client.go b/cmd/client/client.go deleted file mode 100644 index d8b2e8f8..00000000 --- a/cmd/client/client.go +++ /dev/null @@ -1,6 +0,0 @@ -package client - -// startDbClient starts a db client. -func startDbClient() { - -} diff --git a/cmd/data.go b/cmd/client/data.go similarity index 73% rename from cmd/data.go rename to cmd/client/data.go index 009b5751..b748d2b7 100644 --- a/cmd/data.go +++ b/cmd/client/data.go @@ -1,10 +1,17 @@ -package cmd +package client import ( "fmt" + "github.com/ByteStorage/FlyDB/engine/grpc/client" "github.com/desertbit/grumble" ) +func newClient() *client.Client { + return &client.Client{ + Addr: addr, + } +} + func putData(c *grumble.Context) error { key := c.Args.String("key") value := c.Args.String("value") @@ -12,11 +19,7 @@ func putData(c *grumble.Context) error { fmt.Println("key or value is empty") return nil } - if db == nil { - fmt.Println("start server first") - return nil - } - err := db.Put([]byte(key), []byte(value)) + err := newClient().Put([]byte(key), []byte(value)) if err != nil { fmt.Println("put data error: ", err) return err @@ -31,11 +34,7 @@ func getData(c *grumble.Context) error { fmt.Println("key is empty") return nil } - if db == nil { - fmt.Println("start server first") - return nil - } - value, err := db.Get([]byte(key)) + value, err := newClient().Get([]byte(key)) if err != nil { fmt.Println("get data error: ", err) return err @@ -50,11 +49,7 @@ func deleteKey(c *grumble.Context) error { fmt.Println("key is empty") return nil } - if db == nil { - fmt.Println("start server first") - return nil - } - err := db.Delete([]byte(key)) + err := newClient().Del([]byte(key)) if err != nil { fmt.Println("delete key error: ", err) return err @@ -64,11 +59,11 @@ func deleteKey(c *grumble.Context) error { } func getKeys(c *grumble.Context) error { - if db == nil { - fmt.Println("start server first") - return nil + list, err := newClient().Keys() + if err != nil { + fmt.Println("get keys error: ", err) + return err } - list := db.GetListKeys() fmt.Println("Total keys: ", len(list)) for i, bytes := range list { fmt.Printf(string(bytes[:]) + "\t") diff --git a/cmd/root.go b/cmd/client/root.go similarity index 66% rename from cmd/root.go rename to cmd/client/root.go index 5fa366f0..d3e44d8c 100644 --- a/cmd/root.go +++ b/cmd/client/root.go @@ -1,28 +1,8 @@ -package cmd +package client -import ( - "github.com/desertbit/grumble" -) +import "github.com/desertbit/grumble" func register(app *grumble.App) { - app.AddCommand(&grumble.Command{ - Name: "start", - Help: "start server", - Run: startServer, - }) - - app.AddCommand(&grumble.Command{ - Name: "stop", - Help: "stop server", - Run: stopServer, - }) - - app.AddCommand(&grumble.Command{ - Name: "clean", - Help: "clean server", - Run: cleanServer, - }) - app.AddCommand(&grumble.Command{ Name: "put", Help: "put data", @@ -56,5 +36,4 @@ func register(app *grumble.App) { Help: "list keys", Run: getKeys, }) - } diff --git a/cmd/server.go b/cmd/server.go deleted file mode 100644 index e740c91e..00000000 --- a/cmd/server.go +++ /dev/null @@ -1,33 +0,0 @@ -package cmd - -import ( - "fmt" - "github.com/ByteStorage/FlyDB/config" - "github.com/ByteStorage/FlyDB/engine" - "github.com/ByteStorage/FlyDB/flydb" - "github.com/desertbit/grumble" -) - -var db *engine.DB - -func startServer(c *grumble.Context) error { - if len(c.Args) == 0 { - options := config.DefaultOptions - flyDb, err := flydb.NewFlyDB(options) - if err != nil { - fmt.Println("flydb start error: ", err) - return err - } - db = flyDb - fmt.Println("flydb start success") - } - return nil -} - -func stopServer(c *grumble.Context) error { - panic("implement me") -} - -func cleanServer(c *grumble.Context) error { - panic("implement me") -} diff --git a/cmd/server/cli/flydb-server.go b/cmd/server/cli/flydb-server.go new file mode 100644 index 00000000..ecb9adcb --- /dev/null +++ b/cmd/server/cli/flydb-server.go @@ -0,0 +1,27 @@ +package main + +import ( + "fmt" + "github.com/ByteStorage/FlyDB/cmd/server" + "os" +) + +func main() { + args := os.Args + if len(args) >= 2 { + fmt.Println("Usage: flydb-server [start|clean|stop]") + return + } + if len(args) == 1 { + //start server + server.StartServer() + } + switch args[1] { + case "start": + server.StartServer() + case "stop": + server.StopServer() + case "clean": + server.CleanServer() + } +} diff --git a/cmd/server/server.go b/cmd/server/server.go index a2d1e434..ca4ed328 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -1,6 +1,25 @@ package server -// startDbServer starts a db server. -func startDbServer() { +import ( + "fmt" + "github.com/ByteStorage/FlyDB/config" + "github.com/ByteStorage/FlyDB/flydb" +) +func StartServer() { + options := config.DefaultOptions + _, err := flydb.NewFlyDB(options) + if err != nil { + fmt.Println("flydb start error: ", err) + return + } + fmt.Println("flydb start success") +} + +func StopServer() { + panic("implement me") +} + +func CleanServer() { + panic("implement me") }