func meteringConfig()

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
}