Skip to content

Commit b038d06

Browse files
committed
deps: add support for exporting Summary via OTLP
PR-URL: #180 Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-by: Trevor Norris <trev.norris@gmail.com> PR-URL: #371 Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
1 parent 2886827 commit b038d06

6 files changed

Lines changed: 88 additions & 3 deletions

File tree

deps/opentelemetry-cpp/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_metric_utils.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ class OtlpMetricUtils
6262
static void ConvertGaugeMetric(const opentelemetry::sdk::metrics::MetricData &metric_data,
6363
proto::metrics::v1::Gauge *const gauge) noexcept;
6464

65+
static void ConvertSummaryMetric(const opentelemetry::sdk::metrics::MetricData &metric_data,
66+
proto::metrics::v1::Summary *const summary) noexcept;
67+
6568
static void PopulateInstrumentInfoMetrics(
6669
const opentelemetry::sdk::metrics::MetricData &metric_data,
6770
proto::metrics::v1::Metric *metric) noexcept;

deps/opentelemetry-cpp/exporters/otlp/src/otlp_metric_utils.cc

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ metric_sdk::AggregationType OtlpMetricUtils::GetAggregationType(
7676
{
7777
return metric_sdk::AggregationType::kLastValue;
7878
}
79+
else if (nostd::holds_alternative<sdk::metrics::SummaryPointData>(
80+
point_data_with_attributes.point_data))
81+
{
82+
return metric_sdk::AggregationType::kSummary;
83+
}
7984
return metric_sdk::AggregationType::kDrop;
8085
}
8186

@@ -279,6 +284,56 @@ void OtlpMetricUtils::ConvertGaugeMetric(const opentelemetry::sdk::metrics::Metr
279284
}
280285
}
281286

287+
void OtlpMetricUtils::ConvertSummaryMetric(const metric_sdk::MetricData &metric_data,
288+
proto::metrics::v1::Summary *const summary) noexcept
289+
{
290+
auto start_ts = metric_data.start_ts.time_since_epoch().count();
291+
auto ts = metric_data.end_ts.time_since_epoch().count();
292+
for (auto &point_data_with_attributes : metric_data.point_data_attr_)
293+
{
294+
proto::metrics::v1::SummaryDataPoint *proto_summary_point_data = summary->add_data_points();
295+
proto_summary_point_data->set_start_time_unix_nano(start_ts);
296+
proto_summary_point_data->set_time_unix_nano(ts);
297+
auto summary_data = nostd::get<sdk::metrics::SummaryPointData>(point_data_with_attributes.point_data);
298+
299+
// sum
300+
if ((nostd::holds_alternative<int64_t>(summary_data.sum_)))
301+
{
302+
// Use static_cast to avoid C4244 in MSVC
303+
proto_summary_point_data->set_sum(
304+
static_cast<double>(nostd::get<int64_t>(summary_data.sum_)));
305+
}
306+
else
307+
{
308+
proto_summary_point_data->set_sum(nostd::get<double>(summary_data.sum_));
309+
}
310+
// count
311+
proto_summary_point_data->set_count(summary_data.count_);
312+
// quantile values
313+
for (auto &kv : summary_data.quantile_values_)
314+
{
315+
proto::metrics::v1::SummaryDataPoint::ValueAtQuantile *quantile =
316+
proto_summary_point_data->add_quantile_values();
317+
quantile->set_quantile(kv.first);
318+
if ((nostd::holds_alternative<int64_t>(kv.second)))
319+
{
320+
// Use static_cast to avoid C4244 in MSVC
321+
quantile->set_value(static_cast<double>(nostd::get<int64_t>(kv.second)));
322+
}
323+
else
324+
{
325+
quantile->set_value(nostd::get<double>(kv.second));
326+
}
327+
}
328+
// set attributes
329+
for (auto &kv_attr : point_data_with_attributes.attributes)
330+
{
331+
OtlpPopulateAttributeUtils::PopulateAttribute(proto_summary_point_data->add_attributes(),
332+
kv_attr.first, kv_attr.second, false);
333+
}
334+
}
335+
}
336+
282337
void OtlpMetricUtils::PopulateInstrumentInfoMetrics(
283338
const opentelemetry::sdk::metrics::MetricData &metric_data,
284339
proto::metrics::v1::Metric *metric) noexcept
@@ -305,6 +360,10 @@ void OtlpMetricUtils::PopulateInstrumentInfoMetrics(
305360
ConvertGaugeMetric(metric_data, metric->mutable_gauge());
306361
break;
307362
}
363+
case metric_sdk::AggregationType::kSummary: {
364+
ConvertSummaryMetric(metric_data, metric->mutable_summary());
365+
break;
366+
}
308367
default:
309368
break;
310369
}
@@ -381,6 +440,8 @@ sdk::metrics::AggregationTemporality OtlpMetricUtils::DeltaTemporalitySelector(
381440
case sdk::metrics::InstrumentType::kUpDownCounter:
382441
case sdk::metrics::InstrumentType::kObservableUpDownCounter:
383442
return sdk::metrics::AggregationTemporality::kCumulative;
443+
case sdk::metrics::InstrumentType::kSummary:
444+
return sdk::metrics::AggregationTemporality::kUnspecified;
384445
}
385446
return sdk::metrics::AggregationTemporality::kUnspecified;
386447
}
@@ -405,6 +466,8 @@ sdk::metrics::AggregationTemporality OtlpMetricUtils::LowMemoryTemporalitySelect
405466
case sdk::metrics::InstrumentType::kUpDownCounter:
406467
case sdk::metrics::InstrumentType::kObservableUpDownCounter:
407468
return sdk::metrics::AggregationTemporality::kCumulative;
469+
case sdk::metrics::InstrumentType::kSummary:
470+
return sdk::metrics::AggregationTemporality::kUnspecified;
408471
}
409472
return sdk::metrics::AggregationTemporality::kUnspecified;
410473
}

