in otelcollector/prometheusreceiver/internal/starttimemetricadjuster.go [62:126]
func (stma *startTimeMetricAdjuster) AdjustMetrics(metrics pmetric.Metrics) error {
if removeStartTimeAdjustment.IsEnabled() {
return nil
}
startTime, err := stma.getStartTime(metrics)
if err != nil {
if !useCollectorStartTimeFallbackGate.IsEnabled() {
return err
}
stma.logger.Info("Couldn't get start time for metrics. Using fallback start time.", zap.Error(err), zap.Time("fallback_start_time", approximateCollectorStartTime))
startTime = float64(approximateCollectorStartTime.Unix())
}
startTimeTs := timestampFromFloat64(startTime)
for i := 0; i < metrics.ResourceMetrics().Len(); i++ {
rm := metrics.ResourceMetrics().At(i)
for j := 0; j < rm.ScopeMetrics().Len(); j++ {
ilm := rm.ScopeMetrics().At(j)
for k := 0; k < ilm.Metrics().Len(); k++ {
metric := ilm.Metrics().At(k)
switch metric.Type() {
case pmetric.MetricTypeGauge:
continue
case pmetric.MetricTypeSum:
dataPoints := metric.Sum().DataPoints()
for l := 0; l < dataPoints.Len(); l++ {
dp := dataPoints.At(l)
dp.SetStartTimestamp(startTimeTs)
}
case pmetric.MetricTypeSummary:
dataPoints := metric.Summary().DataPoints()
for l := 0; l < dataPoints.Len(); l++ {
dp := dataPoints.At(l)
dp.SetStartTimestamp(startTimeTs)
}
case pmetric.MetricTypeHistogram:
dataPoints := metric.Histogram().DataPoints()
for l := 0; l < dataPoints.Len(); l++ {
dp := dataPoints.At(l)
dp.SetStartTimestamp(startTimeTs)
}
case pmetric.MetricTypeExponentialHistogram:
dataPoints := metric.ExponentialHistogram().DataPoints()
for l := 0; l < dataPoints.Len(); l++ {
dp := dataPoints.At(l)
dp.SetStartTimestamp(startTimeTs)
}
case pmetric.MetricTypeEmpty:
fallthrough
default:
stma.logger.Warn("Unknown metric type", zap.String("type", metric.Type().String()))
}
}
}
}
// Handle resets.
return stma.resetPointAdjuster.AdjustMetrics(metrics)
}