Skip to content

Commit 7ba2b35

Browse files
committed
OTLP: add support for summaries
1 parent 8e9c63f commit 7ba2b35

File tree

4 files changed

+65
-4
lines changed

4 files changed

+65
-4
lines changed

x-pack/plugin/otel-data/src/main/java/org/elasticsearch/xpack/oteldata/otlp/datapoint/DataPoint.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.opentelemetry.proto.common.v1.KeyValue;
1111
import io.opentelemetry.proto.metrics.v1.Metric;
1212
import io.opentelemetry.proto.metrics.v1.NumberDataPoint;
13+
import io.opentelemetry.proto.metrics.v1.SummaryDataPoint;
1314

1415
import java.util.List;
1516
import java.util.Set;
@@ -134,4 +135,42 @@ public boolean isValid(Set<String> errors) {
134135
return true;
135136
}
136137
}
138+
139+
record Summary(SummaryDataPoint dataPoint, Metric metric) implements DataPoint {
140+
141+
@Override
142+
public long getTimestampUnixNano() {
143+
return dataPoint.getTimeUnixNano();
144+
}
145+
146+
@Override
147+
public List<KeyValue> getAttributes() {
148+
return dataPoint.getAttributesList();
149+
}
150+
151+
@Override
152+
public long getStartTimestampUnixNano() {
153+
return dataPoint.getStartTimeUnixNano();
154+
}
155+
156+
@Override
157+
public String getUnit() {
158+
return metric.getUnit();
159+
}
160+
161+
@Override
162+
public String getMetricName() {
163+
return metric.getName();
164+
}
165+
166+
@Override
167+
public String getDynamicTemplate() {
168+
return "summary";
169+
}
170+
171+
@Override
172+
public boolean isValid(Set<String> errors) {
173+
return true;
174+
}
175+
}
137176
}

x-pack/plugin/otel-data/src/main/java/org/elasticsearch/xpack/oteldata/otlp/datapoint/DataPointGroupingContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ public void groupDataPoints(ExportMetricsServiceRequest exportMetricsServiceRequ
7676
ignoredDataPointMessages.add("Histogram is not supported yet. Dropping " + metric.getName());
7777
break;
7878
case SUMMARY:
79-
ignoredDataPoints += metric.getSummary().getDataPointsList().size();
80-
ignoredDataPointMessages.add("Summary is not supported yet. Dropping " + metric.getName());
79+
scopeGroup.addDataPoints(metric, metric.getSummary().getDataPointsList(), DataPoint.Summary::new);
8180
break;
8281
default:
8382
ignoredDataPoints++;

x-pack/plugin/otel-data/src/test/java/org/elasticsearch/xpack/oteldata/otlp/OtlpUtils.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import io.opentelemetry.proto.metrics.v1.ResourceMetrics;
2020
import io.opentelemetry.proto.metrics.v1.ScopeMetrics;
2121
import io.opentelemetry.proto.metrics.v1.Sum;
22+
import io.opentelemetry.proto.metrics.v1.Summary;
23+
import io.opentelemetry.proto.metrics.v1.SummaryDataPoint;
2224
import io.opentelemetry.proto.resource.v1.Resource;
2325

2426
import java.util.ArrayList;
@@ -105,6 +107,14 @@ public static Metric createSumMetric(
105107
.build();
106108
}
107109

110+
public static Metric createSummaryMetric(String name, String unit, List<SummaryDataPoint> dataPoints) {
111+
return Metric.newBuilder()
112+
.setName(name)
113+
.setUnit(unit)
114+
.setSummary(Summary.newBuilder().addAllDataPoints(dataPoints).build())
115+
.build();
116+
}
117+
108118
public static NumberDataPoint createDoubleDataPoint(long timestamp, List<KeyValue> attributes) {
109119
return NumberDataPoint.newBuilder()
110120
.setTimeUnixNano(timestamp)
@@ -123,6 +133,16 @@ public static NumberDataPoint createLongDataPoint(long timestamp, List<KeyValue>
123133
.build();
124134
}
125135

136+
public static SummaryDataPoint createSummaryDataPoint(long timestamp, List<KeyValue> attributes) {
137+
return SummaryDataPoint.newBuilder()
138+
.setTimeUnixNano(timestamp)
139+
.setStartTimeUnixNano(timestamp)
140+
.addAllAttributes(attributes)
141+
.setCount(randomLong())
142+
.setSum(randomDouble())
143+
.build();
144+
}
145+
126146
public static ExportMetricsServiceRequest createMetricsRequest(List<Metric> metrics) {
127147

128148
List<ResourceMetrics> resourceMetrics = new ArrayList<>();

x-pack/plugin/otel-data/src/test/java/org/elasticsearch/xpack/oteldata/otlp/datapoint/DataPointGroupingContextTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import static org.elasticsearch.xpack.oteldata.otlp.OtlpUtils.createResourceMetrics;
2525
import static org.elasticsearch.xpack.oteldata.otlp.OtlpUtils.createScopeMetrics;
2626
import static org.elasticsearch.xpack.oteldata.otlp.OtlpUtils.createSumMetric;
27+
import static org.elasticsearch.xpack.oteldata.otlp.OtlpUtils.createSummaryDataPoint;
28+
import static org.elasticsearch.xpack.oteldata.otlp.OtlpUtils.createSummaryMetric;
2729
import static org.elasticsearch.xpack.oteldata.otlp.OtlpUtils.keyValue;
2830

2931
public class DataPointGroupingContextTests extends ESTestCase {
@@ -43,11 +45,12 @@ public void testGroupingSameGroup() throws Exception {
4345
List.of(createLongDataPoint(nowUnixNanos, List.of())),
4446
true,
4547
AGGREGATION_TEMPORALITY_CUMULATIVE
46-
)
48+
),
49+
createSummaryMetric("summary", "", List.of(createSummaryDataPoint(nowUnixNanos, List.of())))
4750
)
4851
);
4952
context.groupDataPoints(metricsRequest);
50-
assertEquals(3, context.totalDataPoints());
53+
assertEquals(4, context.totalDataPoints());
5154
assertEquals(0, context.getIgnoredDataPoints());
5255
assertEquals("", context.getIgnoredDataPointsMessage());
5356

0 commit comments

Comments
 (0)