code: func (s *Collector) getSystemCPUUsage() (uint64, error) {
  	f, err := os.Open("/proc/stat")
  	if err != nil {
  		return 0, err
  	}
  	defer func() {
  		s.bufReader.Reset(nil)
  		f.Close()
  	}()
  	s.bufReader.Reset(f)
  
  	for {
  		line, err := s.bufReader.ReadString('\n')
  		if err != nil {
  			break
  		}
  		parts := strings.Fields(line)
  		switch parts[0] {
  		case "cpu":
  			if len(parts) < 8 {
  				return 0, fmt.Errorf("invalid number of cpu fields")
  			}
  			var totalClockTicks uint64
  			for _, i := range parts[1:8] {
  				v, err := strconv.ParseUint(i, 10, 64)
  				if err != nil {
  					return 0, fmt.Errorf("Unable to convert value %s to int: %s", i, err)
  				}
  				totalClockTicks += v
  			}
  			return (totalClockTicks * nanoSecondsPerSecond) /
  				s.clockTicksPerSecond, nil
  		}
  	}
  	return 0, fmt.Errorf("invalid stat format. Error trying to parse the '/proc/stat' file")
  }
docs: // getSystemCPUUsage returns the host system's cpu usage in
  // nanoseconds. An error is returned if the format of the underlying
  // file does not match.
  //
  // Uses /proc/stat defined by POSIX. Looks for the cpu
  // statistics line and then sums up the first seven fields
  // provided. See `man 5 proc` for details on specific field
  // information.