contrib/cmd/runkperf/commands/root.go (44 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package commands
import (
"flag"
"fmt"
"os"
"strconv"
"github.com/Azure/kperf/contrib/cmd/runkperf/commands/bench"
"github.com/Azure/kperf/contrib/cmd/runkperf/commands/data"
"github.com/Azure/kperf/contrib/cmd/runkperf/commands/warmup"
"github.com/urfave/cli"
"k8s.io/klog/v2"
)
// App returns kperf application.
func App() *cli.App {
return &cli.App{
Name: "runkperf",
// TODO: add more fields
Commands: []cli.Command{
warmup.Command,
bench.Command,
data.Command,
},
Flags: []cli.Flag{
cli.StringFlag{
Name: "v",
Usage: "log level for V logs",
Value: "0",
},
},
Before: func(cliCtx *cli.Context) error {
return initKlog(cliCtx)
},
}
}
// initKlog initializes klog.
func initKlog(cliCtx *cli.Context) error {
klogFlagset := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
klog.InitFlags(klogFlagset)
vInStr := cliCtx.GlobalString("v")
if vFlag, err := strconv.Atoi(vInStr); err != nil || vFlag < 0 {
return fmt.Errorf("invalid value \"%v\" for flag -v: value must be a non-negative integer", vInStr)
}
if err := klogFlagset.Set("v", vInStr); err != nil {
return fmt.Errorf("failed to set log level: %w", err)
}
return nil
}