63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
|
// 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()
|
||
|
}
|
||
|
})
|
||
|
}
|