in image/resources/knfsd-metrics-agent/internal/mounts/scraper.go [262:303]
func (s *mountScraper) queryInstanceNames(agg nfsStatsAggregator) {
if !s.cfg.QueryProxyInstance.Enabled {
s.logger.Debug("not resolving instance names, QueryProxyInstance is disabled")
return
}
s.logger.Debug("querying instance names")
// TODO: Consider optimising this by running queries in parallel.
// TODO: Exponential backoff (per server) if a query keeps failing.
for key, grp := range agg {
server := grp.server
if s.excludes.servers.Contains(server) {
s.logger.Debug("skipped server, excluded by server", zap.String("server", server))
continue
}
if s.excludes.localPaths.ContainsAny(grp.localPaths) {
s.logger.Debug("skipped server, excluded by local path", zap.String("server", server))
continue
}
instance, err := s.nic.queryInstanceName(server)
if err != nil {
s.logger.Warn("failed to query instance name", zap.String("server", server))
// In case the lookup failed due to a transient error assume the
// instance name has not changed since the last scrape.
grp.instance = s.previousInstanceName(server)
} else if instance == "" {
s.logger.Warn("instance name resolved as empty string", zap.String("server", server))
// Assume this is also due to some kind of transient error.
grp.instance = s.previousInstanceName(server)
} else {
s.logger.Debug("resolved proxy instance", zap.String("server", server), zap.String("instance", instance))
grp.instance = instance
}
agg[key] = grp
}
}