| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // +build linux
- package load
- import (
- "context"
- "io/ioutil"
- "strconv"
- "strings"
- "github.com/shirou/gopsutil/internal/common"
- )
- func Avg() (*AvgStat, error) {
- return AvgWithContext(context.Background())
- }
- func AvgWithContext(ctx context.Context) (*AvgStat, error) {
- filename := common.HostProc("loadavg")
- line, err := ioutil.ReadFile(filename)
- if err != nil {
- return nil, err
- }
- values := strings.Fields(string(line))
- load1, err := strconv.ParseFloat(values[0], 64)
- if err != nil {
- return nil, err
- }
- load5, err := strconv.ParseFloat(values[1], 64)
- if err != nil {
- return nil, err
- }
- load15, err := strconv.ParseFloat(values[2], 64)
- if err != nil {
- return nil, err
- }
- ret := &AvgStat{
- Load1: load1,
- Load5: load5,
- Load15: load15,
- }
- return ret, nil
- }
- // Misc returnes miscellaneous host-wide statistics.
- // Note: the name should be changed near future.
- func Misc() (*MiscStat, error) {
- return MiscWithContext(context.Background())
- }
- func MiscWithContext(ctx context.Context) (*MiscStat, error) {
- filename := common.HostProc("stat")
- out, err := ioutil.ReadFile(filename)
- if err != nil {
- return nil, err
- }
- ret := &MiscStat{}
- lines := strings.Split(string(out), "\n")
- for _, line := range lines {
- fields := strings.Fields(line)
- if len(fields) != 2 {
- continue
- }
- v, err := strconv.ParseInt(fields[1], 10, 64)
- if err != nil {
- continue
- }
- switch fields[0] {
- case "procs_running":
- ret.ProcsRunning = int(v)
- case "procs_blocked":
- ret.ProcsBlocked = int(v)
- case "ctxt":
- ret.Ctxt = int(v)
- default:
- continue
- }
- }
- return ret, nil
- }
|