| // Copyright 2024 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build !cmd_go_bootstrap && !compiler_bootstrap |
| |
| package counter |
| |
| import ( |
| "flag" |
| "os" |
| |
| "golang.org/x/telemetry/counter" |
| ) |
| |
| var openCalled bool |
| |
| func OpenCalled() bool { return openCalled } |
| |
| // Open opens the counter files for writing if telemetry is supported |
| // on the current platform (and does nothing otherwise). |
| func Open() { |
| openCalled = true |
| counter.OpenDir(os.Getenv("TEST_TELEMETRY_DIR")) |
| } |
| |
| // Inc increments the counter with the given name. |
| func Inc(name string) { |
| counter.Inc(name) |
| } |
| |
| // New returns a counter with the given name. |
| func New(name string) *counter.Counter { |
| return counter.New(name) |
| } |
| |
| // NewStack returns a new stack counter with the given name and depth. |
| func NewStack(name string, depth int) *counter.StackCounter { |
| return counter.NewStack(name, depth) |
| } |
| |
| // CountFlags creates a counter for every flag that is set |
| // and increments the counter. The name of the counter is |
| // the concatenation of prefix and the flag name. |
| 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() |
| } |
| }) |
| } |