vendorify
diff --git a/go/vendor/github.com/shirou/gopsutil/load/load_darwin.go b/go/vendor/github.com/shirou/gopsutil/load/load_darwin.go
new file mode 100644
index 0000000..cd7b74d
--- /dev/null
+++ b/go/vendor/github.com/shirou/gopsutil/load/load_darwin.go
@@ -0,0 +1,76 @@
+// +build darwin
+
+package load
+
+import (
+ "context"
+ "os/exec"
+ "strconv"
+ "strings"
+
+ "github.com/shirou/gopsutil/internal/common"
+)
+
+func Avg() (*AvgStat, error) {
+ return AvgWithContext(context.Background())
+}
+
+func AvgWithContext(ctx context.Context) (*AvgStat, error) {
+ values, err := common.DoSysctrlWithContext(ctx, "vm.loadavg")
+ if err != nil {
+ return nil, err
+ }
+
+ 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: float64(load1),
+ Load5: float64(load5),
+ Load15: float64(load15),
+ }
+
+ return ret, nil
+}
+
+// Misc returnes miscellaneous host-wide statistics.
+// darwin use ps command to get process running/blocked count.
+// Almost same as FreeBSD implementation, but state is different.
+// U means 'Uninterruptible Sleep'.
+func Misc() (*MiscStat, error) {
+ return MiscWithContext(context.Background())
+}
+
+func MiscWithContext(ctx context.Context) (*MiscStat, error) {
+ bin, err := exec.LookPath("ps")
+ if err != nil {
+ return nil, err
+ }
+ out, err := invoke.CommandWithContext(ctx, bin, "axo", "state")
+ if err != nil {
+ return nil, err
+ }
+ lines := strings.Split(string(out), "\n")
+
+ ret := MiscStat{}
+ for _, l := range lines {
+ if strings.Contains(l, "R") {
+ ret.ProcsRunning++
+ } else if strings.Contains(l, "U") {
+ // uninterruptible sleep == blocked
+ ret.ProcsBlocked++
+ }
+ }
+
+ return &ret, nil
+}