[load][solaris] implement AvgWithContext

pull/1224/head
Ville Skyttä 3 years ago
parent a3ae4bc40d
commit d92d114f90

@ -130,7 +130,7 @@ will provide useful information.
- CacheSize
- Flags (ex: "fpu vme de pse tsc msr pae mce cx8 ...")
- Microcode
- load/LoadAvg() (linux, freebsd)
- load/Avg() (linux, freebsd, solaris)
- Load1
- Load5
- Load15

@ -4,11 +4,12 @@
package load
import (
"bufio"
"bytes"
"context"
"os/exec"
"strconv"
"strings"
"github.com/shirou/gopsutil/v3/internal/common"
)
func Avg() (*AvgStat, error) {
@ -16,7 +17,45 @@ func Avg() (*AvgStat, error) {
}
func AvgWithContext(ctx context.Context) (*AvgStat, error) {
return nil, common.ErrNotImplementedError
kstat, err := exec.LookPath("kstat")
if err != nil {
return nil, err
}
out, err := invoke.CommandWithContext(ctx, kstat, "-p", "unix:0:system_misc:avenrun_*")
if err != nil {
return nil, err
}
avg := &AvgStat{}
scanner := bufio.NewScanner(bytes.NewReader(out))
for scanner.Scan() {
flds := strings.Fields(scanner.Text())
if len(flds) < 2 {
continue
}
var tgt *float64
switch {
case strings.HasSuffix(flds[0], ":avenrun_1min"):
tgt = &avg.Load1
case strings.HasSuffix(flds[0], ":avenrun_5min"):
tgt = &avg.Load5
case strings.HasSuffix(flds[0], ":avenrun_15min"):
tgt = &avg.Load15
default:
continue
}
v, err := strconv.ParseInt(flds[1], 10, 64)
if err != nil {
return nil, err
}
*tgt = float64(v) / (1 << 8)
}
if err = scanner.Err(); err != nil {
return nil, err
}
return avg, nil
}
func Misc() (*MiscStat, error) {

Loading…
Cancel
Save