70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
|
|
//go:build darwin
|
||
|
|
// +build darwin
|
||
|
|
|
||
|
|
package staros
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os/user"
|
||
|
|
"strconv"
|
||
|
|
"syscall"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
// StartTime is not implemented on Darwin yet.
|
||
|
|
func StartTime() time.Time {
|
||
|
|
return time.Time{}
|
||
|
|
}
|
||
|
|
|
||
|
|
// IsRoot 当前是否是管理员用户
|
||
|
|
func IsRoot() bool {
|
||
|
|
uid, err := user.Current()
|
||
|
|
return err == nil && uid.Uid == "0"
|
||
|
|
}
|
||
|
|
|
||
|
|
func Whoami() (uid, gid int, uname, gname, home string, err error) {
|
||
|
|
var me *user.User
|
||
|
|
var group *user.Group
|
||
|
|
me, err = user.Current()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
uid, _ = strconv.Atoi(me.Uid)
|
||
|
|
gid, _ = strconv.Atoi(me.Gid)
|
||
|
|
home = me.HomeDir
|
||
|
|
uname = me.Username
|
||
|
|
group, err = user.LookupGroupId(me.Gid)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
gname = group.Name
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func CpuUsageByPid(pid int, sleep time.Duration) float64 {
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
func CpuUsage(sleep time.Duration) float64 {
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
func DiskUsage(path string) (disk DiskStatus) {
|
||
|
|
disk, _ = DiskUsageE(path)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func DiskUsageE(path string) (disk DiskStatus, err error) {
|
||
|
|
if path == "" {
|
||
|
|
path = "."
|
||
|
|
}
|
||
|
|
fs := syscall.Statfs_t{}
|
||
|
|
if err = syscall.Statfs(path, &fs); err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
disk.All = fs.Blocks * uint64(fs.Bsize)
|
||
|
|
disk.Free = fs.Bfree * uint64(fs.Bsize)
|
||
|
|
disk.Available = fs.Bavail * uint64(fs.Bsize)
|
||
|
|
disk.Used = disk.All - disk.Free
|
||
|
|
return
|
||
|
|
}
|