func getKernelVersion() (major, minor int, err error) { var u syscall.Utsname if err = syscall.Uname(&u); err != nil { return } // Kernel versions are not always a semver, so we have to do minimal parsing. release := marshal.FromUtsname(u.Release) if n, err := fmt.Sscanf(release, "%d.%d", &major, &minor); err != nil || n != 2 { return 0, 0, fmt.Errorf("Malformed version: %s", release) } return }
"$GITHUB_URI/common/marshal" "$GITHUB_URI/report" ) const kb = 1024 // Uname is swappable for mocking in tests. var Uname = syscall.Uname // GetKernelVersion returns the kernel version as reported by uname. var GetKernelVersion = func() (string, error) { var utsname syscall.Utsname if err := Uname(&utsname); err != nil { return "unknown", err } release := marshal.FromUtsname(utsname.Release) version := marshal.FromUtsname(utsname.Version) return fmt.Sprintf("%s %s", release, version), nil } // GetLoad returns the current load averages as metrics. var GetLoad = func(now time.Time) report.Metrics { buf, err := ioutil.ReadFile("/proc/loadavg") if err != nil { return nil } toks := strings.Fields(string(buf)) if len(toks) < 3 { return nil } one, err := strconv.ParseFloat(toks[0], 64)