in internal/guestcollector/guestcollector_win.go [204:249]
func (c *WindowsCollector) CollectGuestRules(ctx context.Context, timeout time.Duration) internal.Details {
details := internal.Details{
Name: "OS",
}
fields := map[string]string{}
for rule, exe := range c.guestRuleWMIMap {
func() {
ctxWithTimeout, cancel := context.WithTimeout(ctx, timeout)
defer cancel()
ch := make(chan bool, 1)
go func() {
connArgs := wmiConnectionArgs{
host: c.host,
username: c.username,
password: c.password,
}
connArgs.namespace = exe.namespace
connArgs.query = exe.query
res, err := exe.runWMIQuery(connArgs)
if err != nil {
log.Logger.Error(err)
c.usageMetricLogger.Error(agentstatus.WMIQueryExecutionError)
if exe.isRule {
fields[rule] = "unknown"
}
ch <- false
return
}
if exe.isRule {
fields[rule] = res
}
ch <- true
}()
select {
case <-ctxWithTimeout.Done():
log.Logger.Errorf("Running windows guest rule %s timeout", rule)
c.usageMetricLogger.Error(agentstatus.WinGuestCollectionTimeout)
case <-ch:
}
}()
}
details.Fields = append(details.Fields, fields)
c.logicalDiskMediaType(&details)
return details
}