func()

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
}