func()

in prometheus-to-sd/translator/translator.go [79:107]


func (t *TimeSeriesBuilder) Build(ctx context.Context) ([]*v3.TimeSeries, time.Time, error) {
	var ts []*v3.TimeSeries
	if t.batch == nil {
		return ts, time.Now(), nil
	}
	defer func() { t.batch = nil }()
	metricFamilies, err := t.batch.metrics.Build(ctx, t.config, t.cache)
	if err != nil {
		return ts, time.Now(), err
	}
	// Get start time before whitelisting, because process start time
	// metric is likely not to be whitelisted.
	startTime := t.getStartTime(metricFamilies)
	metricFamilies = filterWhitelistedMetrics(metricFamilies, t.config.SourceConfig.Whitelisted)
	metricFamilies = filterWhitelistedLabels(metricFamilies, t.config.SourceConfig.WhitelistedLabelsMap)

	for name, metric := range metricFamilies {
		if t.cache.IsMetricBroken(name) {
			continue
		}
		f, err := translateFamily(t.config, metric, t.batch.timestamp, startTime, t.cache)
		if err != nil {
			glog.Warningf("Error while processing metric %s: %v", name, err)
		} else {
			ts = append(ts, f...)
		}
	}
	return ts, t.batch.timestamp, nil
}