in internal/guestcollector/guestcollector_win.go [62:179]
func NewWindowsCollector(host, username, password any, usageMetricLogger agentstatus.AgentStatus) *WindowsCollector {
c := WindowsCollector{
host: host,
username: username,
password: password,
guestRuleWMIMap: map[string]wmiExecutor{},
logicalToPhysicalDiskMap: map[string]string{},
physicalDiskToTypeMap: map[string]string{},
usageMetricLogger: usageMetricLogger,
}
c.guestRuleWMIMap[internal.PowerProfileSettingRule] = wmiExecutor{
namespace: `root\cimv2\power`,
query: `SELECT elementname FROM win32_powerplan WHERE isactive = true`,
isRule: true,
runWMIQuery: func(connArgs wmiConnectionArgs) (string, error) {
var result []struct {
ElementName string
}
// https://learn.microsoft.com/en-us/windows/win32/wmisdk/swbemlocator-connectserver
if err := wmi.Query(connArgs.query, &result, connArgs.host, connArgs.namespace, connArgs.username, connArgs.password); err != nil {
return "", err
}
return result[0].ElementName, nil
},
}
c.guestRuleWMIMap[internal.LogicalDiskToPartition] = wmiExecutor{
namespace: `root\cimv2`,
query: `SELECT antecedent, dependent FROM win32_logicaldisktopartition`,
runWMIQuery: func(connArgs wmiConnectionArgs) (string, error) {
var result []struct {
Antecedent string
Dependent string
}
if err := wmi.Query(connArgs.query, &result, connArgs.host, connArgs.namespace, connArgs.username, connArgs.password); err != nil {
return "", err
}
// example output:
// Antecedent: \\[HOSTNAME]\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #1"
// Dependent: \\[HOSTNAME]\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
for _, v := range result {
if re := regexp.MustCompile(`\.*\\root\\cimv2:Win32_DiskPartition\.DeviceID=\"Disk #(.*), Partition #.*\"`); re.MatchString(v.Antecedent) {
disk := re.FindStringSubmatch(v.Antecedent)[1]
if re = regexp.MustCompile(`\.*\\root\\cimv2:Win32_LogicalDisk\.DeviceID=\"(.*)\"`); re.MatchString(v.Dependent) {
logicalDisk := re.FindStringSubmatch(v.Dependent)[1]
c.logicalToPhysicalDiskMap[logicalDisk] = disk
}
}
}
return "", nil
},
}
c.guestRuleWMIMap[internal.PhysicalDiskToType] = wmiExecutor{
namespace: `root\microsoft\windows\storage`,
query: `SELECT deviceid, friendlyname, size, mediatype FROM msft_physicaldisk`,
runWMIQuery: func(connArgs wmiConnectionArgs) (string, error) {
var result []struct {
DeviceID string
FriendlyName string
Size int64
MediaType int16
}
if err := wmi.Query(connArgs.query, &result, connArgs.host, connArgs.namespace, connArgs.username, connArgs.password); err != nil {
return "", err
}
for _, v := range result {
c.physicalDiskToTypeMap[v.DeviceID] = FriendlyNameToDiskType(v.FriendlyName, v.Size, v.MediaType)
}
return "", nil
},
}
c.guestRuleWMIMap[internal.DataDiskAllocationUnitsRule] = wmiExecutor{
namespace: `root\cimv2`,
isRule: true,
query: `SELECT caption, blocksize FROM win32_volume`,
runWMIQuery: func(connArgs wmiConnectionArgs) (string, error) {
var result []struct {
BlockSize int64
Caption string
}
if err := wmi.Query(connArgs.query, &result, connArgs.host, connArgs.namespace, connArgs.username, connArgs.password); err != nil {
return "", err
}
re := regexp.MustCompile(`.*Volume{.*}.*`)
var r []struct {
BlockSize int64
Caption string
}
for _, v := range result {
if !re.MatchString(v.Caption) {
r = append(r, v)
}
}
res, err := json.Marshal(r)
if err != nil {
return "", err
}
return string(res), nil
},
}
c.guestRuleWMIMap[internal.GCBDRAgentRunning] = wmiExecutor{
namespace: `root\cimv2`,
isRule: true,
query: `SELECT caption FROM Win32_Process WHERE Name="udsagent.exe"`,
runWMIQuery: func(connArgs wmiConnectionArgs) (string, error) {
var result []struct {
Caption string
}
if err := wmi.Query(connArgs.query, &result, connArgs.host, connArgs.namespace, connArgs.username, connArgs.password); err != nil {
return "", err
}
if len(result) == 0 {
return "false", nil
}
return "true", nil
},
}
return &c
}