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 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 }
func DiskIOCounters() (map[string]DiskIOCountersStat, error) { ret := make(map[string]DiskIOCountersStat, 0) var dst []Win32_PerfFormattedData err := wmi.Query("SELECT * FROM Win32_PerfFormattedData_PerfDisk_LogicalDisk ", &dst) if err != nil { return ret, err } for _, d := range dst { if len(d.Name) > 3 { // not get _Total or Harddrive continue } ret[d.Name] = DiskIOCountersStat{ Name: d.Name, ReadCount: uint64(d.AvgDiskReadQueueLength), WriteCount: d.AvgDiskWriteQueueLength, ReadBytes: uint64(d.AvgDiskBytesPerRead), WriteBytes: uint64(d.AvgDiskBytesPerWrite), ReadTime: d.AvgDisksecPerRead, WriteTime: d.AvgDisksecPerWrite, } } return ret, nil }