diff --git a/probe/host/reporter.go b/probe/host/reporter.go index 96364eb10..e071dbfd7 100644 --- a/probe/host/reporter.go +++ b/probe/host/reporter.go @@ -7,7 +7,6 @@ import ( "runtime" "strconv" "strings" - "syscall" "time" "github.com/weaveworks/scope/probe/tag" @@ -36,7 +35,6 @@ var ( InterfaceAddrs = net.InterfaceAddrs Now = func() string { return time.Now().UTC().Format(time.RFC3339Nano) } ReadFile = ioutil.ReadFile - Uname = syscall.Uname ) type reporter struct { @@ -74,23 +72,10 @@ func getUptime() (time.Duration, error) { return time.Duration(uptime) * time.Second, nil } -func charsToString(ca [65]int8) string { - s := make([]byte, len(ca)) - var lens int - for ; lens < len(ca); lens++ { - if ca[lens] == 0 { - break - } - s[lens] = uint8(ca[lens]) - } - return string(s[0:lens]) -} - func (r *reporter) Report() (report.Report, error) { var ( rep = report.MakeReport() localCIDRs []string - utsname syscall.Utsname ) localNets, err := InterfaceAddrs() @@ -104,12 +89,12 @@ func (r *reporter) Report() (report.Report, error) { } } - if err := Uname(&utsname); err != nil { + uptime, err := getUptime() + if err != nil { return rep, err } - kernel := fmt.Sprintf("%s %s", charsToString(utsname.Release), charsToString(utsname.Version)) - uptime, err := getUptime() + kernel, err := getKernelVersion() if err != nil { return rep, err } diff --git a/probe/host/system_darwin.go b/probe/host/system_darwin.go index 1c365bb77..bf8c90fe1 100644 --- a/probe/host/system_darwin.go +++ b/probe/host/system_darwin.go @@ -8,6 +8,10 @@ import ( var loadRe = regexp.MustCompile(`load average\: ([0-9\.]+), ([0-9\.]+), ([0-9\.]+)`) +func getKernelVersion() (string, error) { + return "", nil +} + func getLoad() string { out, err := exec.Command("w").CombinedOutput() if err != nil { diff --git a/probe/host/system_linux.go b/probe/host/system_linux.go index 5305055c0..1d403d674 100644 --- a/probe/host/system_linux.go +++ b/probe/host/system_linux.go @@ -4,8 +4,32 @@ import ( "fmt" "strconv" "strings" + "syscall" ) +// Uname exported for testing +var Uname = syscall.Uname + +func charsToString(ca [65]int8) string { + s := make([]byte, len(ca)) + var lens int + for ; lens < len(ca); lens++ { + if ca[lens] == 0 { + break + } + s[lens] = uint8(ca[lens]) + } + return string(s[0:lens]) +} + +func getKernelVersion() (string, error) { + var utsname syscall.Utsname + if err := Uname(&utsname); err != nil { + return "", err + } + return fmt.Sprintf("%s %s", charsToString(utsname.Release), charsToString(utsname.Version)), nil +} + func getLoad() string { buf, err := ReadFile(ProcLoad) if err != nil {