56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
// +build !linux
|
|
// Use and distribution licensed under the Apache license version 2.
|
|
//
|
|
// See the COPYING file in the root project directory for full text.
|
|
//
|
|
|
|
package ghw
|
|
|
|
import (
|
|
"github.com/StackExchange/wmi"
|
|
)
|
|
|
|
const wmqlProcessor = "SELECT Manufacturer, Name, NumberOfLogicalProcessors, NumberOfCores FROM Win32_Processor"
|
|
|
|
type win32Processor struct {
|
|
Manufacturer *string
|
|
Name *string
|
|
NumberOfLogicalProcessors uint32
|
|
NumberOfCores uint32
|
|
}
|
|
|
|
func (ctx *context) cpuFillInfo(info *CPUInfo) error {
|
|
// Getting info from WMI
|
|
var win32descriptions []win32Processor
|
|
if err := wmi.Query(wmqlProcessor, &win32descriptions); err != nil {
|
|
return err
|
|
}
|
|
// Converting into standard structures
|
|
info.Processors = ctx.processorsGet(win32descriptions)
|
|
var totCores uint32
|
|
var totThreads uint32
|
|
for _, p := range info.Processors {
|
|
totCores += p.NumCores
|
|
totThreads += p.NumThreads
|
|
}
|
|
info.TotalCores = totCores
|
|
info.TotalThreads = totThreads
|
|
return nil
|
|
}
|
|
|
|
func (ctx *context) processorsGet(win32descriptions []win32Processor) []*Processor {
|
|
var procs []*Processor
|
|
// Converting into standard structures
|
|
for index, description := range win32descriptions {
|
|
p := &Processor{
|
|
Id: index, // TODO: how to get a decent "Physical ID" to use ?
|
|
Model: *description.Name,
|
|
Vendor: *description.Manufacturer,
|
|
NumCores: description.NumberOfCores,
|
|
NumThreads: description.NumberOfLogicalProcessors,
|
|
}
|
|
procs = append(procs, p)
|
|
}
|
|
return procs
|
|
}
|