Skip to content

Commit b6b2fc4

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: #322 PR-URL: #359 Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
1 parent 1073520 commit b6b2fc4

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
@@ -75,6 +75,11 @@ metric_sdk::AggregationType OtlpMetricUtils::GetAggregationType(
7575
{
7676
return metric_sdk::AggregationType::kLastValue;
7777
}
78+
else if (nostd::holds_alternative<sdk::metrics::SummaryPointData>(
79+
point_data_with_attributes.point_data))
80+
{
81+
return metric_sdk::AggregationType::kSummary;
82+
}
7883
return metric_sdk::AggregationType::kDrop;
7984
}
8085

@@ -278,6 +283,56 @@ void OtlpMetricUtils::ConvertGaugeMetric(const opentelemetry::sdk::metrics::Metr
278283
}
279284
}
280285

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

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
@@ -160,6 +160,20 @@ class DropPointData
160160
DropPointData &operator=(DropPointData &&) = default;
161161
};
162162

163+
class SummaryPointData
164+
{
165+
public:
166+
// TODO: remove ctors and initializers when GCC<5 stops shipping on Ubuntu
167+
SummaryPointData(SummaryPointData &&) = default;
168+
SummaryPointData(const SummaryPointData &) = default;
169+
SummaryPointData &operator=(SummaryPointData &&) = default;
170+
SummaryPointData() = default;
171+
172+
uint64_t count_ = {};
173+
ValueType sum_ = {};
174+
std::unordered_map<double, ValueType> quantile_values_ = {};
175+
};
176+
163177
} // namespace metrics
164178
} // namespace sdk
165179
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)