|
69 | 69 | import io.opentelemetry.testing.internal.proto.metrics.v1.Sum; |
70 | 70 | import io.opentelemetry.testing.internal.proto.metrics.v1.SummaryDataPoint; |
71 | 71 | import io.opentelemetry.testing.internal.proto.resource.v1.Resource; |
72 | | -import io.opentelemetry.testing.internal.proto.trace.v1.ResourceSpans; |
73 | 72 | import io.opentelemetry.testing.internal.proto.trace.v1.ScopeSpans; |
74 | 73 | import io.opentelemetry.testing.internal.proto.trace.v1.Span; |
75 | 74 | import io.opentelemetry.testing.internal.proto.trace.v1.Status; |
|
83 | 82 | import java.util.concurrent.TimeUnit; |
84 | 83 | import java.util.regex.Pattern; |
85 | 84 | import java.util.stream.Collectors; |
86 | | -import java.util.stream.Stream; |
87 | 85 |
|
88 | 86 | public final class AgentTestingExporterAccess { |
89 | 87 | private static final char TRACESTATE_KEY_VALUE_DELIMITER = '='; |
@@ -172,93 +170,94 @@ public static List<SpanData> getExportedSpans() { |
172 | 170 | throw new AssertionError("Could not invoke getSpanExportRequests", t); |
173 | 171 | } |
174 | 172 |
|
175 | | - return getSpanData( |
176 | | - exportRequests.stream() |
177 | | - .map( |
178 | | - serialized -> { |
179 | | - try { |
180 | | - return ExportTraceServiceRequest.parseFrom(serialized); |
181 | | - } catch (InvalidProtocolBufferException e) { |
182 | | - throw new AssertionError(e); |
183 | | - } |
184 | | - }) |
185 | | - .flatMap(request -> request.getResourceSpansList().stream())); |
| 173 | + return getSpanData(exportRequests); |
186 | 174 | } |
187 | 175 |
|
188 | | - public static List<SpanData> getSpanData(Stream<ResourceSpans> allResourceSpans) { |
| 176 | + public static List<SpanData> getSpanData(List<byte[]> exportRequests) { |
189 | 177 | List<SpanData> spans = new ArrayList<>(); |
190 | | - allResourceSpans.forEach( |
191 | | - resourceSpans -> { |
192 | | - Resource resource = resourceSpans.getResource(); |
193 | | - for (ScopeSpans ilSpans : resourceSpans.getScopeSpansList()) { |
194 | | - InstrumentationScope instrumentationScope = ilSpans.getScope(); |
195 | | - for (Span span : ilSpans.getSpansList()) { |
196 | | - String traceId = bytesToHex(span.getTraceId().toByteArray()); |
197 | | - spans.add( |
198 | | - TestSpanData.builder() |
199 | | - .setSpanContext( |
200 | | - SpanContext.create( |
201 | | - traceId, |
202 | | - bytesToHex(span.getSpanId().toByteArray()), |
203 | | - TraceFlags.getDefault(), |
204 | | - extractTraceState(span.getTraceState()))) |
205 | | - // TODO is it ok to use default trace flags and default trace state here? |
206 | | - .setParentSpanContext( |
207 | | - SpanContext.create( |
208 | | - traceId, |
209 | | - bytesToHex(span.getParentSpanId().toByteArray()), |
210 | | - TraceFlags.getDefault(), |
211 | | - TraceState.getDefault())) |
212 | | - .setResource( |
213 | | - io.opentelemetry.sdk.resources.Resource.create( |
214 | | - fromProto(resource.getAttributesList()))) |
215 | | - .setInstrumentationScopeInfo( |
216 | | - InstrumentationScopeInfo.builder(instrumentationScope.getName()) |
217 | | - // emptyToNull since they are the same at protobuf layer, |
218 | | - // and allows for simpler verification of InstrumentationScope |
219 | | - .setVersion(emptyToNull(instrumentationScope.getVersion())) |
220 | | - .build()) |
221 | | - .setName(span.getName()) |
222 | | - .setStartEpochNanos(span.getStartTimeUnixNano()) |
223 | | - .setEndEpochNanos(span.getEndTimeUnixNano()) |
224 | | - .setAttributes(fromProto(span.getAttributesList())) |
225 | | - .setEvents( |
226 | | - span.getEventsList().stream() |
227 | | - .map( |
228 | | - event -> |
229 | | - EventData.create( |
230 | | - event.getTimeUnixNano(), |
231 | | - event.getName(), |
232 | | - fromProto(event.getAttributesList()), |
233 | | - event.getDroppedAttributesCount() |
234 | | - + event.getAttributesCount())) |
235 | | - .collect(toList())) |
236 | | - .setStatus(fromProto(span.getStatus())) |
237 | | - .setKind(fromProto(span.getKind())) |
238 | | - .setLinks( |
239 | | - span.getLinksList().stream() |
240 | | - .map( |
241 | | - link -> |
242 | | - LinkData.create( |
243 | | - SpanContext.create( |
244 | | - bytesToHex(link.getTraceId().toByteArray()), |
245 | | - bytesToHex(link.getSpanId().toByteArray()), |
246 | | - TraceFlags.getDefault(), |
247 | | - extractTraceState(link.getTraceState())), |
248 | | - fromProto(link.getAttributesList()), |
249 | | - link.getDroppedAttributesCount() |
250 | | - + link.getAttributesCount())) |
251 | | - .collect(toList())) |
252 | | - // OTLP doesn't have hasRemoteParent |
253 | | - .setHasEnded(true) |
254 | | - .setTotalRecordedEvents(span.getEventsCount() + span.getDroppedEventsCount()) |
255 | | - .setTotalRecordedLinks(span.getLinksCount() + span.getDroppedLinksCount()) |
256 | | - .setTotalAttributeCount( |
257 | | - span.getAttributesCount() + span.getDroppedAttributesCount()) |
258 | | - .build()); |
259 | | - } |
260 | | - } |
261 | | - }); |
| 178 | + exportRequests.stream() |
| 179 | + .map( |
| 180 | + serialized -> { |
| 181 | + try { |
| 182 | + return ExportTraceServiceRequest.parseFrom(serialized); |
| 183 | + } catch (InvalidProtocolBufferException e) { |
| 184 | + throw new AssertionError(e); |
| 185 | + } |
| 186 | + }) |
| 187 | + .flatMap(request -> request.getResourceSpansList().stream()) |
| 188 | + .forEach( |
| 189 | + resourceSpans -> { |
| 190 | + Resource resource = resourceSpans.getResource(); |
| 191 | + for (ScopeSpans ilSpans : resourceSpans.getScopeSpansList()) { |
| 192 | + InstrumentationScope instrumentationScope = ilSpans.getScope(); |
| 193 | + for (Span span : ilSpans.getSpansList()) { |
| 194 | + String traceId = bytesToHex(span.getTraceId().toByteArray()); |
| 195 | + spans.add( |
| 196 | + TestSpanData.builder() |
| 197 | + .setSpanContext( |
| 198 | + SpanContext.create( |
| 199 | + traceId, |
| 200 | + bytesToHex(span.getSpanId().toByteArray()), |
| 201 | + TraceFlags.getDefault(), |
| 202 | + extractTraceState(span.getTraceState()))) |
| 203 | + // TODO is it ok to use default trace flags and default trace state here? |
| 204 | + .setParentSpanContext( |
| 205 | + SpanContext.create( |
| 206 | + traceId, |
| 207 | + bytesToHex(span.getParentSpanId().toByteArray()), |
| 208 | + TraceFlags.getDefault(), |
| 209 | + TraceState.getDefault())) |
| 210 | + .setResource( |
| 211 | + io.opentelemetry.sdk.resources.Resource.create( |
| 212 | + fromProto(resource.getAttributesList()))) |
| 213 | + .setInstrumentationScopeInfo( |
| 214 | + InstrumentationScopeInfo.builder(instrumentationScope.getName()) |
| 215 | + // emptyToNull since they are the same at protobuf layer, |
| 216 | + // and allows for simpler verification of InstrumentationScope |
| 217 | + .setVersion(emptyToNull(instrumentationScope.getVersion())) |
| 218 | + .build()) |
| 219 | + .setName(span.getName()) |
| 220 | + .setStartEpochNanos(span.getStartTimeUnixNano()) |
| 221 | + .setEndEpochNanos(span.getEndTimeUnixNano()) |
| 222 | + .setAttributes(fromProto(span.getAttributesList())) |
| 223 | + .setEvents( |
| 224 | + span.getEventsList().stream() |
| 225 | + .map( |
| 226 | + event -> |
| 227 | + EventData.create( |
| 228 | + event.getTimeUnixNano(), |
| 229 | + event.getName(), |
| 230 | + fromProto(event.getAttributesList()), |
| 231 | + event.getDroppedAttributesCount() |
| 232 | + + event.getAttributesCount())) |
| 233 | + .collect(toList())) |
| 234 | + .setStatus(fromProto(span.getStatus())) |
| 235 | + .setKind(fromProto(span.getKind())) |
| 236 | + .setLinks( |
| 237 | + span.getLinksList().stream() |
| 238 | + .map( |
| 239 | + link -> |
| 240 | + LinkData.create( |
| 241 | + SpanContext.create( |
| 242 | + bytesToHex(link.getTraceId().toByteArray()), |
| 243 | + bytesToHex(link.getSpanId().toByteArray()), |
| 244 | + TraceFlags.getDefault(), |
| 245 | + extractTraceState(link.getTraceState())), |
| 246 | + fromProto(link.getAttributesList()), |
| 247 | + link.getDroppedAttributesCount() |
| 248 | + + link.getAttributesCount())) |
| 249 | + .collect(toList())) |
| 250 | + // OTLP doesn't have hasRemoteParent |
| 251 | + .setHasEnded(true) |
| 252 | + .setTotalRecordedEvents( |
| 253 | + span.getEventsCount() + span.getDroppedEventsCount()) |
| 254 | + .setTotalRecordedLinks(span.getLinksCount() + span.getDroppedLinksCount()) |
| 255 | + .setTotalAttributeCount( |
| 256 | + span.getAttributesCount() + span.getDroppedAttributesCount()) |
| 257 | + .build()); |
| 258 | + } |
| 259 | + } |
| 260 | + }); |
262 | 261 | return spans; |
263 | 262 | } |
264 | 263 |
|
|
0 commit comments