Skip to content

Commit 9c9858e

Browse files
committed
Tested and added examples
1 parent a5bfafd commit 9c9858e

File tree

5 files changed

+51
-19
lines changed

5 files changed

+51
-19
lines changed

example-definitions/json/metric-definition.json

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,16 @@
9191
{
9292
"name": "container.cpu.used.utilization",
9393
"unit": "%",
94-
"otelType": "summary",
95-
"valueFunction": "arithmeticSequenceSummary(1, 2, \"\", 7)",
94+
"otelType": "histogram",
95+
"aggregationTemporality": "delta",
96+
"valueFunction": "arithmeticSequenceSummary(5, 2, \"\", 7)",
9697
"isDouble": true,
97-
"quantiles": [
98-
0,
99-
0.5,
100-
0.75,
101-
1
98+
"bounds": [
99+
10,
100+
30,
101+
50,
102+
70,
103+
90
102104
],
103105
"reportingResources": [
104106
"container"

example-definitions/qa/metric-definition.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,11 @@ metrics:
6363
reportingResources: [resource_quota]
6464
- name: container.cpu.used.utilization
6565
unit: "%"
66-
otelType: summary
67-
valueFunction: 'arithmeticSequenceSummary(1, 2, "", 7)'
66+
otelType: histogram
67+
aggregationTemporality: delta
68+
valueFunction: 'arithmeticSequenceSummary(5, 2, "", 7)'
6869
isDouble: true
69-
quantiles: [ 0, 0.5, 0.75, 1 ]
70+
bounds: [10, 30, 50, 70, 90]
7071
reportingResources: [ container ]
7172
- name: cpu.usage
7273
unit: "{cores}"

src/main/java/io/opentelemetry/contrib/generator/telemetry/metrics/HistogramGenerator.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.opentelemetry.contrib.generator.telemetry.metrics;
22

33
import io.opentelemetry.contrib.generator.core.jel.ExpressionProcessor;
4+
import io.opentelemetry.contrib.generator.telemetry.GeneratorsStateProvider;
45
import io.opentelemetry.contrib.generator.telemetry.metrics.dto.MetricDefinition;
56
import io.opentelemetry.contrib.generator.telemetry.misc.GeneratorUtils;
67
import io.opentelemetry.proto.metrics.v1.*;
@@ -17,9 +18,11 @@
1718
@Slf4j
1819
public class HistogramGenerator {
1920

21+
private final String requestID;
2022
private final ExpressionProcessor jelProcessor;
2123

22-
public HistogramGenerator(ExpressionProcessor jelProcessor) {
24+
public HistogramGenerator(String requestID, ExpressionProcessor jelProcessor) {
25+
this.requestID = requestID;
2326
this.jelProcessor = jelProcessor;
2427
}
2528

@@ -32,8 +35,7 @@ public Metric.Builder getOTelMetric(MetricDefinition metricDefinition) {
3235
}
3336

3437
private Histogram getHistogramDataPoint(MetricDefinition metricDefinition) {
35-
long[] times = GeneratorUtils.normalizeTimestamp(TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()),
36-
metricDefinition.getPayloadFrequencySeconds());
38+
long[] times = getTimes(metricDefinition);
3739
List<Double> values = getCountValues(metricDefinition);
3840
double sum = values.stream().mapToDouble(Double::doubleValue).sum();
3941
int count = (values.size());
@@ -51,6 +53,18 @@ private Histogram getHistogramDataPoint(MetricDefinition metricDefinition) {
5153
.build();
5254
}
5355

56+
private long[] getTimes(MetricDefinition metricDefinition) {
57+
long[] times = GeneratorUtils.normalizeTimestamp(TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()),
58+
metricDefinition.getPayloadFrequencySeconds());
59+
if (metricDefinition.getAggregationTemporality() == AggregationTemporality.AGGREGATION_TEMPORALITY_CUMULATIVE) {
60+
if (GeneratorsStateProvider.getMetricGeneratorState(requestID).getFixedStartTime() == 0) {
61+
GeneratorsStateProvider.getMetricGeneratorState(requestID).setFixedStartTime(times[0]);
62+
}
63+
times[0] = GeneratorsStateProvider.getMetricGeneratorState(requestID).getFixedStartTime();
64+
}
65+
return times;
66+
}
67+
5468
private List<Double> getCountValues(MetricDefinition metricDefinition) {
5569
Object value = jelProcessor.eval(metricDefinition.getValueFunction());
5670
List<Object> rawValues = value instanceof List<?> ? (List<Object>) value : Collections.nCopies(5, value);

src/main/java/io/opentelemetry/contrib/generator/telemetry/metrics/MetricGeneratorThread.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class MetricGeneratorThread implements Runnable {
5252
private final GeneratorState<MetricGeneratorThread> metricGeneratorState;
5353
private final GaugeGenerator gaugeGenerator;
5454
private final SumGenerator sumGenerator;
55+
private final HistogramGenerator histogramGenerator;
5556
private final SummaryGenerator summaryGenerator;
5657
private int currentCount;
5758

@@ -65,6 +66,7 @@ public MetricGeneratorThread(String groupKey, List<MetricDefinition> metrics, Pa
6566
ExpressionProcessor jelProcessor = JELProvider.getJelProcessor();
6667
gaugeGenerator = new GaugeGenerator(jelProcessor);
6768
sumGenerator = new SumGenerator(requestID, jelProcessor);
69+
histogramGenerator = new HistogramGenerator(requestID, jelProcessor);
6870
summaryGenerator = new SummaryGenerator(jelProcessor);
6971
currentCount = 0;
7072
}
@@ -116,7 +118,7 @@ public void run() {
116118
.addAllResourceMetrics(resourceMetricsList)
117119
.build();
118120
log.info(requestID + ": Sending payload for: " + groupKey);
119-
//log.debug(requestID + ": Complete payload for " + groupKey + ": " + resourceMetrics);
121+
log.debug(requestID + ": Complete payload for " + groupKey + ": " + resourceMetrics);
120122
boolean responseStatus = payloadHandler.postPayload(resourceMetrics);
121123
if (metricGeneratorState.getTransportStorage() != null) {
122124
metricGeneratorState.getTransportStorage().store(groupKey, resourceMetrics, responseStatus);
@@ -131,6 +133,7 @@ private Metric.Builder getMetric(MetricDefinition metricDefinition) {
131133
return switch (metricDefinition.getOtelType()) {
132134
case Constants.GAUGE -> gaugeGenerator.getOTelMetric(metricDefinition);
133135
case Constants.SUM -> sumGenerator.getOTelMetric(metricDefinition);
136+
case Constants.HISTOGRAM -> histogramGenerator.getOTelMetric(metricDefinition);
134137
default -> summaryGenerator.getOTelMetric(metricDefinition);
135138
};
136139
}
@@ -195,18 +198,29 @@ private Metric getMetricWithResourceAttributes(Metric.Builder partialMetric, Lis
195198
.map(NumberDataPoint::toBuilder)
196199
.map(bdp -> bdp.addAllAttributes(resourceAttributes).build())
197200
.toList();
198-
partialMetric.getSum().toBuilder()
201+
Sum newSum = partialMetric.getSum().toBuilder()
199202
.clearDataPoints()
200203
.addAllDataPoints(dataPointsWAttrs)
201204
.build();
202-
Sum newSum = partialMetric.getSum().toBuilder()
205+
return Metric.newBuilder()
206+
.setName(partialMetric.getName())
207+
.setUnit(partialMetric.getUnit())
208+
.setSum(newSum)
209+
.build();
210+
} else if (metricType.equals(Metric.DataCase.HISTOGRAM)) {
211+
List<HistogramDataPoint> dataPoints = partialMetric.getHistogram().getDataPointsList();
212+
List<HistogramDataPoint> dataPointsWAttrs = dataPoints.stream()
213+
.map(HistogramDataPoint::toBuilder)
214+
.map(bdp -> bdp.addAllAttributes(resourceAttributes).build())
215+
.toList();
216+
Histogram newHistogram = partialMetric.getHistogram().toBuilder()
203217
.clearDataPoints()
204218
.addAllDataPoints(dataPointsWAttrs)
205219
.build();
206220
return Metric.newBuilder()
207221
.setName(partialMetric.getName())
208222
.setUnit(partialMetric.getUnit())
209-
.setSum(newSum)
223+
.setHistogram(newHistogram)
210224
.build();
211225
} else {
212226
List<SummaryDataPoint> dataPoints = partialMetric.getSummary().getDataPointsList();

src/test/resources/test-definitions/metrics-test.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ payloadCount: 10
1919
metrics:
2020
- name: system.network.in.kb.sec
2121
unit: kBy/s
22-
otelType: summary
22+
otelType: histogram
2323
valueFunction: 'absoluteCosineSequenceSummary("*7000", 5)'
2424
isDouble: true
25-
quantiles: [0, 50, 100]
25+
aggregationTemporality: cumulative
26+
bounds: [10, 100, 1000, 10000, 100000]
2627
reportingResources: [network_interface, container, machine]
2728
attributes:
2829
system.internal.ip: 'IPv4Sequence("10.134.1.34")'

0 commit comments

Comments
 (0)