func CPUInfo() ([]CPUInfoStat, error) { var ret []CPUInfoStat var dst []Win32_Processor q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) if err != nil { return ret, err } var procID string for i, l := range dst { procID = "" if l.ProcessorId != nil { procID = *l.ProcessorId } cpu := CPUInfoStat{ CPU: int32(i), Family: fmt.Sprintf("%d", l.Family), VendorID: l.Manufacturer, ModelName: l.Name, Cores: int32(l.NumberOfLogicalProcessors), PhysicalID: procID, Mhz: float64(l.MaxClockSpeed), Flags: []string{}, } ret = append(ret, cpu) } return ret, nil }
func GetOSInfo() (Win32_OperatingSystem, error) { var dst []Win32_OperatingSystem q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) if err != nil { return Win32_OperatingSystem{}, err } osInfo = &dst[0] return dst[0], nil }
func GetWin32Proc(pid int32) ([]Win32_Process, error) { var dst []Win32_Process query := fmt.Sprintf("WHERE ProcessId = %d", pid) q := wmi.CreateQuery(&dst, query) err := wmi.Query(q, &dst) if err != nil { return []Win32_Process{}, fmt.Errorf("could not get win32Proc: %s", err) } if len(dst) != 1 { return []Win32_Process{}, fmt.Errorf("could not get win32Proc: empty") } return dst, nil }
func CPUPercent(interval time.Duration, percpu bool) ([]float64, error) { var ret []float64 var dst []Win32_Processor q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) if err != nil { return ret, err } for _, l := range dst { // use range but windows can only get one percent. if l.LoadPercentage == nil { continue } ret = append(ret, float64(*l.LoadPercentage)) } return ret, nil }
// Get processes func processes() ([]*Process, error) { var dst []Win32_Process q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) if err != nil { return []*Process{}, err } if len(dst) == 0 { return []*Process{}, fmt.Errorf("could not get Process") } results := make([]*Process, 0, len(dst)) for _, proc := range dst { p, err := NewProcess(int32(proc.ProcessId)) if err != nil { continue } results = append(results, p) } return results, nil }