Skip to content

Commit ea03c10

Browse files
committed
deps: add support for exporting Summary via OTLP
PR-URL: #180 Reviewed-By: Rafael Gonzaga <[email protected]> Reviewed-by: Trevor Norris <[email protected]> PR-URL: #260 Reviewed-By: Juan José Arboleda <[email protected]> PR-URL: #268
1 parent 01dc768 commit ea03c10

File tree

6 files changed

+86
-2
lines changed

6 files changed

+86
-2
lines changed

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
@@ -58,6 +58,9 @@ class OtlpMetricUtils
5858
static void ConvertGaugeMetric(const opentelemetry::sdk::metrics::MetricData &metric_data,
5959
proto::metrics::v1::Gauge *const gauge) noexcept;
6060

61+
static void ConvertSummaryMetric(const opentelemetry::sdk::metrics::MetricData &metric_data,
62+
proto::metrics::v1::Summary *const summary) noexcept;
63+
6164
static void PopulateInstrumentInfoMetrics(
6265
const opentelemetry::sdk::metrics::MetricData &metric_data,
6366
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
@@ -68,6 +68,11 @@ metric_sdk::AggregationType OtlpMetricUtils::GetAggregationType(
6868
{
6969
return metric_sdk::AggregationType::kLastValue;
7070
}
71+
else if (nostd::holds_alternative<sdk::metrics::SummaryPointData>(
72+
point_data_with_attributes.point_data))
73+
{
74+
return metric_sdk::AggregationType::kSummary;
75+
}
7176
return metric_sdk::AggregationType::kDrop;
7277
}
7378

@@ -207,6 +212,56 @@ void OtlpMetricUtils::ConvertGaugeMetric(const opentelemetry::sdk::metrics::Metr
207212
}
208213
}
209214

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+
210265
void OtlpMetricUtils::PopulateInstrumentInfoMetrics(
211266
const opentelemetry::sdk::metrics::MetricData &metric_data,
212267
proto::metrics::v1::Metric *metric) noexcept
@@ -229,6 +284,10 @@ void OtlpMetricUtils::PopulateInstrumentInfoMetrics(
229284
ConvertGaugeMetric(metric_data, metric->mutable_gauge());
230285
break;
231286
}
287+
case metric_sdk::AggregationType::kSummary: {
288+
ConvertSummaryMetric(metric_data, metric->mutable_summary());
289+
break;
290+
}
232291
default:
233292
break;
234293
}
@@ -305,6 +364,8 @@ sdk::metrics::AggregationTemporality OtlpMetricUtils::DeltaTemporalitySelector(
305364
case sdk::metrics::InstrumentType::kUpDownCounter:
306365
case sdk::metrics::InstrumentType::kObservableUpDownCounter:
307366
return sdk::metrics::AggregationTemporality::kCumulative;
367+
case sdk::metrics::InstrumentType::kSummary:
368+
return sdk::metrics::AggregationTemporality::kUnspecified;
308369
}
309370
return sdk::metrics::AggregationTemporality::kUnspecified;
310371
}
@@ -329,6 +390,8 @@ sdk::metrics::AggregationTemporality OtlpMetricUtils::LowMemoryTemporalitySelect
329390
case sdk::metrics::InstrumentType::kUpDownCounter:
330391
case sdk::metrics::InstrumentType::kObservableUpDownCounter:
331392
return sdk::metrics::AggregationTemporality::kCumulative;
393+
case sdk::metrics::InstrumentType::kSummary:
394+
return sdk::metrics::AggregationTemporality::kUnspecified;
332395
}
333396
return sdk::metrics::AggregationTemporality::kUnspecified;
334397
}

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
@@ -184,6 +184,8 @@ class DefaultAggregation
184184
case InstrumentType::kGauge:
185185
case InstrumentType::kObservableGauge:
186186
return AggregationType::kLastValue;
187+
case InstrumentType::kSummary:
188+
return AggregationType::kSummary;
187189
default:
188190
return AggregationType::kDrop;
189191
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace metrics
1919

2020
using PointAttributes = opentelemetry::sdk::common::OrderedAttributeMap;
2121
using PointType = opentelemetry::nostd::
22-
variant<SumPointData, HistogramPointData, LastValuePointData, DropPointData>;
22+
variant<SumPointData, HistogramPointData, LastValuePointData, DropPointData, SummaryPointData>;
2323

2424
struct PointDataAttributes
2525
{

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
@@ -74,6 +74,20 @@ class DropPointData
7474
DropPointData &operator=(DropPointData &&) = default;
7575
};
7676

77+
class SummaryPointData
78+
{
79+
public:
80+
// TODO: remove ctors and initializers when GCC<5 stops shipping on Ubuntu
81+
SummaryPointData(SummaryPointData &&) = default;
82+
SummaryPointData(const SummaryPointData &) = default;
83+
SummaryPointData &operator=(SummaryPointData &&) = default;
84+
SummaryPointData() = default;
85+
86+
uint64_t count_ = {};
87+
ValueType sum_ = {};
88+
std::unordered_map<double, ValueType> quantile_values_ = {};
89+
};
90+
7791
} // namespace metrics
7892
} // namespace sdk
7993
OPENTELEMETRY_END_NAMESPACE

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ enum class InstrumentType
2222
kObservableCounter,
2323
kObservableGauge,
2424
kObservableUpDownCounter,
25-
kGauge
25+
kGauge,
26+
kSummary
2627
};
2728

2829
enum class InstrumentClass
@@ -45,6 +46,7 @@ enum class AggregationType
4546
kHistogram,
4647
kLastValue,
4748
kSum,
49+
kSummary,
4850
kDefault
4951
};
5052

0 commit comments

Comments
 (0)