Skip to content

Commit

Permalink
feat(redis): add autocompletion for setting name (#3707)
Browse files Browse the repository at this point in the history
  • Loading branch information
jremy42 authored Mar 13, 2024
1 parent 9ee1caf commit 45e774f
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/namespaces/redis/v1/custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ 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)
cmds.MustFind("redis", "cluster", "migrate").Override(redisClusterMigrateBuilder)

return cmds
Expand Down
46 changes: 46 additions & 0 deletions internal/namespaces/redis/v1/custom_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,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 @@ -211,6 +216,47 @@ 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
}

var completeRedisNoteTypeCache *redis.ListNodeTypesResponse

func autoCompleteNodeType(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
Expand Down

0 comments on commit 45e774f

Please sign in to comment.