@@ -68,6 +68,11 @@ metric_sdk::AggregationType OtlpMetricUtils::GetAggregationType(
68
68
{
69
69
return metric_sdk::AggregationType::kLastValue ;
70
70
}
71
+ else if (nostd::holds_alternative<sdk::metrics::SummaryPointData>(
72
+ point_data_with_attributes.point_data ))
73
+ {
74
+ return metric_sdk::AggregationType::kSummary ;
75
+ }
71
76
return metric_sdk::AggregationType::kDrop ;
72
77
}
73
78
@@ -207,6 +212,56 @@ void OtlpMetricUtils::ConvertGaugeMetric(const opentelemetry::sdk::metrics::Metr
207
212
}
208
213
}
209
214
215
+ void OtlpMetricUtils::ConvertSummaryMetric (const metric_sdk::MetricData &metric_data,
216
+ proto::metrics::v1::Summary *const summary) noexcept
217
+ {
218
+ auto start_ts = metric_data.start_ts .time_since_epoch ().count ();
219
+ auto ts = metric_data.end_ts .time_since_epoch ().count ();
220
+ for (auto &point_data_with_attributes : metric_data.point_data_attr_ )
221
+ {
222
+ proto::metrics::v1::SummaryDataPoint *proto_summary_point_data = summary->add_data_points ();
223
+ proto_summary_point_data->set_start_time_unix_nano (start_ts);
224
+ proto_summary_point_data->set_time_unix_nano (ts);
225
+ auto summary_data = nostd::get<sdk::metrics::SummaryPointData>(point_data_with_attributes.point_data );
226
+
227
+ // sum
228
+ if ((nostd::holds_alternative<int64_t >(summary_data.sum_ )))
229
+ {
230
+ // Use static_cast to avoid C4244 in MSVC
231
+ proto_summary_point_data->set_sum (
232
+ static_cast <double >(nostd::get<int64_t >(summary_data.sum_ )));
233
+ }
234
+ else
235
+ {
236
+ proto_summary_point_data->set_sum (nostd::get<double >(summary_data.sum_ ));
237
+ }
238
+ // count
239
+ proto_summary_point_data->set_count (summary_data.count_ );
240
+ // quantile values
241
+ for (auto &kv : summary_data.quantile_values_ )
242
+ {
243
+ proto::metrics::v1::SummaryDataPoint::ValueAtQuantile *quantile =
244
+ proto_summary_point_data->add_quantile_values ();
245
+ quantile->set_quantile (kv.first );
246
+ if ((nostd::holds_alternative<int64_t >(kv.second )))
247
+ {
248
+ // Use static_cast to avoid C4244 in MSVC
249
+ quantile->set_value (static_cast <double >(nostd::get<int64_t >(kv.second )));
250
+ }
251
+ else
252
+ {
253
+ quantile->set_value (nostd::get<double >(kv.second ));
254
+ }
255
+ }
256
+ // set attributes
257
+ for (auto &kv_attr : point_data_with_attributes.attributes )
258
+ {
259
+ OtlpPopulateAttributeUtils::PopulateAttribute (proto_summary_point_data->add_attributes (),
260
+ kv_attr.first , kv_attr.second );
261
+ }
262
+ }
263
+ }
264
+
210
265
void OtlpMetricUtils::PopulateInstrumentInfoMetrics (
211
266
const opentelemetry::sdk::metrics::MetricData &metric_data,
212
267
proto::metrics::v1::Metric *metric) noexcept
@@ -229,6 +284,10 @@ void OtlpMetricUtils::PopulateInstrumentInfoMetrics(
229
284
ConvertGaugeMetric (metric_data, metric->mutable_gauge ());
230
285
break ;
231
286
}
287
+ case metric_sdk::AggregationType::kSummary : {
288
+ ConvertSummaryMetric (metric_data, metric->mutable_summary ());
289
+ break ;
290
+ }
232
291
default :
233
292
break ;
234
293
}
@@ -305,6 +364,8 @@ sdk::metrics::AggregationTemporality OtlpMetricUtils::DeltaTemporalitySelector(
305
364
case sdk::metrics::InstrumentType::kUpDownCounter :
306
365
case sdk::metrics::InstrumentType::kObservableUpDownCounter :
307
366
return sdk::metrics::AggregationTemporality::kCumulative ;
367
+ case sdk::metrics::InstrumentType::kSummary :
368
+ return sdk::metrics::AggregationTemporality::kUnspecified ;
308
369
}
309
370
return sdk::metrics::AggregationTemporality::kUnspecified ;
310
371
}
@@ -329,6 +390,8 @@ sdk::metrics::AggregationTemporality OtlpMetricUtils::LowMemoryTemporalitySelect
329
390
case sdk::metrics::InstrumentType::kUpDownCounter :
330
391
case sdk::metrics::InstrumentType::kObservableUpDownCounter :
331
392
return sdk::metrics::AggregationTemporality::kCumulative ;
393
+ case sdk::metrics::InstrumentType::kSummary :
394
+ return sdk::metrics::AggregationTemporality::kUnspecified ;
332
395
}
333
396
return sdk::metrics::AggregationTemporality::kUnspecified ;
334
397
}
0 commit comments