Skip to content

Commit d895d73

Browse files
authored
Merge pull request #2 from cisco-open/fix/span_trace_id_format
Fix spans & traces IDs
2 parents 80e0dd8 + 85e994a commit d895d73

File tree

4 files changed

+31
-21
lines changed

4 files changed

+31
-21
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ dependencies {
2525
api group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
2626
api group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.13.2'
2727
api group: 'io.opentelemetry', name: 'opentelemetry-proto', version: '1.6.0-alpha'
28+
api group: 'io.opentelemetry', name: 'opentelemetry-sdk-trace', version: '1.12.0'
2829
api group: 'com.google.guava', name: 'guava', version: 'r05'
2930
api group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
3031
api group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'

src/main/java/io/opentelemetry/contrib/generator/telemetry/logs/LogGeneratorThread.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void run() {
6464
.addInstrumentationLibraryLogs(InstrumentationLibraryLogs.newBuilder()
6565
.setInstrumentationLibrary(InstrumentationLibrary.newBuilder()
6666
.setName("@opentelemetry/vodka-exporter")
67-
.setVersion("22.5.0")
67+
.setVersion("22.9.0")
6868
.build())
6969
.addAllLogs(otelLogs)
7070
.build())

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void run() {
7171
.addInstrumentationLibraryMetrics(InstrumentationLibraryMetrics.newBuilder()
7272
.setInstrumentationLibrary(InstrumentationLibrary.newBuilder()
7373
.setName("@opentelemetry/test-telemetry-generator")
74-
.setVersion("22.5.0")
74+
.setVersion("22.9.0")
7575
.build())
7676
.addAllMetrics(otelMetrics)
7777
.build())

src/main/java/io/opentelemetry/contrib/generator/telemetry/traces/SpansGenerator.java

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,27 @@
1313
import io.opentelemetry.proto.trace.v1.ResourceSpans;
1414
import io.opentelemetry.proto.trace.v1.Span;
1515
import io.opentelemetry.proto.trace.v1.Status;
16+
import io.opentelemetry.sdk.trace.IdGenerator;
1617
import jakarta.el.ELProcessor;
1718
import lombok.Getter;
1819
import lombok.extern.slf4j.Slf4j;
1920

20-
import java.nio.charset.StandardCharsets;
2121
import java.util.*;
2222
import java.util.concurrent.TimeUnit;
2323
import java.util.stream.Collectors;
24+
import java.util.stream.IntStream;
2425

2526
@Slf4j
2627
public class SpansGenerator {
2728

2829
private final RootSpanDefinition traceTree;
2930
private final String groupName;
30-
private final int groupOffset;
3131
private final String requestID;
3232
private final ELProcessor jelProcessor;
3333
private ByteString[] traceIds;
3434
private long[] startTimes;
3535
private long[] endTimes;
36+
private ByteString[][] spanIds;
3637
@Getter
3738
private int currentPostCount;
3839
@Getter
@@ -42,7 +43,6 @@ public SpansGenerator(String groupName, RootSpanDefinition traceTree, String req
4243
this.traceTree = traceTree;
4344
this.groupName = groupName;
4445
this.requestID = requestID;
45-
groupOffset = Integer.parseInt(groupName.split("::group::")[1]);
4646
jelProcessor = JELProvider.getJelProcessor();
4747
currentPostCount = 0;
4848
currentTreePart = 0;
@@ -51,7 +51,7 @@ public SpansGenerator(String groupName, RootSpanDefinition traceTree, String req
5151
public ExportTraceServiceRequest getTraces() {
5252
log.debug(requestID + ": Received get traces request for " + groupName);
5353
if (currentTreePart == 0) {
54-
initTimesAndTraceId();
54+
initTimesAndIds();
5555
currentPostCount++;
5656
}
5757
Map<String, List<List<Span>>> spanCopiesByResource = getSpanCopiesByResource();
@@ -70,7 +70,7 @@ public ExportTraceServiceRequest getTraces() {
7070
.addInstrumentationLibrarySpans(InstrumentationLibrarySpans.newBuilder()
7171
.setInstrumentationLibrary(InstrumentationLibrary.newBuilder()
7272
.setName("@opentelemetry/test-telemetry-generator")
73-
.setVersion("22.5.0")
73+
.setVersion("22.9.0")
7474
.build())
7575
.addAllSpans(spans)
7676
.build())
@@ -118,18 +118,19 @@ private Map<String, List<List<Span>>> getSpanCopiesByResource() {
118118
return spanCopiesByResource;
119119
}
120120

121-
private void initTimesAndTraceId() {
122-
traceIds = new ByteString[traceTree.getCopyCount()];
123-
for (var copyIndex=0; copyIndex<traceTree.getCopyCount(); copyIndex++) {
124-
traceIds[copyIndex] = getId(traceTree.getName(), copyIndex, true);
125-
}
121+
private void initTimesAndIds() {
122+
traceIds = getTraceIds(traceTree.getCopyCount());
126123
int spansSize = traceTree.getTreeNodesPostOrder().size();
127124
startTimes = new long[spansSize];
128125
endTimes = new long[spansSize];
126+
spanIds = new ByteString[spansSize][traceTree.getCopyCount()];
129127
long baseTime = System.currentTimeMillis();
130128
for (var spanIndex=0; spanIndex<spansSize; spanIndex++) {
131129
startTimes[spanIndex] = baseTime + traceTree.getTreeNodesPostOrder().get(spanIndex).getStartTimeMillisOffset();
132130
endTimes[spanIndex] = baseTime + traceTree.getTreeNodesPostOrder().get(spanIndex).getEndTimeMillisOffset();
131+
for (var copyIndex=0; copyIndex<traceTree.getCopyCount(); copyIndex++) {
132+
spanIds[spanIndex][copyIndex] = getId(false);
133+
}
133134
}
134135
}
135136

@@ -168,12 +169,15 @@ private Span getSingleSpan(SpanDefinition spanDefinition, int spanIndex, boolean
168169
private List<Span> getSpanCopies(Span span, SpanDefinition spanDefinition) {
169170
List<Span> spanCopies = new ArrayList<>();
170171
Span.Builder eachCopy;
172+
int spanIndex = traceTree.getSpansIndexMap().get(spanDefinition.getName());
173+
int parentNodeIndex = spanDefinition.getParentNodes().containsKey(traceTree.getName()) ?
174+
traceTree.getSpansIndexMap().get(spanDefinition.getParentNodes().get(traceTree.getName()).getName()) : -1;
171175
for (var copyIndex=0; copyIndex<traceTree.getCopyCount(); copyIndex++) {
172176
eachCopy = Span.newBuilder(span)
173177
.setTraceId(traceIds[copyIndex])
174-
.setSpanId(getId(span.getName(), copyIndex, false));
175-
if (spanDefinition.getParentNodes().containsKey(traceTree.getName())) {
176-
eachCopy.setParentSpanId(getId(spanDefinition.getParentNodes().get(traceTree.getName()).getName(), copyIndex, false));
178+
.setSpanId(spanIds[spanIndex][copyIndex]);
179+
if (parentNodeIndex != -1) {
180+
eachCopy.setParentSpanId(spanIds[parentNodeIndex][copyIndex]);
177181
}
178182
spanCopies.add(eachCopy.build());
179183
}
@@ -201,12 +205,17 @@ private int getSpanStatusCode(int spanIndex) {
201205
return traceTree.getSpanErrorEndsTrace() ? 2 : 1;
202206
}
203207

204-
private ByteString getId(String spanName, int copyIndex, boolean isTrace) {
205-
int actualCopyIndex = (groupOffset * traceTree.getCopyCount()) + copyIndex;
206-
String name = isTrace ?
207-
"trace-" + spanName + "_" + actualCopyIndex + "_" + currentPostCount :
208-
spanName + "_" + actualCopyIndex + "_" + currentPostCount;
209-
return ByteString.copyFromUtf8(UUID.nameUUIDFromBytes(name.getBytes(StandardCharsets.UTF_8)).toString());
208+
private ByteString[] getTraceIds(int count) {
209+
ByteString[] traceIds = new ByteString[count];
210+
IntStream.range(0, count).forEach(i -> {
211+
traceIds[i] = getId(true);
212+
});
213+
return traceIds;
214+
}
215+
216+
private ByteString getId(boolean isTrace) {
217+
String idString = isTrace ? IdGenerator.random().generateTraceId() : IdGenerator.random().generateSpanId();
218+
return ByteString.copyFrom(Base64.getEncoder().encode(idString.getBytes()));
210219
}
211220

212221
}

0 commit comments

Comments
 (0)