X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fcli%2Fget.go;h=de4f80c823df1f4b53ed90a8c24733fe1cc1697a;hb=09f04dae6b7602251d68ea37c8664cdc0bb61019;hp=5577663e88079e8a0f4cf70d2f9ca534de3eaaa0;hpb=b1cc9affa891649332fb034f648e44514624a956;p=ric-plt%2Fsdlgo.git diff --git a/internal/cli/get.go b/internal/cli/get.go index 5577663..de4f80c 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,60 @@ func init() { var ( getLong = `Display one or many resources. -Prints important information about the specified resources.` +Prints keys and keys data in the given namespace.` + + getExample = ` # Get reads keys data in the given namespace. + sdlcli get sdlns key1 + + # Get reads multiple keys data in the given namespace. + sdlcli get sdlns key1 key2 key3 - getExample = ` # List keys in the given namespace. + # List keys in the given namespace. sdlcli get keys sdlns` ) -func newGetCmd() *cobra.Command { +func newGetCmd(sdlCb SyncStorageCreateCb) *cobra.Command { return &cobra.Command{ - Use: "get", + 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 + }, + } +} + +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") + } } }