func()

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
	}
}