X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fcli%2Fget.go;h=f56c6a081abadfba85ebe688689867b06308b1c8;hb=7e262d4f4e530aec98903e99b195d9e2d07dbcb0;hp=5577663e88079e8a0f4cf70d2f9ca534de3eaaa0;hpb=273d032db02901dba8deeb692f92ed2366dc6ee5;p=ric-plt%2Fsdlgo.git diff --git a/internal/cli/get.go b/internal/cli/get.go index 5577663..f56c6a0 100644 --- a/internal/cli/get.go +++ b/internal/cli/get.go @@ -23,10 +23,18 @@ package cli import ( + "fmt" + "os" + "sort" + + "gerrit.o-ran-sc.org/r/ric-plt/sdlgo" + "gerrit.o-ran-sc.org/r/ric-plt/sdlgo/internal/sdlgoredis" "github.com/spf13/cobra" ) -var getCmd = newGetCmd() +var getCmd = newGetCmd(func() ISyncStorage { + return sdlgo.NewSyncStorage() +}) func init() { rootCmd.AddCommand(getCmd) @@ -35,17 +43,65 @@ func init() { var ( getLong = `Display one or many resources. -Prints important information about the specified resources.` +Prints namespaces, keys or keys data in the given namespace.` + + getExample = ` # List all the namespaces in database. + sdlcli get namespaces + + # List keys in the given namespace. + sdlcli get keys sdlns - getExample = ` # List keys in the given namespace. - sdlcli get keys sdlns` + # Reads key data in the given namespace. + sdlcli get sdlns key1 + + # Read multiple keys data in the given namespace. + sdlcli get sdlns key1 key2 key3` ) -func newGetCmd() *cobra.Command { - return &cobra.Command{ - Use: "get", +func newGetCmd(sdlCb SyncStorageCreateCb) *cobra.Command { + cmd := &cobra.Command{ + Use: "get [ ... ]", Short: "Display one or many resources", Long: getLong, Example: getExample, + RunE: func(cmd *cobra.Command, args []string) error { + sdlgoredis.SetDbLogger(&buf) + if len(args) < 2 { + return fmt.Errorf("accepts command or arguments, received %d", len(args)) + } + data, err := runGet(sdlCb, args) + if err != nil { + fmt.Fprintf(os.Stderr, "%s", buf.String()) + return err + } + printData(cmd, data) + return nil + }, + } + cmd.SetOut(os.Stdout) + return cmd +} + +func runGet(sdlCb SyncStorageCreateCb, args []string) (map[string]interface{}, error) { + data, err := sdlCb().Get(args[0], args[1:]) + if err != nil { + return nil, err + } + return data, nil +} + +func printData(cmd *cobra.Command, data map[string]interface{}) { + var str string + var sortedKeys []string + for key := range data { + sortedKeys = append(sortedKeys, key) + } + sort.Strings(sortedKeys) + for _, k := range sortedKeys { + value, ok := data[k] + if ok && value != nil { + str = fmt.Sprintf("%s:%s", k, value) + cmd.Printf(str + "\n") + } } }