Skip to content

Commit c1394f5

Browse files
authored
Merge pull request #7 from kopernikus/master
Get updates from @kopernikus' fork
2 parents f7bca21 + b70b7d3 commit c1394f5

File tree

2 files changed

+52
-5
lines changed

2 files changed

+52
-5
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ SHELL = /bin/sh
2424

2525
# Go tool and library path:
2626
GO = `which go`
27-
GOPATH = `pwd`/golibs
27+
GOPATH = `pwd`/golibs:`go env GOPATH`
2828

2929
# Installation directories:
3030
prefix = /usr

osutil_solaris.go

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,66 @@
2424
package main
2525

2626
import (
27+
"errors"
28+
"fmt"
29+
"os/exec"
30+
"strconv"
31+
"strings"
2732
"time"
2833
)
2934

3035
// Returns system uptime as time.Duration.
3136
func getSystemUptime() (uptime time.Duration, err error) {
32-
// XXX
33-
return 0, nil
37+
var (
38+
i int
39+
out []byte
40+
err1 error
41+
err2 error
42+
)
43+
44+
cmd := "kstat"
45+
args := []string{"-p", "unix:0:system_misc:snaptime"}
46+
if out, err1 = exec.Command(cmd, args...).Output(); err1 != nil {
47+
return 0, errors.New("Failed to run 'kstat'")
48+
}
49+
_s := string(out)
50+
parts := strings.Split(_s, "\t")
51+
_p1 := parts[1]
52+
_s = strings.Split(_p1, ".")[0]
53+
//fmt.Printf("Before the dot -> %s\n", _s)
54+
if i, err2 = strconv.Atoi(_s); err2 != nil {
55+
return 0, errors.New("Uptime was not an integer")
56+
}
57+
uptime = time.Duration(i) * time.Second
58+
return uptime, nil
3459
}
3560

3661
// Returns system load averages.
3762
func getSystemLoadaverage() ([3]float32, error) {
38-
// XXX
39-
return [3]float32{0, 0, 0}, nil
63+
var (
64+
out []byte
65+
err error
66+
ret [3]float32
67+
val float64
68+
)
69+
cmd := "uptime"
70+
if out, err = exec.Command(cmd).Output(); err != nil {
71+
return ret, errors.New("failed to run 'uptime'")
72+
}
73+
_s := string(out)
74+
parts := strings.Split(_s, " ")
75+
load := parts[len(parts)-3:]
76+
//fmt.Printf("load parts -> %s\n", load)
77+
for i, e := range load {
78+
e = strings.Replace(e, ",", "", 1)
79+
e = strings.Join(strings.Fields(e), "")
80+
if val, err = strconv.ParseFloat(e, 32); err != nil {
81+
return ret, errors.New(fmt.Sprintf("failed to convert load value '%s'", e))
82+
}
83+
ret[i] = float32(val)
84+
}
85+
return ret, nil
86+
//return [3]float32{0, 0, 0}, nil
4087
}
4188

4289
// Device lookup paths. (This list comes from lib/libzfs/libzfs_import.c)

0 commit comments

Comments
 (0)