in exporter/collector/metrics.go [1235:1289]
func (m *metricMapper) sumPointToTimeSeries(
resource *monitoredrespb.MonitoredResource,
extraLabels labels,
metric pmetric.Metric,
sum pmetric.Sum,
point pmetric.NumberDataPoint,
) []*monitoringpb.TimeSeries {
metricKind := metricpb.MetricDescriptor_CUMULATIVE
var startTime *timestamppb.Timestamp
if point.Flags().NoRecordedValue() {
// Drop points without a value. This may be a staleness marker from
// prometheus.
return nil
}
t, err := m.metricNameToType(metric.Name(), metric)
if err != nil {
m.obs.log.Debug("Failed to get metric type (i.e. name) for sum metric. Dropping the metric.", zap.Error(err), zap.Any("metric", metric))
return nil
}
if sum.IsMonotonic() {
if sum.AggregationTemporality() == pmetric.AggregationTemporalityCumulative {
metricIdentifier := datapointstorage.Identifier(resource, extraLabels, metric, point.Attributes())
keep := m.normalizer.NormalizeNumberDataPoint(point, metricIdentifier)
if !keep {
return nil
}
}
startTime = timestamppb.New(point.StartTimestamp().AsTime())
} else {
metricKind = metricpb.MetricDescriptor_GAUGE
startTime = nil
}
value, valueType := m.numberDataPointToValue(point, metricKind, metric.Unit())
return []*monitoringpb.TimeSeries{{
Resource: resource,
Unit: metric.Unit(),
MetricKind: metricKind,
ValueType: valueType,
Points: []*monitoringpb.Point{{
Interval: &monitoringpb.TimeInterval{
StartTime: startTime,
EndTime: timestamppb.New(point.Timestamp().AsTime()),
},
Value: value,
}},
Metric: &metricpb.Metric{
Type: t,
Labels: mergeLabels(
attributesToLabels(point.Attributes()),
extraLabels,
),
},
}}
}