in packages/opentelemetry-cloud-monitoring-exporter/src/transform.ts [170:227]
function transformPoints(
metric: MetricData,
metricPrefix: string
): {point: Point; metric: Metric}[] {
switch (metric.dataPointType) {
case DataPointType.SUM:
case DataPointType.GAUGE:
return metric.dataPoints.map(dataPoint => ({
metric: transformMetric(dataPoint, metric.descriptor, metricPrefix),
point: {
value: transformNumberValue(
metric.descriptor.valueType,
dataPoint.value
),
interval: {
// Add start time for non-gauge points
...(metric.dataPointType === DataPointType.SUM && metric.isMonotonic
? {
startTime: new PreciseDate(dataPoint.startTime).toISOString(),
}
: null),
endTime: new PreciseDate(dataPoint.endTime).toISOString(),
},
},
}));
case DataPointType.HISTOGRAM:
return metric.dataPoints.map(dataPoint => ({
metric: transformMetric(dataPoint, metric.descriptor, metricPrefix),
point: {
value: transformHistogramValue(dataPoint.value),
interval: {
startTime: new PreciseDate(dataPoint.startTime).toISOString(),
endTime: new PreciseDate(dataPoint.endTime).toISOString(),
},
},
}));
case DataPointType.EXPONENTIAL_HISTOGRAM:
return metric.dataPoints.map(dataPoint => ({
metric: transformMetric(dataPoint, metric.descriptor, metricPrefix),
point: {
value: transformExponentialHistogramValue(dataPoint.value),
interval: {
startTime: new PreciseDate(dataPoint.startTime).toISOString(),
endTime: new PreciseDate(dataPoint.endTime).toISOString(),
},
},
}));
default:
exhaust(metric);
diag.info(
'Encountered unexpected dataPointType=%s, dropping %s points',
(metric as MetricData).dataPointType,
(metric as MetricData).dataPoints.length
);
break;
}
return [];
}