Skip to content

Commit

Permalink
feat(redis) : add autocompletion for setting name
Browse files Browse the repository at this point in the history
  • Loading branch information
jremy42 committed Mar 7, 2024
1 parent fbd498e commit c38f55b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion internal/namespaces/redis/v1/custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ func GetCommands() *core.Commands {
cmds.MustFind("redis", "cluster", "create").Override(clusterCreateBuilder)
cmds.MustFind("redis", "cluster", "delete").Override(clusterDeleteBuilder)
cmds.MustFind("redis", "acl", "add").Override(ACLAddListBuilder)

cmds.MustFind("redis", "setting", "add").Override(redisSettingAddBuilder)
return cmds
}
47 changes: 47 additions & 0 deletions internal/namespaces/redis/v1/custom_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"log"
"net/http"
"reflect"
"strings"
"time"

"github.com/scaleway/scaleway-cli/v2/internal/core"
Expand Down Expand Up @@ -159,6 +160,11 @@ func ACLAddListBuilder(c *core.Command) *core.Command {
return c
}

func redisSettingAddBuilder(c *core.Command) *core.Command {
c.ArgSpecs.GetByName("settings.{index}.name").AutoCompleteFunc = autoCompleteSettingsName
return c
}

func redisEndpointsClusterGetMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string, error) {
type tmp []*redis.Endpoint
redisEndpointsClusterResponse := tmp(i.([]*redis.Endpoint))
Expand Down Expand Up @@ -204,3 +210,44 @@ func redisClusterGetMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string,

return str, nil
}

var completeClusterCache *redis.Cluster

var completeClusterVersionCache *redis.ListClusterVersionsResponse

func autoCompleteSettingsName(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
suggestions := core.AutocompleteSuggestions(nil)
req := request.(*redis.AddClusterSettingsRequest)
client := core.ExtractClient(ctx)
api := redis.NewAPI(client)
if req.ClusterID != "" {
if completeClusterCache == nil {
res, err := api.GetCluster(&redis.GetClusterRequest{
ClusterID: req.ClusterID,
})
if err != nil {
return nil
}
completeClusterCache = res
}
if completeClusterVersionCache == nil {
res, err := api.ListClusterVersions(&redis.ListClusterVersionsRequest{
Zone: completeClusterCache.Zone,
Version: &completeClusterCache.Version,
})
if err != nil {
return nil
}
completeClusterVersionCache = res
}

for _, version := range completeClusterVersionCache.Versions {
for _, settingName := range version.AvailableSettings {
if strings.HasPrefix(settingName.Name, prefix) {
suggestions = append(suggestions, settingName.Name)
}
}
}
}
return suggestions
}

0 comments on commit c38f55b

Please sign in to comment.