in exporter/collector/metrics.go [865:965]
func (m *metricMapper) summaryPointToTimeSeries(
resource *monitoredrespb.MonitoredResource,
extraLabels labels,
metric pmetric.Metric,
_ pmetric.Summary,
point pmetric.SummaryDataPoint,
) []*monitoringpb.TimeSeries {
if point.Flags().NoRecordedValue() {
// Drop points without a value.
return nil
}
// Normalize the summary point.
metricIdentifier := datapointstorage.Identifier(resource, extraLabels, metric, point.Attributes())
keep := m.normalizer.NormalizeSummaryDataPoint(point, metricIdentifier)
if !keep {
return nil
}
sumType, countType, quantileType, err := m.summaryMetricTypes(metric)
if err != nil {
m.obs.log.Debug("Failed to get metric type (i.e. name) for summary metric. Dropping the metric.", zap.Error(err), zap.Any("metric", metric))
return nil
}
startTime := timestamppb.New(point.StartTimestamp().AsTime())
endTime := timestamppb.New(point.Timestamp().AsTime())
result := []*monitoringpb.TimeSeries{
{
Resource: resource,
Unit: metric.Unit(),
MetricKind: metricpb.MetricDescriptor_CUMULATIVE,
ValueType: metricpb.MetricDescriptor_DOUBLE,
Points: []*monitoringpb.Point{{
Interval: &monitoringpb.TimeInterval{
StartTime: startTime,
EndTime: endTime,
},
Value: &monitoringpb.TypedValue{Value: &monitoringpb.TypedValue_DoubleValue{
DoubleValue: point.Sum(),
}},
}},
Metric: &metricpb.Metric{
Type: sumType,
Labels: mergeLabels(
attributesToLabels(point.Attributes()),
extraLabels,
),
},
},
{
Resource: resource,
Unit: metric.Unit(),
MetricKind: metricpb.MetricDescriptor_CUMULATIVE,
ValueType: metricpb.MetricDescriptor_DOUBLE,
Points: []*monitoringpb.Point{{
Interval: &monitoringpb.TimeInterval{
StartTime: startTime,
EndTime: endTime,
},
Value: &monitoringpb.TypedValue{Value: &monitoringpb.TypedValue_DoubleValue{
DoubleValue: float64(point.Count()),
}},
}},
Metric: &metricpb.Metric{
Type: countType,
Labels: mergeLabels(
attributesToLabels(point.Attributes()),
extraLabels,
),
},
},
}
quantiles := point.QuantileValues()
for i := 0; i < quantiles.Len(); i++ {
quantile := quantiles.At(i)
pLabel := labels{
"quantile": strconv.FormatFloat(quantile.Quantile(), 'f', -1, 64),
}
result = append(result, &monitoringpb.TimeSeries{
Resource: resource,
Unit: metric.Unit(),
MetricKind: metricpb.MetricDescriptor_GAUGE,
ValueType: metricpb.MetricDescriptor_DOUBLE,
Points: []*monitoringpb.Point{{
Interval: &monitoringpb.TimeInterval{
EndTime: endTime,
},
Value: &monitoringpb.TypedValue{Value: &monitoringpb.TypedValue_DoubleValue{
DoubleValue: quantile.Value(),
}},
}},
Metric: &metricpb.Metric{
Type: quantileType,
Labels: mergeLabels(
attributesToLabels(point.Attributes()),
extraLabels,
pLabel,
),
},
})
}
return result
}