type Config … // Start initializes telemetry using the specified configuration. // // Start opens the local telemetry database so that counter increment // operations are durably recorded in the local file system. // // If [Config.Upload] is set, and the user has opted in to telemetry // uploading, this process may attempt to upload approved counters // to telemetry.go.dev. // // If [Config.ReportCrashes] is set, any fatal crash will be // recorded by incrementing a counter named for the stack of the // first running goroutine in the traceback. // // If either of these flags is set, Start re-executes the current // executable as a child process, in a special mode in which it // acts as a telemetry sidecar for the parent process (the application). // In that mode, the call to Start will never return, so Start must // be called immediately within main, even before such things as // inspecting the command line. The application should avoid expensive // steps or external side effects in init functions, as they will // be executed twice (parent and child). // // Start returns a StartResult, which may be awaited via [StartResult.Wait] to // wait for all work done by Start to complete. func Start(config Config) *StartResult { … } // MaybeChild executes the telemetry child logic if the calling program is // the telemetry child process, and does nothing otherwise. It is meant to be // called as the first thing in a program that uses telemetry.Start but cannot // call telemetry.Start immediately when it starts. func MaybeChild(config Config) { … } type StartResult … // Wait waits for the completion of all work initiated by [Start]. func (res *StartResult) Wait() { … } var daemonize … const telemetryChildVar … const telemetryUploadVar … func parent(config Config) *StartResult { … } func startChild(reportCrashes, upload bool, result *StartResult) { … } func child(config Config) { … } func uploaderChild(asof time.Time, uploadURL string) { … } // acquireUploadToken acquires a token permitting the caller to upload. // To limit the frequency of uploads, only one token is issue per // machine per time period. // The boolean indicates whether the token was acquired. func acquireUploadToken() bool { … }