Skip to content

Commit

Permalink
Add and use VerbosityLevel type
Browse files Browse the repository at this point in the history
Signed-off-by: Matt Lord <mattalord@gmail.com>
  • Loading branch information
mattlord committed Feb 15, 2025
1 parent fbffb28 commit 3ea89c2
Show file tree
Hide file tree
Showing 12 changed files with 860 additions and 692 deletions.
45 changes: 45 additions & 0 deletions go/cmd/vtctldclient/cli/pflag.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,17 @@ limitations under the License.
package cli

import (
"fmt"
"slices"
"strings"

"github.com/spf13/pflag"
"golang.org/x/exp/maps"

"vitess.io/vitess/go/vt/topo/topoproto"

topodatapb "vitess.io/vitess/go/vt/proto/topodata"
vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)

// KeyspaceTypeFlag adds the pflag.Value interface to a topodatapb.KeyspaceType.
Expand Down Expand Up @@ -50,3 +56,42 @@ func (v *KeyspaceTypeFlag) String() string {
func (v *KeyspaceTypeFlag) Type() string {
return "cli.KeyspaceTypeFlag"
}

// VerbosityLevelFlag implements the pflag.Value interface, for parsing a command-line value
// into a vtctldatapb.VerbosityLevel.
type VerbosityLevelFlag vtctldatapb.VerbosityLevel

// String is part of the pflag.Value interfaces.
func (vlf *VerbosityLevelFlag) String() string {
return vtctldatapb.VerbosityLevel(*vlf).String()
}

// ParseVerbosityLevel parses the string value into the enum type.
func ParseVerbosityLevel(param string) (vtctldatapb.VerbosityLevel, error) {
value, ok := vtctldatapb.VerbosityLevel_value[strings.ToUpper(param)]
if !ok {
return vtctldatapb.VerbosityLevel(-1), fmt.Errorf("unknown VerbosityLevel %v, valid values are %s",
param, strings.Join(GetVerbosityLevelFlagOptions(), ", "))
}
return vtctldatapb.VerbosityLevel(value), nil
}

func GetVerbosityLevelFlagOptions() []string {
enumVals := maps.Values(vtctldatapb.VerbosityLevel_value)
slices.Sort(enumVals)
strVals := make([]string, len(enumVals))
for i, v := range enumVals {
strVals[i] = vtctldatapb.VerbosityLevel(v).String()
}
return strVals
}

// Set is part of the pflag.Value interfaces.
func (vlf *VerbosityLevelFlag) Set(v string) error {
t, err := ParseVerbosityLevel(v)
*vlf = VerbosityLevelFlag(t)
return err
}

// Type is part of the pflag.Value interface.
func (*VerbosityLevelFlag) Type() string { return "vtctldatapb.VerbosityLevel" }
22 changes: 11 additions & 11 deletions go/cmd/vtctldclient/command/vreplication/common/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ import (
)

var ShowOptions = struct {
IncludeLogs bool
Shards []string
VerbosityLevel uint32
IncludeLogs bool
Shards []string
Verbosity vtctldatapb.VerbosityLevel
}{}

func GetShowCommand(opts *SubCommandsOpts) *cobra.Command {
Expand All @@ -43,27 +43,27 @@ func GetShowCommand(opts *SubCommandsOpts) *cobra.Command {
RunE: commandShow,
}
cmd.Flags().BoolVar(&ShowOptions.IncludeLogs, "include-logs", true, "Include recent logs for the workflow.")
cmd.Flags().Uint32Var(&ShowOptions.VerbosityLevel, "verbosity-level", 0, "How much detail to include in the results.")
cmd.Flags().Var((*cli.VerbosityLevelFlag)(&ShowOptions.Verbosity), "verbosity-level", "How much detail to include in the results.")
return cmd
}

func commandShow(cmd *cobra.Command, args []string) error {
cli.FinishedParsing(cmd)

req := &vtctldatapb.GetWorkflowsRequest{
Keyspace: BaseOptions.TargetKeyspace,
Workflow: BaseOptions.Workflow,
IncludeLogs: ShowOptions.IncludeLogs,
Shards: ShowOptions.Shards,
VerbosityLevel: ShowOptions.VerbosityLevel,
Keyspace: BaseOptions.TargetKeyspace,
Workflow: BaseOptions.Workflow,
IncludeLogs: ShowOptions.IncludeLogs,
Shards: ShowOptions.Shards,
Verbosity: ShowOptions.Verbosity,
}
resp, err := GetClient().GetWorkflows(GetCommandCtx(), req)
if err != nil {
return err
}

// We always use compact format with SHOW to reduce the overall
// size and noise.
// We always omit empty/zero value fields with SHOW to reduce the
// overall size and noise.
cli.DefaultMarshalOptions.EmitUnpopulated = false
data, err := cli.MarshalJSONPretty(resp)
if err != nil {
Expand Down
11 changes: 6 additions & 5 deletions go/cmd/vtctldclient/command/vreplication/workflow/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ import (

var (
getWorkflowsOptions = struct {
ShowAll bool
ShowAll bool
Verbosity vtctldatapb.VerbosityLevel
}{}
// GetWorkflows makes a GetWorkflows gRPC call to a vtctld.
getWorkflows = &cobra.Command{
Expand All @@ -47,10 +48,10 @@ func commandGetWorkflows(cmd *cobra.Command, args []string) error {
ks := cmd.Flags().Arg(0)

resp, err := common.GetClient().GetWorkflows(common.GetCommandCtx(), &vtctldatapb.GetWorkflowsRequest{
Keyspace: ks,
ActiveOnly: !getWorkflowsOptions.ShowAll,
IncludeLogs: workflowShowOptions.IncludeLogs,
VerbosityLevel: workflowShowOptions.VerbosityLevel,
Keyspace: ks,
ActiveOnly: !getWorkflowsOptions.ShowAll,
IncludeLogs: workflowShowOptions.IncludeLogs,
Verbosity: workflowShowOptions.Verbosity,
})

if err != nil {
Expand Down
10 changes: 5 additions & 5 deletions go/cmd/vtctldclient/command/vreplication/workflow/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ func commandShow(cmd *cobra.Command, args []string) error {
cli.FinishedParsing(cmd)

req := &vtctldatapb.GetWorkflowsRequest{
Keyspace: baseOptions.Keyspace,
Workflow: baseOptions.Workflow,
IncludeLogs: workflowShowOptions.IncludeLogs,
Shards: baseOptions.Shards,
VerbosityLevel: workflowShowOptions.VerbosityLevel,
Keyspace: baseOptions.Keyspace,
Workflow: baseOptions.Workflow,
IncludeLogs: workflowShowOptions.IncludeLogs,
Shards: baseOptions.Shards,
Verbosity: workflowShowOptions.Verbosity,
}
resp, err := common.GetClient().GetWorkflows(common.GetCommandCtx(), req)
if err != nil {
Expand Down
11 changes: 7 additions & 4 deletions go/cmd/vtctldclient/command/vreplication/workflow/workflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ package workflow
import (
"github.com/spf13/cobra"

"vitess.io/vitess/go/cmd/vtctldclient/cli"
"vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/common"
"vitess.io/vitess/go/cmd/vtctldclient/command/vreplication/movetables"
"vitess.io/vitess/go/vt/topo/topoproto"

vtctldatapb "vitess.io/vitess/go/vt/proto/vtctldata"
)

var (
Expand All @@ -44,8 +47,8 @@ var (
}{}

workflowShowOptions = struct {
IncludeLogs bool
VerbosityLevel uint32
IncludeLogs bool
Verbosity vtctldatapb.VerbosityLevel
}{}
)

Expand All @@ -56,7 +59,7 @@ func registerCommands(root *cobra.Command) {

getWorkflows.Flags().BoolVar(&workflowShowOptions.IncludeLogs, "include-logs", true, "Include recent logs for the workflows.")
getWorkflows.Flags().BoolVarP(&getWorkflowsOptions.ShowAll, "show-all", "a", false, "Show all workflows instead of just active workflows.")
getWorkflows.Flags().Uint32Var(&workflowShowOptions.VerbosityLevel, "verbosity-level", 0, "How much detail to include in the results.")
getWorkflows.Flags().Var((*cli.VerbosityLevelFlag)(&getWorkflowsOptions.Verbosity), "verbosity-level", "How much detail to include in the results.")
root.AddCommand(getWorkflows) // Yes this is supposed to be root as GetWorkflows is a top-level command.

delete.Flags().StringVarP(&baseOptions.Workflow, "workflow", "w", "", "The workflow you want to delete.")
Expand All @@ -73,7 +76,7 @@ func registerCommands(root *cobra.Command) {
show.Flags().StringVarP(&baseOptions.Workflow, "workflow", "w", "", "The workflow you want the details for.")
show.MarkFlagRequired("workflow")
show.Flags().BoolVar(&workflowShowOptions.IncludeLogs, "include-logs", true, "Include recent logs for the workflow.")
show.Flags().Uint32Var(&workflowShowOptions.VerbosityLevel, "verbosity-level", 0, "How much detail to include in the results.")
show.Flags().Var((*cli.VerbosityLevelFlag)(&workflowShowOptions.Verbosity), "verbosity-level", "How much detail to include in the results.")
common.AddShardSubsetFlag(show, &baseOptions.Shards)
base.AddCommand(show)

Expand Down
Loading

0 comments on commit 3ea89c2

Please sign in to comment.