deps/opentelemetry-cpp/sdk/include/opentelemetry/sdk/metrics/aggregation/default_aggregation.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ class DefaultAggregation
192192
case InstrumentType::kGauge:
193193
case InstrumentType::kObservableGauge:
194194
return AggregationType::kLastValue;
195+
case InstrumentType::kSummary:
196+
return AggregationType::kSummary;
195197
default:
196198
return AggregationType::kDrop;
197199
}

deps/opentelemetry-cpp/sdk/include/opentelemetry/sdk/metrics/data/metric_data.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ using PointType = opentelemetry::nostd::variant<SumPointData,
2222
HistogramPointData,
2323
Base2ExponentialHistogramPointData,
2424
LastValuePointData,
25-
DropPointData>;
25+
DropPointData,
26+
SummaryPointData>;
2627

2728
struct PointDataAttributes
2829
{

deps/opentelemetry-cpp/sdk/include/opentelemetry/sdk/metrics/data/point_data.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,20 @@ class DropPointData
167167
DropPointData &operator=(DropPointData &&) = default;
168168
};
169169

170+
class SummaryPointData
171+
{
172+
public:
173+
// TODO: remove ctors and initializers when GCC<5 stops shipping on Ubuntu
174+
SummaryPointData(SummaryPointData &&) = default;
175+
SummaryPointData(const SummaryPointData &) = default;
176+
SummaryPointData &operator=(SummaryPointData &&) = default;
177+
SummaryPointData() = default;
178+
179+
uint64_t count_ = {};
180+
ValueType sum_ = {};
181+
std::unordered_map<double, ValueType> quantile_values_ = {};
182+
};
183+
170184
} // namespace metrics
171185
} // namespace sdk
172186
OPENTELEMETRY_END_NAMESPACE

deps/opentelemetry-cpp/sdk/include/opentelemetry/sdk/metrics/instruments.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ enum class InstrumentType
2424
kObservableCounter,
2525
kObservableGauge,
2626
kObservableUpDownCounter,
27-
kGauge
27+
kGauge,
28+
kSummary
2829
};
2930

3031
enum class InstrumentClass
@@ -48,7 +49,8 @@ enum class AggregationType
4849
kLastValue,
4950
kSum,
5051
kDefault,
51-
kBase2ExponentialHistogram
52+
kBase2ExponentialHistogram,
53+
kSummary
5254
};
5355

5456
enum class AggregationTemporality

0 commit comments

Comments
 (0)