flag.Usage = base.Usage
flag.Parse()
+ telemetry.Inc("go/invocations")
telemetry.CountFlags("go/flag:", *flag.CommandLine)
args := flag.Args()
} else {
base.SetFromGOFLAGS(&cmd.Flag)
cmd.Flag.Parse(args[1:])
- prefix := "go/flag:" + strings.ReplaceAll(cfg.CmdName, " ", "-") + "-"
- cmd.Flag.Visit(func(f *flag.Flag) {
- counterName := prefix + f.Name
- if f.Name == "buildmode" { // Special case: there is a limited set of buildmode values
- counterName += "-" + f.Value.String()
- }
- telemetry.Inc(counterName)
- })
+ flagCounterPrefix := "go/" + strings.ReplaceAll(cfg.CmdName, " ", "-") + "/flag"
+ telemetry.CountFlags(flagCounterPrefix+":", cmd.Flag)
+ telemetry.CountFlagValue(flagCounterPrefix+"/", cmd.Flag, "buildmode")
args = cmd.Flag.Args()
}
func CountFlags(prefix string, flagSet flag.FlagSet) {
counter.CountFlags(prefix, flagSet)
}
+
+// CountFlagValue creates a counter for the flag value
+// if it is set and increments the counter. The name of the
+// counter is the concatenation of prefix, the flagName, ":",
+// and value.String() for the flag's value.
+func CountFlagValue(prefix string, flagSet flag.FlagSet, flagName string) {
+ // TODO(matloob): Maybe pass in a list of flagNames if we end up counting
+ // values for more than one?
+ // TODO(matloob): Add this to x/telemetry?
+ flagSet.Visit(func(f *flag.Flag) {
+ if f.Name == flagName {
+ counter.New(prefix + f.Name + ":" + f.Value.String()).Inc()
+ }
+ })
+}
func (dc dummyCounter) Inc() {}
-func Start() {}
-func StartWithUpload() {}
-func Inc(name string) {}
-func NewCounter(name string) dummyCounter { return dummyCounter{} }
-func NewStackCounter(name string, depth int) dummyCounter { return dummyCounter{} }
-func CountFlags(name string, flagSet flag.FlagSet) {}
+func Start() {}
+func StartWithUpload() {}
+func Inc(name string) {}
+func NewCounter(name string) dummyCounter { return dummyCounter{} }
+func NewStackCounter(name string, depth int) dummyCounter { return dummyCounter{} }
+func CountFlags(name string, flagSet flag.FlagSet) {}
+func CountFlagValue(prefix string, flagSet flag.FlagSet, flagName string) {}