in cmd/hub/metrics/meter.go [129:187]
func meteringConfig() (bool, string, error) {
var cache *filecache.FileCache
conf := cachedConfig
if conf == nil {
file, cache2, err := filecache.ReadCache(os.O_RDONLY)
cache = cache2
if err != nil {
return false, "", err
}
if file != nil {
file.Close()
}
if cache != nil {
conf = &cache.Metrics
}
}
// metrics disabled
if conf != nil && conf.Disabled {
cachedConfig = conf
return !conf.Disabled, "", nil
}
if conf == nil {
conf = &filecache.Metrics{}
}
// generate and save host uuid if interactive session
var writeErr error
if conf.Host == nil && (config.Tty && !config.TtyForced) {
u, err := uuid.NewRandom()
if err != nil {
util.Warn("Unable to generate host random v4 UUID: %v", err)
}
uuidStr := u.String()
conf.Host = &uuidStr
file, cache, err := filecache.ReadCache(os.O_RDWR | os.O_CREATE)
if err != nil {
return !conf.Disabled, "", err
}
if file == nil {
return !conf.Disabled, "", errors.New("No cache file created")
}
defer file.Close()
_, err = file.Seek(0, io.SeekStart)
if err != nil {
return !conf.Disabled, "", err
}
if cache == nil {
cache = &filecache.FileCache{}
}
cache.Metrics = *conf
writeErr = filecache.WriteCache(file, cache)
}
cachedConfig = conf
host := ""
if conf.Host != nil {
host = *conf.Host
}
return !conf.Disabled, host, writeErr
}