From 239d35ca22cbff6fc41a417fd6b5dfdd10d75353 Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 13:53:10 -0400
Subject: [PATCH 01/12] otlp: Add OTLP trace plugins to Maven build
Add org.eclipse.tracecompass.incubator.otlp.core and its test plugin
to the tracetypes/pom.xml module list so they are compiled as part of
the standard build.
- Update plugin versions from 0.14.0 to 0.18.0 to match current release
- Add traces/ to test plugin build.properties bin.includes
This patch was made with the assistance of claude sonnet 4.6
Change-Id: Ic6b7456edec1188c5ca102181f2b34ec8816fa4d
Signed-off-by: Matthew Khouzam
---
.../.classpath | 15 +
.../.gitignore | 1 +
.../.project | 28 +
.../META-INF/MANIFEST.MF | 19 +
.../about.html | 36 +
.../build.properties | 18 +
.../plugin.properties | 13 +
.../otlp/core/tests/OtlpTraceTest.java | 114 +
.../traces/hotrod-jaeger.json | 4216 +++++++++++++++++
.../traces/otel-spans-large.json | 614 +++
.../.classpath | 15 +
.../.gitignore | 1 +
.../.project | 28 +
.../META-INF/MANIFEST.MF | 22 +
.../about.html | 36 +
.../build.properties | 18 +
.../plugin.properties | 13 +
.../plugin.xml | 32 +
.../pom.xml | 28 +
.../internal/otlp/core/Activator.java | 49 +
.../internal/otlp/core/trace/OtlpField.java | 187 +
.../otlp/core/trace/OtlpSortingJob.java | 148 +
.../internal/otlp/core/trace/OtlpTrace.java | 202 +
tracetypes/pom.xml | 2 +
24 files changed, 5855 insertions(+)
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.classpath
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.gitignore
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.project
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/META-INF/MANIFEST.MF
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/build.properties
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/plugin.properties
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/src/org/eclipse/tracecompass/incubator/otlp/core/tests/OtlpTraceTest.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/hotrod-jaeger.json
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/otel-spans-large.json
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.classpath
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.gitignore
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.project
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/about.html
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/build.properties
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.properties
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.xml
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/pom.xml
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/Activator.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.classpath b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.classpath
new file mode 100644
index 000000000..1d57be56a
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.classpath
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.gitignore b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.gitignore
new file mode 100644
index 000000000..ae3c17260
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.project b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.project
new file mode 100644
index 000000000..5e1703119
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/.project
@@ -0,0 +1,28 @@
+
+
+ org.eclipse.tracecompass.incubator.otlp.core.tests
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/META-INF/MANIFEST.MF b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..6e2cfe7e9
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: %Bundle-Vendor
+Bundle-SymbolicName: org.eclipse.tracecompass.incubator.otlp.core.tests
+Bundle-Version: 0.18.0.qualifier
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-17
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.tracecompass.common.core,
+ org.eclipse.tracecompass.incubator.otlp.core,
+ org.eclipse.tracecompass.incubator.opentracing.core,
+ org.junit,
+ org.eclipse.tracecompass.tmf.core,
+ org.eclipse.tracecompass.jsontrace.core,
+ org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
+Export-Package: org.eclipse.tracecompass.incubator.otlp.core.tests
+Automatic-Module-Name: org.eclipse.tracecompass.incubator.otlp.core.tests
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html
new file mode 100644
index 000000000..8eee37d47
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html
@@ -0,0 +1,36 @@
+
+
+
+
+About
+
+
+ About This Content
+
+ November 30, 2017
+ License
+
+
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at http://www.eclipse.org/legal/epl-2.0.
+ For purposes of the EPL, "Program" will mean the Content.
+
+
+
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at http://www.eclipse.org.
+
+
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/build.properties b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/build.properties
new file mode 100644
index 000000000..fc25d48e3
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/build.properties
@@ -0,0 +1,18 @@
+###############################################################################
+# Copyright (c) 2026 Ericsson
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ plugin.properties,\
+ traces/
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/plugin.properties b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/plugin.properties
new file mode 100644
index 000000000..d6b95e315
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/plugin.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2026 Ericsson
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+
+Bundle-Vendor = Eclipse Trace Compass Incubator
+Bundle-Name = Trace Compass Incubator OTLP Core Tests Plug-in
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/src/org/eclipse/tracecompass/incubator/otlp/core/tests/OtlpTraceTest.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/src/org/eclipse/tracecompass/incubator/otlp/core/tests/OtlpTraceTest.java
new file mode 100644
index 000000000..22185bfed
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/src/org/eclipse/tracecompass/incubator/otlp/core/tests/OtlpTraceTest.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.otlp.core.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.incubator.internal.otlp.core.trace.OtlpTrace;
+import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
+import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
+import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
+import org.junit.Test;
+
+/**
+ * Test reading OTLP traces
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpTraceTest {
+
+ private static final String TRACE_PATH = "traces/hotrod-jaeger.json"; //$NON-NLS-1$
+ private static final String LARGE_TRACE_PATH = "traces/otel-spans-large.json"; //$NON-NLS-1$
+ private static final int NB_EVENTS = 79;
+ private static final int NB_EVENTS_LARGE = 600;
+
+ /**
+ * Test that the trace validates as OTLP
+ */
+ @Test
+ public void testValidate() {
+ OtlpTrace trace = new OtlpTrace();
+ try {
+ IStatus status = trace.validate(null, TRACE_PATH);
+ assertTrue("Trace should validate: " + status.getMessage(), status.isOK()); //$NON-NLS-1$
+ } finally {
+ trace.dispose();
+ }
+ }
+
+ /**
+ * Test reading all events from the trace
+ *
+ * @throws TmfTraceException
+ * if the trace cannot be opened
+ */
+ @Test
+ public void testReadTrace() throws TmfTraceException {
+ OtlpTrace trace = new OtlpTrace();
+ try {
+ trace.initTrace(null, TRACE_PATH, ITmfEvent.class);
+ ITmfContext context = trace.seekEvent(0.0);
+ ITmfEvent event = trace.getNext(context);
+ long count = 0;
+ long prevTs = -1;
+ while (event != null) {
+ count++;
+ @NonNull ITmfTimestamp timestamp = event.getTimestamp();
+ assertNotNull("Event has a timestamp", timestamp); //$NON-NLS-1$
+ assertTrue("Monotonic events", timestamp.toNanos() >= prevTs); //$NON-NLS-1$
+ prevTs = timestamp.toNanos();
+ event = trace.getNext(context);
+ }
+ assertEquals(NB_EVENTS, count);
+ assertEquals(NB_EVENTS, trace.getNbEvents());
+ } finally {
+ trace.dispose();
+ }
+ }
+
+ /**
+ * Test reading all events from the large trace
+ *
+ * @throws TmfTraceException
+ * if the trace cannot be opened
+ */
+ @Test
+ public void testReadLargeTrace() throws TmfTraceException {
+ OtlpTrace trace = new OtlpTrace();
+ try {
+ IStatus status = trace.validate(null, LARGE_TRACE_PATH);
+ assertTrue("Trace should validate: " + status.getMessage(), status.isOK()); //$NON-NLS-1$
+ trace.initTrace(null, LARGE_TRACE_PATH, ITmfEvent.class);
+ ITmfContext context = trace.seekEvent(0.0);
+ ITmfEvent event = trace.getNext(context);
+ long count = 0;
+ long prevTs = -1;
+ while (event != null) {
+ count++;
+ @NonNull ITmfTimestamp timestamp = event.getTimestamp();
+ assertNotNull("Event has a timestamp", timestamp); //$NON-NLS-1$
+ assertTrue("Monotonic events", timestamp.toNanos() >= prevTs); //$NON-NLS-1$
+ prevTs = timestamp.toNanos();
+ event = trace.getNext(context);
+ }
+ assertEquals(NB_EVENTS_LARGE, count);
+ assertEquals(NB_EVENTS_LARGE, trace.getNbEvents());
+ } finally {
+ trace.dispose();
+ }
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/hotrod-jaeger.json b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/hotrod-jaeger.json
new file mode 100644
index 000000000..f57e12da8
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/hotrod-jaeger.json
@@ -0,0 +1,4216 @@
+{
+ "resourceSpans": [
+ {
+ "resource": {
+ "attributes": [
+ {
+ "key": "service.name",
+ "value": {
+ "stringValue": "customer"
+ }
+ }
+ ]
+ },
+ "scopeSpans": [
+ {
+ "scope": {
+ "name": "hotrod"
+ },
+ "spans": [
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "ae3064974d37720b",
+ "name": "/customer",
+ "kind": 2,
+ "startTimeUnixNano": "1778178091749932000",
+ "endTimeUnixNano": "1778178092020901000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8081"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "50962"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/customer"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/customer"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "66"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "17d6eb555457b98f"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "0b12cf7e5bcd4853",
+ "name": "/customer",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094480572000",
+ "endTimeUnixNano": "1778178094718956000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8081"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "50962"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/customer"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/customer"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "b7f48302bf940f01"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "resource": {
+ "attributes": [
+ {
+ "key": "service.name",
+ "value": {
+ "stringValue": "redis-manual"
+ }
+ }
+ ]
+ },
+ "scopeSpans": [
+ {
+ "scope": {
+ "name": "hotrod"
+ },
+ "spans": [
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "bae8e2711fc8f448",
+ "name": "FindDriverIDs",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092025241000",
+ "endTimeUnixNano": "1778178092048815000",
+ "attributes": [
+ {
+ "key": "param.driver.location",
+ "value": {
+ "stringValue": "115,277"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "a65ca97da00ca8cc",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092048843000",
+ "endTimeUnixNano": "1778178092077432000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T742247C"
+ }
+ }
+ ],
+ "status": {
+ "code": 2
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "d294d011a8285197",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092077503000",
+ "endTimeUnixNano": "1778178092085844000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T742247C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "957b55deb72b5424",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092085869000",
+ "endTimeUnixNano": "1778178092095261000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T724318C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "ba701cc160ca125e",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092095290000",
+ "endTimeUnixNano": "1778178092107621000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T743429C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "fc48300b018cd740",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092107643000",
+ "endTimeUnixNano": "1778178092120985000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T700758C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "82fbd19678859e44",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092121008000",
+ "endTimeUnixNano": "1778178092150589000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T758632C"
+ }
+ }
+ ],
+ "status": {
+ "code": 2
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "5631c29522b50851",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092150666000",
+ "endTimeUnixNano": "1778178092162895000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T758632C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "eb20a7e1744d6d21",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092162918000",
+ "endTimeUnixNano": "1778178092177309000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T745943C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "64434b20d0728174",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092177331000",
+ "endTimeUnixNano": "1778178092192441000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T704584C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "fc6a3baaf26b17a2",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092192473000",
+ "endTimeUnixNano": "1778178092201853000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T783752C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "33b7c24c35bfd6ff",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092201988000",
+ "endTimeUnixNano": "1778178092236721000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T792059C"
+ }
+ }
+ ],
+ "status": {
+ "code": 2
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "8aeb465daa71d847",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092236811000",
+ "endTimeUnixNano": "1778178092248252000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T792059C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "bed1cb7f0fb57910",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092248274000",
+ "endTimeUnixNano": "1778178092262433000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T752519C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c3f380748073a1ed"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "112c01d4aa5b3859",
+ "name": "FindDriverIDs",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094719982000",
+ "endTimeUnixNano": "1778178094745380000",
+ "attributes": [
+ {
+ "key": "param.driver.location",
+ "value": {
+ "stringValue": "577,322"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "63d5992ea4878769",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094745405000",
+ "endTimeUnixNano": "1778178094753831000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T751746C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "8603fa0864c0655c",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094753854000",
+ "endTimeUnixNano": "1778178094771199000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T702425C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "5b9f47ba94bae7cf",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094771221000",
+ "endTimeUnixNano": "1778178094797753000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T779776C"
+ }
+ }
+ ],
+ "status": {
+ "code": 2
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "464e8cd40f69c6b6",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094797830000",
+ "endTimeUnixNano": "1778178094807187000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T779776C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "784ee21ef9397a75",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094807208000",
+ "endTimeUnixNano": "1778178094815771000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T732591C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "5042830ea73ef9df",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094815833000",
+ "endTimeUnixNano": "1778178094827178000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T724513C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "fb7c0d6ef3b4bf37",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094827202000",
+ "endTimeUnixNano": "1778178094833598000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T773080C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "010e1a708de5cec1",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094833622000",
+ "endTimeUnixNano": "1778178094861665000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T747626C"
+ }
+ }
+ ],
+ "status": {
+ "code": 2
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "dee4a3b526b627f0",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094861749000",
+ "endTimeUnixNano": "1778178094872566000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T747626C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "98d345adcbb1f0ad",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094872587000",
+ "endTimeUnixNano": "1778178094879930000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T733617C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "fc449d2910a8fe1d",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094879955000",
+ "endTimeUnixNano": "1778178094896714000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T732412C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "4bd76c9e256f89c2",
+ "name": "GetDriver",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094896742000",
+ "endTimeUnixNano": "1778178094909216000",
+ "attributes": [
+ {
+ "key": "param.driverID",
+ "value": {
+ "stringValue": "T752030C"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0a527e0da6acf33b"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "resource": {
+ "attributes": [
+ {
+ "key": "service.name",
+ "value": {
+ "stringValue": "mysql"
+ }
+ }
+ ]
+ },
+ "scopeSpans": [
+ {
+ "scope": {
+ "name": "hotrod"
+ },
+ "spans": [
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "eff62a13ef237554",
+ "name": "SQL SELECT",
+ "kind": 3,
+ "startTimeUnixNano": "1778178091750118000",
+ "endTimeUnixNano": "1778178092020583000",
+ "attributes": [
+ {
+ "key": "service.peer.name",
+ "value": {
+ "stringValue": "mysql"
+ }
+ },
+ {
+ "key": "sql.query",
+ "value": {
+ "stringValue": "SELECT * FROM customer WHERE customer_id=123"
+ }
+ },
+ {
+ "key": "request",
+ "value": {
+ "stringValue": ""
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "ae3064974d37720b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "d9a36fb1f6eb2fde",
+ "name": "SQL SELECT",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094480754000",
+ "endTimeUnixNano": "1778178094718826000",
+ "attributes": [
+ {
+ "key": "service.peer.name",
+ "value": {
+ "stringValue": "mysql"
+ }
+ },
+ {
+ "key": "sql.query",
+ "value": {
+ "stringValue": "SELECT * FROM customer WHERE customer_id=392"
+ }
+ },
+ {
+ "key": "request",
+ "value": {
+ "stringValue": ""
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "0b12cf7e5bcd4853"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "resource": {
+ "attributes": [
+ {
+ "key": "service.name",
+ "value": {
+ "stringValue": "frontend"
+ }
+ }
+ ]
+ },
+ "scopeSpans": [
+ {
+ "scope": {
+ "name": "hotrod"
+ },
+ "spans": [
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "17d6eb555457b98f",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178091749242000",
+ "endTimeUnixNano": "1778178092021425000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8081/customer?customer=123"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8081"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "cf188a426b1a8c15",
+ "name": "driver.DriverService/FindNearest",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092022222000",
+ "endTimeUnixNano": "1778178092267344000",
+ "attributes": [
+ {
+ "key": "rpc.method",
+ "value": {
+ "stringValue": "driver.DriverService/FindNearest"
+ }
+ },
+ {
+ "key": "rpc.system.name",
+ "value": {
+ "stringValue": "grpc"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8082"
+ }
+ },
+ {
+ "key": "rpc.response.status_code",
+ "value": {
+ "stringValue": "OK"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "45632ff71c903e58",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092268591000",
+ "endTimeUnixNano": "1778178092317993000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=689%2C592"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "38aa932fe8ff79f4",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092267714000",
+ "endTimeUnixNano": "1778178092322060000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=647%2C53"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "ac9e1bc8455cb993",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092268222000",
+ "endTimeUnixNano": "1778178092350191000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=868%2C755"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "f9721d619590609f",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092322244000",
+ "endTimeUnixNano": "1778178092362236000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=944%2C502"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "d837274ec920c9f0",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092318230000",
+ "endTimeUnixNano": "1778178092385468000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=173%2C551"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "6fb5782f04d277e3",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092350407000",
+ "endTimeUnixNano": "1778178092398820000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=210%2C81"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "12439e8883ac244b",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092362515000",
+ "endTimeUnixNano": "1778178092401371000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=972%2C808"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "e3c1d5b8949f4344",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092385676000",
+ "endTimeUnixNano": "1778178092417585000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=450%2C661"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "35c9dc0c723b5d59",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092399016000",
+ "endTimeUnixNano": "1778178092450430000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=107%2C873"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "79030766bae4d280",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178092401626000",
+ "endTimeUnixNano": "1778178092458910000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=115%2C277&pickup=619%2C524"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c368b95aa43c47b6"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "c368b95aa43c47b6",
+ "name": "/dispatch",
+ "kind": 2,
+ "startTimeUnixNano": "1778178091748905000",
+ "endTimeUnixNano": "1778178092459221000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "localhost"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8080"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "46564"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "curl/7.81.0"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/dispatch"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/dispatch"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "40"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ }
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "b7f48302bf940f01",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094478914000",
+ "endTimeUnixNano": "1778178094719257000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8081/customer?customer=392"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8081"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "23914cd526bb47c2",
+ "name": "driver.DriverService/FindNearest",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094719505000",
+ "endTimeUnixNano": "1778178094909930000",
+ "attributes": [
+ {
+ "key": "rpc.method",
+ "value": {
+ "stringValue": "driver.DriverService/FindNearest"
+ }
+ },
+ {
+ "key": "rpc.system.name",
+ "value": {
+ "stringValue": "grpc"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8082"
+ }
+ },
+ {
+ "key": "rpc.response.status_code",
+ "value": {
+ "stringValue": "OK"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "b301311796b8f641",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094910196000",
+ "endTimeUnixNano": "1778178094960104000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=393%2C911"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "c1fdef5ab8cbb446",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094910261000",
+ "endTimeUnixNano": "1778178094960173000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=246%2C142"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "14ff3253a57260aa",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094910291000",
+ "endTimeUnixNano": "1778178094963569000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=722%2C807"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "aed36e3e8ad800ea",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094960401000",
+ "endTimeUnixNano": "1778178095001541000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=416%2C344"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "a97a869e78f334b9",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094963709000",
+ "endTimeUnixNano": "1778178095003335000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=76%2C687"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "38a6b0de0bb1c408",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178094960550000",
+ "endTimeUnixNano": "1778178095014224000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=200%2C506"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "ddc2d1778f2a3d2b",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178095003481000",
+ "endTimeUnixNano": "1778178095056252000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=27%2C184"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "c524bd55e31fcfb1",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178095014404000",
+ "endTimeUnixNano": "1778178095056302000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=983%2C428"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "e33426d29339ab16",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178095001758000",
+ "endTimeUnixNano": "1778178095069248000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=817%2C987"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "74514efd58685c6f",
+ "name": "HTTP GET",
+ "kind": 3,
+ "startTimeUnixNano": "1778178095056452000",
+ "endTimeUnixNano": "1778178095099858000",
+ "attributes": [
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.full",
+ "value": {
+ "stringValue": "http://0.0.0.0:8083/route?dropoff=577%2C322&pickup=886%2C308"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "41a13b3b2cf0aee2"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "41a13b3b2cf0aee2",
+ "name": "/dispatch",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094478241000",
+ "endTimeUnixNano": "1778178095100131000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "localhost"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8080"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "46576"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "curl/7.81.0"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/dispatch"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/dispatch"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "40"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "resource": {
+ "attributes": [
+ {
+ "key": "service.name",
+ "value": {
+ "stringValue": "driver"
+ }
+ }
+ ]
+ },
+ "scopeSpans": [
+ {
+ "scope": {
+ "name": "hotrod"
+ },
+ "spans": [
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "c3f380748073a1ed",
+ "name": "driver.DriverService/FindNearest",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092024974000",
+ "endTimeUnixNano": "1778178092266774000",
+ "attributes": [
+ {
+ "key": "rpc.method",
+ "value": {
+ "stringValue": "driver.DriverService/FindNearest"
+ }
+ },
+ {
+ "key": "rpc.system.name",
+ "value": {
+ "stringValue": "grpc"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "56206"
+ }
+ },
+ {
+ "key": "rpc.response.status_code",
+ "value": {
+ "stringValue": "OK"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "cf188a426b1a8c15"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "0a527e0da6acf33b",
+ "name": "driver.DriverService/FindNearest",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094719834000",
+ "endTimeUnixNano": "1778178094909511000",
+ "attributes": [
+ {
+ "key": "rpc.method",
+ "value": {
+ "stringValue": "driver.DriverService/FindNearest"
+ }
+ },
+ {
+ "key": "rpc.system.name",
+ "value": {
+ "stringValue": "grpc"
+ }
+ },
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "56206"
+ }
+ },
+ {
+ "key": "rpc.response.status_code",
+ "value": {
+ "stringValue": "OK"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "23914cd526bb47c2"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "resource": {
+ "attributes": [
+ {
+ "key": "service.name",
+ "value": {
+ "stringValue": "route"
+ }
+ }
+ ]
+ },
+ "scopeSpans": [
+ {
+ "scope": {
+ "name": "hotrod"
+ },
+ "spans": [
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "7f3507c7fe6b0fa4",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092273621000",
+ "endTimeUnixNano": "1778178092317372000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36256"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "45632ff71c903e58"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "2312ecdb6e5a8fed",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092273851000",
+ "endTimeUnixNano": "1778178092321587000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36244"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "58"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "38aa932fe8ff79f4"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "20a2724067eb2a68",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092273948000",
+ "endTimeUnixNano": "1778178092349780000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "ac9e1bc8455cb993"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "7b7b114bc64a528d",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092322733000",
+ "endTimeUnixNano": "1778178092361908000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36244"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "f9721d619590609f"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "09693054dc610782",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092318566000",
+ "endTimeUnixNano": "1778178092384651000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36256"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "d837274ec920c9f0"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "13d3fb14c701acc7",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092350720000",
+ "endTimeUnixNano": "1778178092398451000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "58"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "6fb5782f04d277e3"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "6bd9d6bfe41bfc88",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092362898000",
+ "endTimeUnixNano": "1778178092400927000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36244"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "12439e8883ac244b"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "1548c1949f762d1f",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092386004000",
+ "endTimeUnixNano": "1778178092417225000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36256"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "e3c1d5b8949f4344"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "e9e18931febbd1af",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092399328000",
+ "endTimeUnixNano": "1778178092449867000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "35c9dc0c723b5d59"
+ },
+ {
+ "traceId": "b7def0859d3934760c55d6dd879e7c9e",
+ "spanId": "4912c5c12971ce19",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178092402056000",
+ "endTimeUnixNano": "1778178092458550000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36244"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "79030766bae4d280"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "6bab6fc2a97875e1",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094910545000",
+ "endTimeUnixNano": "1778178094959214000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36256"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c1fdef5ab8cbb446"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "7c26cebc5754436c",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094910474000",
+ "endTimeUnixNano": "1778178094959214000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "b301311796b8f641"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "9f3e80adb21b7108",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094910922000",
+ "endTimeUnixNano": "1778178094963200000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36258"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "14ff3253a57260aa"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "564e16989e16ae23",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094960814000",
+ "endTimeUnixNano": "1778178095001149000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36256"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "aed36e3e8ad800ea"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "6e97957cbf9f9785",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094963959000",
+ "endTimeUnixNano": "1778178095003124000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36258"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "58"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "a97a869e78f334b9"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "98978b8716187d46",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178094960949000",
+ "endTimeUnixNano": "1778178095013922000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "38a6b0de0bb1c408"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "cc6c3a20404f0682",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178095003705000",
+ "endTimeUnixNano": "1778178095055909000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36258"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "58"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "ddc2d1778f2a3d2b"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "e5e7c20dc594fb8f",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178095014771000",
+ "endTimeUnixNano": "1778178095055909000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "c524bd55e31fcfb1"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "4076b737a3c4f6c4",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178095002093000",
+ "endTimeUnixNano": "1778178095068886000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36256"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "e33426d29339ab16"
+ },
+ {
+ "traceId": "4a21ed13a92b87f245849fe57db01f57",
+ "spanId": "768a218b22ce6e16",
+ "name": "/route",
+ "kind": 2,
+ "startTimeUnixNano": "1778178095056757000",
+ "endTimeUnixNano": "1778178095099422000",
+ "attributes": [
+ {
+ "key": "server.address",
+ "value": {
+ "stringValue": "0.0.0.0"
+ }
+ },
+ {
+ "key": "http.request.method",
+ "value": {
+ "stringValue": "GET"
+ }
+ },
+ {
+ "key": "url.scheme",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "server.port",
+ "value": {
+ "intValue": "8083"
+ }
+ },
+ {
+ "key": "network.peer.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "network.peer.port",
+ "value": {
+ "intValue": "36248"
+ }
+ },
+ {
+ "key": "user_agent.original",
+ "value": {
+ "stringValue": "Go-http-client/1.1"
+ }
+ },
+ {
+ "key": "client.address",
+ "value": {
+ "stringValue": "127.0.0.1"
+ }
+ },
+ {
+ "key": "url.path",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "network.protocol.version",
+ "value": {
+ "stringValue": "1.1"
+ }
+ },
+ {
+ "key": "http.route",
+ "value": {
+ "stringValue": "/route"
+ }
+ },
+ {
+ "key": "http.response.body.size",
+ "value": {
+ "intValue": "59"
+ }
+ },
+ {
+ "key": "http.response.status_code",
+ "value": {
+ "intValue": "200"
+ }
+ }
+ ],
+ "status": {
+ "code": 1
+ },
+ "parentSpanId": "74514efd58685c6f"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/otel-spans-large.json b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/otel-spans-large.json
new file mode 100644
index 000000000..2b5303855
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/traces/otel-spans-large.json
@@ -0,0 +1,614 @@
+{"resourceSpans":[
+ {"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"producer-service"}}]},
+ "scopeSpans":[{"scope":{"name":"trace-event-logger-test"},"spans":[
+
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000000a","name":"produce-0","kind":4,"startTimeUnixNano":"1000000000","endTimeUnixNano":"9000000000","attributes":[{"key":"iteration","value":{"intValue":"0"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000000b","name":"produce-1","kind":4,"startTimeUnixNano":"1100000000","endTimeUnixNano":"9100000000","attributes":[{"key":"iteration","value":{"intValue":"0"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000000c","name":"produce-2","kind":4,"startTimeUnixNano":"1200000000","endTimeUnixNano":"9200000000","attributes":[{"key":"iteration","value":{"intValue":"0"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000014","name":"produce-0","kind":4,"startTimeUnixNano":"11000000000","endTimeUnixNano":"19000000000","attributes":[{"key":"iteration","value":{"intValue":"1"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000015","name":"produce-1","kind":4,"startTimeUnixNano":"11100000000","endTimeUnixNano":"19100000000","attributes":[{"key":"iteration","value":{"intValue":"1"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000016","name":"produce-2","kind":4,"startTimeUnixNano":"11200000000","endTimeUnixNano":"19200000000","attributes":[{"key":"iteration","value":{"intValue":"1"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000001e","name":"produce-0","kind":4,"startTimeUnixNano":"21000000000","endTimeUnixNano":"29000000000","attributes":[{"key":"iteration","value":{"intValue":"2"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000001f","name":"produce-1","kind":4,"startTimeUnixNano":"21100000000","endTimeUnixNano":"29100000000","attributes":[{"key":"iteration","value":{"intValue":"2"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000020","name":"produce-2","kind":4,"startTimeUnixNano":"21200000000","endTimeUnixNano":"29200000000","attributes":[{"key":"iteration","value":{"intValue":"2"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000028","name":"produce-0","kind":4,"startTimeUnixNano":"31000000000","endTimeUnixNano":"39000000000","attributes":[{"key":"iteration","value":{"intValue":"3"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000029","name":"produce-1","kind":4,"startTimeUnixNano":"31100000000","endTimeUnixNano":"39100000000","attributes":[{"key":"iteration","value":{"intValue":"3"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000002a","name":"produce-2","kind":4,"startTimeUnixNano":"31200000000","endTimeUnixNano":"39200000000","attributes":[{"key":"iteration","value":{"intValue":"3"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000032","name":"produce-0","kind":4,"startTimeUnixNano":"41000000000","endTimeUnixNano":"49000000000","attributes":[{"key":"iteration","value":{"intValue":"4"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000033","name":"produce-1","kind":4,"startTimeUnixNano":"41100000000","endTimeUnixNano":"49100000000","attributes":[{"key":"iteration","value":{"intValue":"4"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000034","name":"produce-2","kind":4,"startTimeUnixNano":"41200000000","endTimeUnixNano":"49200000000","attributes":[{"key":"iteration","value":{"intValue":"4"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000003c","name":"produce-0","kind":4,"startTimeUnixNano":"51000000000","endTimeUnixNano":"59000000000","attributes":[{"key":"iteration","value":{"intValue":"5"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000003d","name":"produce-1","kind":4,"startTimeUnixNano":"51100000000","endTimeUnixNano":"59100000000","attributes":[{"key":"iteration","value":{"intValue":"5"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000003e","name":"produce-2","kind":4,"startTimeUnixNano":"51200000000","endTimeUnixNano":"59200000000","attributes":[{"key":"iteration","value":{"intValue":"5"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000046","name":"produce-0","kind":4,"startTimeUnixNano":"61000000000","endTimeUnixNano":"69000000000","attributes":[{"key":"iteration","value":{"intValue":"6"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000047","name":"produce-1","kind":4,"startTimeUnixNano":"61100000000","endTimeUnixNano":"69100000000","attributes":[{"key":"iteration","value":{"intValue":"6"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000048","name":"produce-2","kind":4,"startTimeUnixNano":"61200000000","endTimeUnixNano":"69200000000","attributes":[{"key":"iteration","value":{"intValue":"6"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000050","name":"produce-0","kind":4,"startTimeUnixNano":"71000000000","endTimeUnixNano":"79000000000","attributes":[{"key":"iteration","value":{"intValue":"7"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000051","name":"produce-1","kind":4,"startTimeUnixNano":"71100000000","endTimeUnixNano":"79100000000","attributes":[{"key":"iteration","value":{"intValue":"7"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000052","name":"produce-2","kind":4,"startTimeUnixNano":"71200000000","endTimeUnixNano":"79200000000","attributes":[{"key":"iteration","value":{"intValue":"7"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000005a","name":"produce-0","kind":4,"startTimeUnixNano":"81000000000","endTimeUnixNano":"89000000000","attributes":[{"key":"iteration","value":{"intValue":"8"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000005b","name":"produce-1","kind":4,"startTimeUnixNano":"81100000000","endTimeUnixNano":"89100000000","attributes":[{"key":"iteration","value":{"intValue":"8"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000005c","name":"produce-2","kind":4,"startTimeUnixNano":"81200000000","endTimeUnixNano":"89200000000","attributes":[{"key":"iteration","value":{"intValue":"8"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000064","name":"produce-0","kind":4,"startTimeUnixNano":"91000000000","endTimeUnixNano":"99000000000","attributes":[{"key":"iteration","value":{"intValue":"9"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000065","name":"produce-1","kind":4,"startTimeUnixNano":"91100000000","endTimeUnixNano":"99100000000","attributes":[{"key":"iteration","value":{"intValue":"9"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000066","name":"produce-2","kind":4,"startTimeUnixNano":"91200000000","endTimeUnixNano":"99200000000","attributes":[{"key":"iteration","value":{"intValue":"9"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000006e","name":"produce-0","kind":4,"startTimeUnixNano":"101000000000","endTimeUnixNano":"109000000000","attributes":[{"key":"iteration","value":{"intValue":"10"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000006f","name":"produce-1","kind":4,"startTimeUnixNano":"101100000000","endTimeUnixNano":"109100000000","attributes":[{"key":"iteration","value":{"intValue":"10"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000070","name":"produce-2","kind":4,"startTimeUnixNano":"101200000000","endTimeUnixNano":"109200000000","attributes":[{"key":"iteration","value":{"intValue":"10"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000078","name":"produce-0","kind":4,"startTimeUnixNano":"111000000000","endTimeUnixNano":"119000000000","attributes":[{"key":"iteration","value":{"intValue":"11"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000079","name":"produce-1","kind":4,"startTimeUnixNano":"111100000000","endTimeUnixNano":"119100000000","attributes":[{"key":"iteration","value":{"intValue":"11"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000007a","name":"produce-2","kind":4,"startTimeUnixNano":"111200000000","endTimeUnixNano":"119200000000","attributes":[{"key":"iteration","value":{"intValue":"11"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000082","name":"produce-0","kind":4,"startTimeUnixNano":"121000000000","endTimeUnixNano":"129000000000","attributes":[{"key":"iteration","value":{"intValue":"12"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000083","name":"produce-1","kind":4,"startTimeUnixNano":"121100000000","endTimeUnixNano":"129100000000","attributes":[{"key":"iteration","value":{"intValue":"12"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000084","name":"produce-2","kind":4,"startTimeUnixNano":"121200000000","endTimeUnixNano":"129200000000","attributes":[{"key":"iteration","value":{"intValue":"12"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000008c","name":"produce-0","kind":4,"startTimeUnixNano":"131000000000","endTimeUnixNano":"139000000000","attributes":[{"key":"iteration","value":{"intValue":"13"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000008d","name":"produce-1","kind":4,"startTimeUnixNano":"131100000000","endTimeUnixNano":"139100000000","attributes":[{"key":"iteration","value":{"intValue":"13"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000008e","name":"produce-2","kind":4,"startTimeUnixNano":"131200000000","endTimeUnixNano":"139200000000","attributes":[{"key":"iteration","value":{"intValue":"13"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000096","name":"produce-0","kind":4,"startTimeUnixNano":"141000000000","endTimeUnixNano":"149000000000","attributes":[{"key":"iteration","value":{"intValue":"14"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000097","name":"produce-1","kind":4,"startTimeUnixNano":"141100000000","endTimeUnixNano":"149100000000","attributes":[{"key":"iteration","value":{"intValue":"14"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000098","name":"produce-2","kind":4,"startTimeUnixNano":"141200000000","endTimeUnixNano":"149200000000","attributes":[{"key":"iteration","value":{"intValue":"14"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a0","name":"produce-0","kind":4,"startTimeUnixNano":"151000000000","endTimeUnixNano":"159000000000","attributes":[{"key":"iteration","value":{"intValue":"15"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a1","name":"produce-1","kind":4,"startTimeUnixNano":"151100000000","endTimeUnixNano":"159100000000","attributes":[{"key":"iteration","value":{"intValue":"15"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a2","name":"produce-2","kind":4,"startTimeUnixNano":"151200000000","endTimeUnixNano":"159200000000","attributes":[{"key":"iteration","value":{"intValue":"15"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000aa","name":"produce-0","kind":4,"startTimeUnixNano":"161000000000","endTimeUnixNano":"169000000000","attributes":[{"key":"iteration","value":{"intValue":"16"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ab","name":"produce-1","kind":4,"startTimeUnixNano":"161100000000","endTimeUnixNano":"169100000000","attributes":[{"key":"iteration","value":{"intValue":"16"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ac","name":"produce-2","kind":4,"startTimeUnixNano":"161200000000","endTimeUnixNano":"169200000000","attributes":[{"key":"iteration","value":{"intValue":"16"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b4","name":"produce-0","kind":4,"startTimeUnixNano":"171000000000","endTimeUnixNano":"179000000000","attributes":[{"key":"iteration","value":{"intValue":"17"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b5","name":"produce-1","kind":4,"startTimeUnixNano":"171100000000","endTimeUnixNano":"179100000000","attributes":[{"key":"iteration","value":{"intValue":"17"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b6","name":"produce-2","kind":4,"startTimeUnixNano":"171200000000","endTimeUnixNano":"179200000000","attributes":[{"key":"iteration","value":{"intValue":"17"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000be","name":"produce-0","kind":4,"startTimeUnixNano":"181000000000","endTimeUnixNano":"189000000000","attributes":[{"key":"iteration","value":{"intValue":"18"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000bf","name":"produce-1","kind":4,"startTimeUnixNano":"181100000000","endTimeUnixNano":"189100000000","attributes":[{"key":"iteration","value":{"intValue":"18"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c0","name":"produce-2","kind":4,"startTimeUnixNano":"181200000000","endTimeUnixNano":"189200000000","attributes":[{"key":"iteration","value":{"intValue":"18"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c8","name":"produce-0","kind":4,"startTimeUnixNano":"191000000000","endTimeUnixNano":"199000000000","attributes":[{"key":"iteration","value":{"intValue":"19"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c9","name":"produce-1","kind":4,"startTimeUnixNano":"191100000000","endTimeUnixNano":"199100000000","attributes":[{"key":"iteration","value":{"intValue":"19"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ca","name":"produce-2","kind":4,"startTimeUnixNano":"191200000000","endTimeUnixNano":"199200000000","attributes":[{"key":"iteration","value":{"intValue":"19"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d2","name":"produce-0","kind":4,"startTimeUnixNano":"201000000000","endTimeUnixNano":"209000000000","attributes":[{"key":"iteration","value":{"intValue":"20"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d3","name":"produce-1","kind":4,"startTimeUnixNano":"201100000000","endTimeUnixNano":"209100000000","attributes":[{"key":"iteration","value":{"intValue":"20"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d4","name":"produce-2","kind":4,"startTimeUnixNano":"201200000000","endTimeUnixNano":"209200000000","attributes":[{"key":"iteration","value":{"intValue":"20"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000dc","name":"produce-0","kind":4,"startTimeUnixNano":"211000000000","endTimeUnixNano":"219000000000","attributes":[{"key":"iteration","value":{"intValue":"21"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000dd","name":"produce-1","kind":4,"startTimeUnixNano":"211100000000","endTimeUnixNano":"219100000000","attributes":[{"key":"iteration","value":{"intValue":"21"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000de","name":"produce-2","kind":4,"startTimeUnixNano":"211200000000","endTimeUnixNano":"219200000000","attributes":[{"key":"iteration","value":{"intValue":"21"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e6","name":"produce-0","kind":4,"startTimeUnixNano":"221000000000","endTimeUnixNano":"229000000000","attributes":[{"key":"iteration","value":{"intValue":"22"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e7","name":"produce-1","kind":4,"startTimeUnixNano":"221100000000","endTimeUnixNano":"229100000000","attributes":[{"key":"iteration","value":{"intValue":"22"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e8","name":"produce-2","kind":4,"startTimeUnixNano":"221200000000","endTimeUnixNano":"229200000000","attributes":[{"key":"iteration","value":{"intValue":"22"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f0","name":"produce-0","kind":4,"startTimeUnixNano":"231000000000","endTimeUnixNano":"239000000000","attributes":[{"key":"iteration","value":{"intValue":"23"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f1","name":"produce-1","kind":4,"startTimeUnixNano":"231100000000","endTimeUnixNano":"239100000000","attributes":[{"key":"iteration","value":{"intValue":"23"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f2","name":"produce-2","kind":4,"startTimeUnixNano":"231200000000","endTimeUnixNano":"239200000000","attributes":[{"key":"iteration","value":{"intValue":"23"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000fa","name":"produce-0","kind":4,"startTimeUnixNano":"241000000000","endTimeUnixNano":"249000000000","attributes":[{"key":"iteration","value":{"intValue":"24"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000fb","name":"produce-1","kind":4,"startTimeUnixNano":"241100000000","endTimeUnixNano":"249100000000","attributes":[{"key":"iteration","value":{"intValue":"24"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000fc","name":"produce-2","kind":4,"startTimeUnixNano":"241200000000","endTimeUnixNano":"249200000000","attributes":[{"key":"iteration","value":{"intValue":"24"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000104","name":"produce-0","kind":4,"startTimeUnixNano":"251000000000","endTimeUnixNano":"259000000000","attributes":[{"key":"iteration","value":{"intValue":"25"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000105","name":"produce-1","kind":4,"startTimeUnixNano":"251100000000","endTimeUnixNano":"259100000000","attributes":[{"key":"iteration","value":{"intValue":"25"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000106","name":"produce-2","kind":4,"startTimeUnixNano":"251200000000","endTimeUnixNano":"259200000000","attributes":[{"key":"iteration","value":{"intValue":"25"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000010e","name":"produce-0","kind":4,"startTimeUnixNano":"261000000000","endTimeUnixNano":"269000000000","attributes":[{"key":"iteration","value":{"intValue":"26"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000010f","name":"produce-1","kind":4,"startTimeUnixNano":"261100000000","endTimeUnixNano":"269100000000","attributes":[{"key":"iteration","value":{"intValue":"26"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000110","name":"produce-2","kind":4,"startTimeUnixNano":"261200000000","endTimeUnixNano":"269200000000","attributes":[{"key":"iteration","value":{"intValue":"26"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000118","name":"produce-0","kind":4,"startTimeUnixNano":"271000000000","endTimeUnixNano":"279000000000","attributes":[{"key":"iteration","value":{"intValue":"27"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000119","name":"produce-1","kind":4,"startTimeUnixNano":"271100000000","endTimeUnixNano":"279100000000","attributes":[{"key":"iteration","value":{"intValue":"27"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000011a","name":"produce-2","kind":4,"startTimeUnixNano":"271200000000","endTimeUnixNano":"279200000000","attributes":[{"key":"iteration","value":{"intValue":"27"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000122","name":"produce-0","kind":4,"startTimeUnixNano":"281000000000","endTimeUnixNano":"289000000000","attributes":[{"key":"iteration","value":{"intValue":"28"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000123","name":"produce-1","kind":4,"startTimeUnixNano":"281100000000","endTimeUnixNano":"289100000000","attributes":[{"key":"iteration","value":{"intValue":"28"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000124","name":"produce-2","kind":4,"startTimeUnixNano":"281200000000","endTimeUnixNano":"289200000000","attributes":[{"key":"iteration","value":{"intValue":"28"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000012c","name":"produce-0","kind":4,"startTimeUnixNano":"291000000000","endTimeUnixNano":"299000000000","attributes":[{"key":"iteration","value":{"intValue":"29"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000012d","name":"produce-1","kind":4,"startTimeUnixNano":"291100000000","endTimeUnixNano":"299100000000","attributes":[{"key":"iteration","value":{"intValue":"29"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000012e","name":"produce-2","kind":4,"startTimeUnixNano":"291200000000","endTimeUnixNano":"299200000000","attributes":[{"key":"iteration","value":{"intValue":"29"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000136","name":"produce-0","kind":4,"startTimeUnixNano":"301000000000","endTimeUnixNano":"309000000000","attributes":[{"key":"iteration","value":{"intValue":"30"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000137","name":"produce-1","kind":4,"startTimeUnixNano":"301100000000","endTimeUnixNano":"309100000000","attributes":[{"key":"iteration","value":{"intValue":"30"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000138","name":"produce-2","kind":4,"startTimeUnixNano":"301200000000","endTimeUnixNano":"309200000000","attributes":[{"key":"iteration","value":{"intValue":"30"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000140","name":"produce-0","kind":4,"startTimeUnixNano":"311000000000","endTimeUnixNano":"319000000000","attributes":[{"key":"iteration","value":{"intValue":"31"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000141","name":"produce-1","kind":4,"startTimeUnixNano":"311100000000","endTimeUnixNano":"319100000000","attributes":[{"key":"iteration","value":{"intValue":"31"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000142","name":"produce-2","kind":4,"startTimeUnixNano":"311200000000","endTimeUnixNano":"319200000000","attributes":[{"key":"iteration","value":{"intValue":"31"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000014a","name":"produce-0","kind":4,"startTimeUnixNano":"321000000000","endTimeUnixNano":"329000000000","attributes":[{"key":"iteration","value":{"intValue":"32"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000014b","name":"produce-1","kind":4,"startTimeUnixNano":"321100000000","endTimeUnixNano":"329100000000","attributes":[{"key":"iteration","value":{"intValue":"32"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000014c","name":"produce-2","kind":4,"startTimeUnixNano":"321200000000","endTimeUnixNano":"329200000000","attributes":[{"key":"iteration","value":{"intValue":"32"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000154","name":"produce-0","kind":4,"startTimeUnixNano":"331000000000","endTimeUnixNano":"339000000000","attributes":[{"key":"iteration","value":{"intValue":"33"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000155","name":"produce-1","kind":4,"startTimeUnixNano":"331100000000","endTimeUnixNano":"339100000000","attributes":[{"key":"iteration","value":{"intValue":"33"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000156","name":"produce-2","kind":4,"startTimeUnixNano":"331200000000","endTimeUnixNano":"339200000000","attributes":[{"key":"iteration","value":{"intValue":"33"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000015e","name":"produce-0","kind":4,"startTimeUnixNano":"341000000000","endTimeUnixNano":"349000000000","attributes":[{"key":"iteration","value":{"intValue":"34"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000015f","name":"produce-1","kind":4,"startTimeUnixNano":"341100000000","endTimeUnixNano":"349100000000","attributes":[{"key":"iteration","value":{"intValue":"34"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000160","name":"produce-2","kind":4,"startTimeUnixNano":"341200000000","endTimeUnixNano":"349200000000","attributes":[{"key":"iteration","value":{"intValue":"34"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000168","name":"produce-0","kind":4,"startTimeUnixNano":"351000000000","endTimeUnixNano":"359000000000","attributes":[{"key":"iteration","value":{"intValue":"35"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000169","name":"produce-1","kind":4,"startTimeUnixNano":"351100000000","endTimeUnixNano":"359100000000","attributes":[{"key":"iteration","value":{"intValue":"35"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000016a","name":"produce-2","kind":4,"startTimeUnixNano":"351200000000","endTimeUnixNano":"359200000000","attributes":[{"key":"iteration","value":{"intValue":"35"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000172","name":"produce-0","kind":4,"startTimeUnixNano":"361000000000","endTimeUnixNano":"369000000000","attributes":[{"key":"iteration","value":{"intValue":"36"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000173","name":"produce-1","kind":4,"startTimeUnixNano":"361100000000","endTimeUnixNano":"369100000000","attributes":[{"key":"iteration","value":{"intValue":"36"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000174","name":"produce-2","kind":4,"startTimeUnixNano":"361200000000","endTimeUnixNano":"369200000000","attributes":[{"key":"iteration","value":{"intValue":"36"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000017c","name":"produce-0","kind":4,"startTimeUnixNano":"371000000000","endTimeUnixNano":"379000000000","attributes":[{"key":"iteration","value":{"intValue":"37"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000017d","name":"produce-1","kind":4,"startTimeUnixNano":"371100000000","endTimeUnixNano":"379100000000","attributes":[{"key":"iteration","value":{"intValue":"37"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000017e","name":"produce-2","kind":4,"startTimeUnixNano":"371200000000","endTimeUnixNano":"379200000000","attributes":[{"key":"iteration","value":{"intValue":"37"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000186","name":"produce-0","kind":4,"startTimeUnixNano":"381000000000","endTimeUnixNano":"389000000000","attributes":[{"key":"iteration","value":{"intValue":"38"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000187","name":"produce-1","kind":4,"startTimeUnixNano":"381100000000","endTimeUnixNano":"389100000000","attributes":[{"key":"iteration","value":{"intValue":"38"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000188","name":"produce-2","kind":4,"startTimeUnixNano":"381200000000","endTimeUnixNano":"389200000000","attributes":[{"key":"iteration","value":{"intValue":"38"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000190","name":"produce-0","kind":4,"startTimeUnixNano":"391000000000","endTimeUnixNano":"399000000000","attributes":[{"key":"iteration","value":{"intValue":"39"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000191","name":"produce-1","kind":4,"startTimeUnixNano":"391100000000","endTimeUnixNano":"399100000000","attributes":[{"key":"iteration","value":{"intValue":"39"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000192","name":"produce-2","kind":4,"startTimeUnixNano":"391200000000","endTimeUnixNano":"399200000000","attributes":[{"key":"iteration","value":{"intValue":"39"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000019a","name":"produce-0","kind":4,"startTimeUnixNano":"401000000000","endTimeUnixNano":"409000000000","attributes":[{"key":"iteration","value":{"intValue":"40"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000019b","name":"produce-1","kind":4,"startTimeUnixNano":"401100000000","endTimeUnixNano":"409100000000","attributes":[{"key":"iteration","value":{"intValue":"40"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000019c","name":"produce-2","kind":4,"startTimeUnixNano":"401200000000","endTimeUnixNano":"409200000000","attributes":[{"key":"iteration","value":{"intValue":"40"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a4","name":"produce-0","kind":4,"startTimeUnixNano":"411000000000","endTimeUnixNano":"419000000000","attributes":[{"key":"iteration","value":{"intValue":"41"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a5","name":"produce-1","kind":4,"startTimeUnixNano":"411100000000","endTimeUnixNano":"419100000000","attributes":[{"key":"iteration","value":{"intValue":"41"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a6","name":"produce-2","kind":4,"startTimeUnixNano":"411200000000","endTimeUnixNano":"419200000000","attributes":[{"key":"iteration","value":{"intValue":"41"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ae","name":"produce-0","kind":4,"startTimeUnixNano":"421000000000","endTimeUnixNano":"429000000000","attributes":[{"key":"iteration","value":{"intValue":"42"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001af","name":"produce-1","kind":4,"startTimeUnixNano":"421100000000","endTimeUnixNano":"429100000000","attributes":[{"key":"iteration","value":{"intValue":"42"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b0","name":"produce-2","kind":4,"startTimeUnixNano":"421200000000","endTimeUnixNano":"429200000000","attributes":[{"key":"iteration","value":{"intValue":"42"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b8","name":"produce-0","kind":4,"startTimeUnixNano":"431000000000","endTimeUnixNano":"439000000000","attributes":[{"key":"iteration","value":{"intValue":"43"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b9","name":"produce-1","kind":4,"startTimeUnixNano":"431100000000","endTimeUnixNano":"439100000000","attributes":[{"key":"iteration","value":{"intValue":"43"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ba","name":"produce-2","kind":4,"startTimeUnixNano":"431200000000","endTimeUnixNano":"439200000000","attributes":[{"key":"iteration","value":{"intValue":"43"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c2","name":"produce-0","kind":4,"startTimeUnixNano":"441000000000","endTimeUnixNano":"449000000000","attributes":[{"key":"iteration","value":{"intValue":"44"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c3","name":"produce-1","kind":4,"startTimeUnixNano":"441100000000","endTimeUnixNano":"449100000000","attributes":[{"key":"iteration","value":{"intValue":"44"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c4","name":"produce-2","kind":4,"startTimeUnixNano":"441200000000","endTimeUnixNano":"449200000000","attributes":[{"key":"iteration","value":{"intValue":"44"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001cc","name":"produce-0","kind":4,"startTimeUnixNano":"451000000000","endTimeUnixNano":"459000000000","attributes":[{"key":"iteration","value":{"intValue":"45"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001cd","name":"produce-1","kind":4,"startTimeUnixNano":"451100000000","endTimeUnixNano":"459100000000","attributes":[{"key":"iteration","value":{"intValue":"45"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ce","name":"produce-2","kind":4,"startTimeUnixNano":"451200000000","endTimeUnixNano":"459200000000","attributes":[{"key":"iteration","value":{"intValue":"45"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d6","name":"produce-0","kind":4,"startTimeUnixNano":"461000000000","endTimeUnixNano":"469000000000","attributes":[{"key":"iteration","value":{"intValue":"46"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d7","name":"produce-1","kind":4,"startTimeUnixNano":"461100000000","endTimeUnixNano":"469100000000","attributes":[{"key":"iteration","value":{"intValue":"46"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d8","name":"produce-2","kind":4,"startTimeUnixNano":"461200000000","endTimeUnixNano":"469200000000","attributes":[{"key":"iteration","value":{"intValue":"46"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e0","name":"produce-0","kind":4,"startTimeUnixNano":"471000000000","endTimeUnixNano":"479000000000","attributes":[{"key":"iteration","value":{"intValue":"47"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e1","name":"produce-1","kind":4,"startTimeUnixNano":"471100000000","endTimeUnixNano":"479100000000","attributes":[{"key":"iteration","value":{"intValue":"47"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e2","name":"produce-2","kind":4,"startTimeUnixNano":"471200000000","endTimeUnixNano":"479200000000","attributes":[{"key":"iteration","value":{"intValue":"47"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ea","name":"produce-0","kind":4,"startTimeUnixNano":"481000000000","endTimeUnixNano":"489000000000","attributes":[{"key":"iteration","value":{"intValue":"48"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001eb","name":"produce-1","kind":4,"startTimeUnixNano":"481100000000","endTimeUnixNano":"489100000000","attributes":[{"key":"iteration","value":{"intValue":"48"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ec","name":"produce-2","kind":4,"startTimeUnixNano":"481200000000","endTimeUnixNano":"489200000000","attributes":[{"key":"iteration","value":{"intValue":"48"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f4","name":"produce-0","kind":4,"startTimeUnixNano":"491000000000","endTimeUnixNano":"499000000000","attributes":[{"key":"iteration","value":{"intValue":"49"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f5","name":"produce-1","kind":4,"startTimeUnixNano":"491100000000","endTimeUnixNano":"499100000000","attributes":[{"key":"iteration","value":{"intValue":"49"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f6","name":"produce-2","kind":4,"startTimeUnixNano":"491200000000","endTimeUnixNano":"499200000000","attributes":[{"key":"iteration","value":{"intValue":"49"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001fe","name":"produce-0","kind":4,"startTimeUnixNano":"501000000000","endTimeUnixNano":"509000000000","attributes":[{"key":"iteration","value":{"intValue":"50"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ff","name":"produce-1","kind":4,"startTimeUnixNano":"501100000000","endTimeUnixNano":"509100000000","attributes":[{"key":"iteration","value":{"intValue":"50"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000200","name":"produce-2","kind":4,"startTimeUnixNano":"501200000000","endTimeUnixNano":"509200000000","attributes":[{"key":"iteration","value":{"intValue":"50"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000208","name":"produce-0","kind":4,"startTimeUnixNano":"511000000000","endTimeUnixNano":"519000000000","attributes":[{"key":"iteration","value":{"intValue":"51"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000209","name":"produce-1","kind":4,"startTimeUnixNano":"511100000000","endTimeUnixNano":"519100000000","attributes":[{"key":"iteration","value":{"intValue":"51"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000020a","name":"produce-2","kind":4,"startTimeUnixNano":"511200000000","endTimeUnixNano":"519200000000","attributes":[{"key":"iteration","value":{"intValue":"51"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000212","name":"produce-0","kind":4,"startTimeUnixNano":"521000000000","endTimeUnixNano":"529000000000","attributes":[{"key":"iteration","value":{"intValue":"52"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000213","name":"produce-1","kind":4,"startTimeUnixNano":"521100000000","endTimeUnixNano":"529100000000","attributes":[{"key":"iteration","value":{"intValue":"52"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000214","name":"produce-2","kind":4,"startTimeUnixNano":"521200000000","endTimeUnixNano":"529200000000","attributes":[{"key":"iteration","value":{"intValue":"52"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000021c","name":"produce-0","kind":4,"startTimeUnixNano":"531000000000","endTimeUnixNano":"539000000000","attributes":[{"key":"iteration","value":{"intValue":"53"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000021d","name":"produce-1","kind":4,"startTimeUnixNano":"531100000000","endTimeUnixNano":"539100000000","attributes":[{"key":"iteration","value":{"intValue":"53"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000021e","name":"produce-2","kind":4,"startTimeUnixNano":"531200000000","endTimeUnixNano":"539200000000","attributes":[{"key":"iteration","value":{"intValue":"53"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000226","name":"produce-0","kind":4,"startTimeUnixNano":"541000000000","endTimeUnixNano":"549000000000","attributes":[{"key":"iteration","value":{"intValue":"54"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000227","name":"produce-1","kind":4,"startTimeUnixNano":"541100000000","endTimeUnixNano":"549100000000","attributes":[{"key":"iteration","value":{"intValue":"54"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000228","name":"produce-2","kind":4,"startTimeUnixNano":"541200000000","endTimeUnixNano":"549200000000","attributes":[{"key":"iteration","value":{"intValue":"54"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000230","name":"produce-0","kind":4,"startTimeUnixNano":"551000000000","endTimeUnixNano":"559000000000","attributes":[{"key":"iteration","value":{"intValue":"55"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000231","name":"produce-1","kind":4,"startTimeUnixNano":"551100000000","endTimeUnixNano":"559100000000","attributes":[{"key":"iteration","value":{"intValue":"55"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000232","name":"produce-2","kind":4,"startTimeUnixNano":"551200000000","endTimeUnixNano":"559200000000","attributes":[{"key":"iteration","value":{"intValue":"55"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000023a","name":"produce-0","kind":4,"startTimeUnixNano":"561000000000","endTimeUnixNano":"569000000000","attributes":[{"key":"iteration","value":{"intValue":"56"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000023b","name":"produce-1","kind":4,"startTimeUnixNano":"561100000000","endTimeUnixNano":"569100000000","attributes":[{"key":"iteration","value":{"intValue":"56"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000023c","name":"produce-2","kind":4,"startTimeUnixNano":"561200000000","endTimeUnixNano":"569200000000","attributes":[{"key":"iteration","value":{"intValue":"56"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000244","name":"produce-0","kind":4,"startTimeUnixNano":"571000000000","endTimeUnixNano":"579000000000","attributes":[{"key":"iteration","value":{"intValue":"57"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000245","name":"produce-1","kind":4,"startTimeUnixNano":"571100000000","endTimeUnixNano":"579100000000","attributes":[{"key":"iteration","value":{"intValue":"57"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000246","name":"produce-2","kind":4,"startTimeUnixNano":"571200000000","endTimeUnixNano":"579200000000","attributes":[{"key":"iteration","value":{"intValue":"57"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000024e","name":"produce-0","kind":4,"startTimeUnixNano":"581000000000","endTimeUnixNano":"589000000000","attributes":[{"key":"iteration","value":{"intValue":"58"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000024f","name":"produce-1","kind":4,"startTimeUnixNano":"581100000000","endTimeUnixNano":"589100000000","attributes":[{"key":"iteration","value":{"intValue":"58"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000250","name":"produce-2","kind":4,"startTimeUnixNano":"581200000000","endTimeUnixNano":"589200000000","attributes":[{"key":"iteration","value":{"intValue":"58"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000258","name":"produce-0","kind":4,"startTimeUnixNano":"591000000000","endTimeUnixNano":"599000000000","attributes":[{"key":"iteration","value":{"intValue":"59"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"10"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000259","name":"produce-1","kind":4,"startTimeUnixNano":"591100000000","endTimeUnixNano":"599100000000","attributes":[{"key":"iteration","value":{"intValue":"59"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"11"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000025a","name":"produce-2","kind":4,"startTimeUnixNano":"591200000000","endTimeUnixNano":"599200000000","attributes":[{"key":"iteration","value":{"intValue":"59"}},{"key":"messaging.system","value":{"stringValue":"kafka"}},{"key":"thread.id","value":{"intValue":"12"}}],"status":{"code":1}}
+ ]}]}
+, {"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"proxy-service"}}]},
+ "scopeSpans":[{"scope":{"name":"trace-event-logger-test"},"spans":[
+
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000000d","parentSpanId":"000000000000000a","name":"proxy-0","kind":1,"startTimeUnixNano":"2000000000","endTimeUnixNano":"7000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000000e","parentSpanId":"000000000000000b","name":"proxy-1","kind":1,"startTimeUnixNano":"2100000000","endTimeUnixNano":"7100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000000f","parentSpanId":"000000000000000c","name":"proxy-2","kind":1,"startTimeUnixNano":"2200000000","endTimeUnixNano":"7200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000017","parentSpanId":"0000000000000014","name":"proxy-0","kind":1,"startTimeUnixNano":"12000000000","endTimeUnixNano":"17000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000018","parentSpanId":"0000000000000015","name":"proxy-1","kind":1,"startTimeUnixNano":"12100000000","endTimeUnixNano":"17100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000019","parentSpanId":"0000000000000016","name":"proxy-2","kind":1,"startTimeUnixNano":"12200000000","endTimeUnixNano":"17200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000021","parentSpanId":"000000000000001e","name":"proxy-0","kind":1,"startTimeUnixNano":"22000000000","endTimeUnixNano":"27000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000022","parentSpanId":"000000000000001f","name":"proxy-1","kind":1,"startTimeUnixNano":"22100000000","endTimeUnixNano":"27100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000023","parentSpanId":"0000000000000020","name":"proxy-2","kind":1,"startTimeUnixNano":"22200000000","endTimeUnixNano":"27200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000002b","parentSpanId":"0000000000000028","name":"proxy-0","kind":1,"startTimeUnixNano":"32000000000","endTimeUnixNano":"37000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000002c","parentSpanId":"0000000000000029","name":"proxy-1","kind":1,"startTimeUnixNano":"32100000000","endTimeUnixNano":"37100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000002d","parentSpanId":"000000000000002a","name":"proxy-2","kind":1,"startTimeUnixNano":"32200000000","endTimeUnixNano":"37200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000035","parentSpanId":"0000000000000032","name":"proxy-0","kind":1,"startTimeUnixNano":"42000000000","endTimeUnixNano":"47000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000036","parentSpanId":"0000000000000033","name":"proxy-1","kind":1,"startTimeUnixNano":"42100000000","endTimeUnixNano":"47100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000037","parentSpanId":"0000000000000034","name":"proxy-2","kind":1,"startTimeUnixNano":"42200000000","endTimeUnixNano":"47200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000003f","parentSpanId":"000000000000003c","name":"proxy-0","kind":1,"startTimeUnixNano":"52000000000","endTimeUnixNano":"57000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000040","parentSpanId":"000000000000003d","name":"proxy-1","kind":1,"startTimeUnixNano":"52100000000","endTimeUnixNano":"57100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000041","parentSpanId":"000000000000003e","name":"proxy-2","kind":1,"startTimeUnixNano":"52200000000","endTimeUnixNano":"57200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000049","parentSpanId":"0000000000000046","name":"proxy-0","kind":1,"startTimeUnixNano":"62000000000","endTimeUnixNano":"67000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000004a","parentSpanId":"0000000000000047","name":"proxy-1","kind":1,"startTimeUnixNano":"62100000000","endTimeUnixNano":"67100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000004b","parentSpanId":"0000000000000048","name":"proxy-2","kind":1,"startTimeUnixNano":"62200000000","endTimeUnixNano":"67200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000053","parentSpanId":"0000000000000050","name":"proxy-0","kind":1,"startTimeUnixNano":"72000000000","endTimeUnixNano":"77000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000054","parentSpanId":"0000000000000051","name":"proxy-1","kind":1,"startTimeUnixNano":"72100000000","endTimeUnixNano":"77100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000055","parentSpanId":"0000000000000052","name":"proxy-2","kind":1,"startTimeUnixNano":"72200000000","endTimeUnixNano":"77200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000005d","parentSpanId":"000000000000005a","name":"proxy-0","kind":1,"startTimeUnixNano":"82000000000","endTimeUnixNano":"87000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000005e","parentSpanId":"000000000000005b","name":"proxy-1","kind":1,"startTimeUnixNano":"82100000000","endTimeUnixNano":"87100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000005f","parentSpanId":"000000000000005c","name":"proxy-2","kind":1,"startTimeUnixNano":"82200000000","endTimeUnixNano":"87200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000067","parentSpanId":"0000000000000064","name":"proxy-0","kind":1,"startTimeUnixNano":"92000000000","endTimeUnixNano":"97000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000068","parentSpanId":"0000000000000065","name":"proxy-1","kind":1,"startTimeUnixNano":"92100000000","endTimeUnixNano":"97100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000069","parentSpanId":"0000000000000066","name":"proxy-2","kind":1,"startTimeUnixNano":"92200000000","endTimeUnixNano":"97200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000071","parentSpanId":"000000000000006e","name":"proxy-0","kind":1,"startTimeUnixNano":"102000000000","endTimeUnixNano":"107000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000072","parentSpanId":"000000000000006f","name":"proxy-1","kind":1,"startTimeUnixNano":"102100000000","endTimeUnixNano":"107100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000073","parentSpanId":"0000000000000070","name":"proxy-2","kind":1,"startTimeUnixNano":"102200000000","endTimeUnixNano":"107200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000007b","parentSpanId":"0000000000000078","name":"proxy-0","kind":1,"startTimeUnixNano":"112000000000","endTimeUnixNano":"117000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000007c","parentSpanId":"0000000000000079","name":"proxy-1","kind":1,"startTimeUnixNano":"112100000000","endTimeUnixNano":"117100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000007d","parentSpanId":"000000000000007a","name":"proxy-2","kind":1,"startTimeUnixNano":"112200000000","endTimeUnixNano":"117200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000085","parentSpanId":"0000000000000082","name":"proxy-0","kind":1,"startTimeUnixNano":"122000000000","endTimeUnixNano":"127000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000086","parentSpanId":"0000000000000083","name":"proxy-1","kind":1,"startTimeUnixNano":"122100000000","endTimeUnixNano":"127100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000087","parentSpanId":"0000000000000084","name":"proxy-2","kind":1,"startTimeUnixNano":"122200000000","endTimeUnixNano":"127200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000008f","parentSpanId":"000000000000008c","name":"proxy-0","kind":1,"startTimeUnixNano":"132000000000","endTimeUnixNano":"137000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000090","parentSpanId":"000000000000008d","name":"proxy-1","kind":1,"startTimeUnixNano":"132100000000","endTimeUnixNano":"137100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000091","parentSpanId":"000000000000008e","name":"proxy-2","kind":1,"startTimeUnixNano":"132200000000","endTimeUnixNano":"137200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000099","parentSpanId":"0000000000000096","name":"proxy-0","kind":1,"startTimeUnixNano":"142000000000","endTimeUnixNano":"147000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000009a","parentSpanId":"0000000000000097","name":"proxy-1","kind":1,"startTimeUnixNano":"142100000000","endTimeUnixNano":"147100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000009b","parentSpanId":"0000000000000098","name":"proxy-2","kind":1,"startTimeUnixNano":"142200000000","endTimeUnixNano":"147200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a3","parentSpanId":"00000000000000a0","name":"proxy-0","kind":1,"startTimeUnixNano":"152000000000","endTimeUnixNano":"157000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a4","parentSpanId":"00000000000000a1","name":"proxy-1","kind":1,"startTimeUnixNano":"152100000000","endTimeUnixNano":"157100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a5","parentSpanId":"00000000000000a2","name":"proxy-2","kind":1,"startTimeUnixNano":"152200000000","endTimeUnixNano":"157200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ad","parentSpanId":"00000000000000aa","name":"proxy-0","kind":1,"startTimeUnixNano":"162000000000","endTimeUnixNano":"167000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ae","parentSpanId":"00000000000000ab","name":"proxy-1","kind":1,"startTimeUnixNano":"162100000000","endTimeUnixNano":"167100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000af","parentSpanId":"00000000000000ac","name":"proxy-2","kind":1,"startTimeUnixNano":"162200000000","endTimeUnixNano":"167200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b7","parentSpanId":"00000000000000b4","name":"proxy-0","kind":1,"startTimeUnixNano":"172000000000","endTimeUnixNano":"177000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b8","parentSpanId":"00000000000000b5","name":"proxy-1","kind":1,"startTimeUnixNano":"172100000000","endTimeUnixNano":"177100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b9","parentSpanId":"00000000000000b6","name":"proxy-2","kind":1,"startTimeUnixNano":"172200000000","endTimeUnixNano":"177200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c1","parentSpanId":"00000000000000be","name":"proxy-0","kind":1,"startTimeUnixNano":"182000000000","endTimeUnixNano":"187000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c2","parentSpanId":"00000000000000bf","name":"proxy-1","kind":1,"startTimeUnixNano":"182100000000","endTimeUnixNano":"187100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c3","parentSpanId":"00000000000000c0","name":"proxy-2","kind":1,"startTimeUnixNano":"182200000000","endTimeUnixNano":"187200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000cb","parentSpanId":"00000000000000c8","name":"proxy-0","kind":1,"startTimeUnixNano":"192000000000","endTimeUnixNano":"197000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000cc","parentSpanId":"00000000000000c9","name":"proxy-1","kind":1,"startTimeUnixNano":"192100000000","endTimeUnixNano":"197100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000cd","parentSpanId":"00000000000000ca","name":"proxy-2","kind":1,"startTimeUnixNano":"192200000000","endTimeUnixNano":"197200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d5","parentSpanId":"00000000000000d2","name":"proxy-0","kind":1,"startTimeUnixNano":"202000000000","endTimeUnixNano":"207000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d6","parentSpanId":"00000000000000d3","name":"proxy-1","kind":1,"startTimeUnixNano":"202100000000","endTimeUnixNano":"207100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d7","parentSpanId":"00000000000000d4","name":"proxy-2","kind":1,"startTimeUnixNano":"202200000000","endTimeUnixNano":"207200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000df","parentSpanId":"00000000000000dc","name":"proxy-0","kind":1,"startTimeUnixNano":"212000000000","endTimeUnixNano":"217000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e0","parentSpanId":"00000000000000dd","name":"proxy-1","kind":1,"startTimeUnixNano":"212100000000","endTimeUnixNano":"217100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e1","parentSpanId":"00000000000000de","name":"proxy-2","kind":1,"startTimeUnixNano":"212200000000","endTimeUnixNano":"217200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e9","parentSpanId":"00000000000000e6","name":"proxy-0","kind":1,"startTimeUnixNano":"222000000000","endTimeUnixNano":"227000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ea","parentSpanId":"00000000000000e7","name":"proxy-1","kind":1,"startTimeUnixNano":"222100000000","endTimeUnixNano":"227100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000eb","parentSpanId":"00000000000000e8","name":"proxy-2","kind":1,"startTimeUnixNano":"222200000000","endTimeUnixNano":"227200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f3","parentSpanId":"00000000000000f0","name":"proxy-0","kind":1,"startTimeUnixNano":"232000000000","endTimeUnixNano":"237000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f4","parentSpanId":"00000000000000f1","name":"proxy-1","kind":1,"startTimeUnixNano":"232100000000","endTimeUnixNano":"237100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f5","parentSpanId":"00000000000000f2","name":"proxy-2","kind":1,"startTimeUnixNano":"232200000000","endTimeUnixNano":"237200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000fd","parentSpanId":"00000000000000fa","name":"proxy-0","kind":1,"startTimeUnixNano":"242000000000","endTimeUnixNano":"247000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000fe","parentSpanId":"00000000000000fb","name":"proxy-1","kind":1,"startTimeUnixNano":"242100000000","endTimeUnixNano":"247100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ff","parentSpanId":"00000000000000fc","name":"proxy-2","kind":1,"startTimeUnixNano":"242200000000","endTimeUnixNano":"247200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000107","parentSpanId":"0000000000000104","name":"proxy-0","kind":1,"startTimeUnixNano":"252000000000","endTimeUnixNano":"257000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000108","parentSpanId":"0000000000000105","name":"proxy-1","kind":1,"startTimeUnixNano":"252100000000","endTimeUnixNano":"257100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000109","parentSpanId":"0000000000000106","name":"proxy-2","kind":1,"startTimeUnixNano":"252200000000","endTimeUnixNano":"257200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000111","parentSpanId":"000000000000010e","name":"proxy-0","kind":1,"startTimeUnixNano":"262000000000","endTimeUnixNano":"267000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000112","parentSpanId":"000000000000010f","name":"proxy-1","kind":1,"startTimeUnixNano":"262100000000","endTimeUnixNano":"267100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000113","parentSpanId":"0000000000000110","name":"proxy-2","kind":1,"startTimeUnixNano":"262200000000","endTimeUnixNano":"267200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000011b","parentSpanId":"0000000000000118","name":"proxy-0","kind":1,"startTimeUnixNano":"272000000000","endTimeUnixNano":"277000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000011c","parentSpanId":"0000000000000119","name":"proxy-1","kind":1,"startTimeUnixNano":"272100000000","endTimeUnixNano":"277100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000011d","parentSpanId":"000000000000011a","name":"proxy-2","kind":1,"startTimeUnixNano":"272200000000","endTimeUnixNano":"277200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000125","parentSpanId":"0000000000000122","name":"proxy-0","kind":1,"startTimeUnixNano":"282000000000","endTimeUnixNano":"287000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000126","parentSpanId":"0000000000000123","name":"proxy-1","kind":1,"startTimeUnixNano":"282100000000","endTimeUnixNano":"287100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000127","parentSpanId":"0000000000000124","name":"proxy-2","kind":1,"startTimeUnixNano":"282200000000","endTimeUnixNano":"287200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000012f","parentSpanId":"000000000000012c","name":"proxy-0","kind":1,"startTimeUnixNano":"292000000000","endTimeUnixNano":"297000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000130","parentSpanId":"000000000000012d","name":"proxy-1","kind":1,"startTimeUnixNano":"292100000000","endTimeUnixNano":"297100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000131","parentSpanId":"000000000000012e","name":"proxy-2","kind":1,"startTimeUnixNano":"292200000000","endTimeUnixNano":"297200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000139","parentSpanId":"0000000000000136","name":"proxy-0","kind":1,"startTimeUnixNano":"302000000000","endTimeUnixNano":"307000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000013a","parentSpanId":"0000000000000137","name":"proxy-1","kind":1,"startTimeUnixNano":"302100000000","endTimeUnixNano":"307100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000013b","parentSpanId":"0000000000000138","name":"proxy-2","kind":1,"startTimeUnixNano":"302200000000","endTimeUnixNano":"307200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000143","parentSpanId":"0000000000000140","name":"proxy-0","kind":1,"startTimeUnixNano":"312000000000","endTimeUnixNano":"317000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000144","parentSpanId":"0000000000000141","name":"proxy-1","kind":1,"startTimeUnixNano":"312100000000","endTimeUnixNano":"317100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000145","parentSpanId":"0000000000000142","name":"proxy-2","kind":1,"startTimeUnixNano":"312200000000","endTimeUnixNano":"317200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000014d","parentSpanId":"000000000000014a","name":"proxy-0","kind":1,"startTimeUnixNano":"322000000000","endTimeUnixNano":"327000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000014e","parentSpanId":"000000000000014b","name":"proxy-1","kind":1,"startTimeUnixNano":"322100000000","endTimeUnixNano":"327100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000014f","parentSpanId":"000000000000014c","name":"proxy-2","kind":1,"startTimeUnixNano":"322200000000","endTimeUnixNano":"327200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000157","parentSpanId":"0000000000000154","name":"proxy-0","kind":1,"startTimeUnixNano":"332000000000","endTimeUnixNano":"337000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000158","parentSpanId":"0000000000000155","name":"proxy-1","kind":1,"startTimeUnixNano":"332100000000","endTimeUnixNano":"337100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000159","parentSpanId":"0000000000000156","name":"proxy-2","kind":1,"startTimeUnixNano":"332200000000","endTimeUnixNano":"337200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000161","parentSpanId":"000000000000015e","name":"proxy-0","kind":1,"startTimeUnixNano":"342000000000","endTimeUnixNano":"347000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000162","parentSpanId":"000000000000015f","name":"proxy-1","kind":1,"startTimeUnixNano":"342100000000","endTimeUnixNano":"347100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000163","parentSpanId":"0000000000000160","name":"proxy-2","kind":1,"startTimeUnixNano":"342200000000","endTimeUnixNano":"347200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000016b","parentSpanId":"0000000000000168","name":"proxy-0","kind":1,"startTimeUnixNano":"352000000000","endTimeUnixNano":"357000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000016c","parentSpanId":"0000000000000169","name":"proxy-1","kind":1,"startTimeUnixNano":"352100000000","endTimeUnixNano":"357100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000016d","parentSpanId":"000000000000016a","name":"proxy-2","kind":1,"startTimeUnixNano":"352200000000","endTimeUnixNano":"357200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000175","parentSpanId":"0000000000000172","name":"proxy-0","kind":1,"startTimeUnixNano":"362000000000","endTimeUnixNano":"367000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000176","parentSpanId":"0000000000000173","name":"proxy-1","kind":1,"startTimeUnixNano":"362100000000","endTimeUnixNano":"367100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000177","parentSpanId":"0000000000000174","name":"proxy-2","kind":1,"startTimeUnixNano":"362200000000","endTimeUnixNano":"367200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000017f","parentSpanId":"000000000000017c","name":"proxy-0","kind":1,"startTimeUnixNano":"372000000000","endTimeUnixNano":"377000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000180","parentSpanId":"000000000000017d","name":"proxy-1","kind":1,"startTimeUnixNano":"372100000000","endTimeUnixNano":"377100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000181","parentSpanId":"000000000000017e","name":"proxy-2","kind":1,"startTimeUnixNano":"372200000000","endTimeUnixNano":"377200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000189","parentSpanId":"0000000000000186","name":"proxy-0","kind":1,"startTimeUnixNano":"382000000000","endTimeUnixNano":"387000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000018a","parentSpanId":"0000000000000187","name":"proxy-1","kind":1,"startTimeUnixNano":"382100000000","endTimeUnixNano":"387100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000018b","parentSpanId":"0000000000000188","name":"proxy-2","kind":1,"startTimeUnixNano":"382200000000","endTimeUnixNano":"387200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000193","parentSpanId":"0000000000000190","name":"proxy-0","kind":1,"startTimeUnixNano":"392000000000","endTimeUnixNano":"397000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000194","parentSpanId":"0000000000000191","name":"proxy-1","kind":1,"startTimeUnixNano":"392100000000","endTimeUnixNano":"397100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000195","parentSpanId":"0000000000000192","name":"proxy-2","kind":1,"startTimeUnixNano":"392200000000","endTimeUnixNano":"397200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000019d","parentSpanId":"000000000000019a","name":"proxy-0","kind":1,"startTimeUnixNano":"402000000000","endTimeUnixNano":"407000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000019e","parentSpanId":"000000000000019b","name":"proxy-1","kind":1,"startTimeUnixNano":"402100000000","endTimeUnixNano":"407100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000019f","parentSpanId":"000000000000019c","name":"proxy-2","kind":1,"startTimeUnixNano":"402200000000","endTimeUnixNano":"407200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a7","parentSpanId":"00000000000001a4","name":"proxy-0","kind":1,"startTimeUnixNano":"412000000000","endTimeUnixNano":"417000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a8","parentSpanId":"00000000000001a5","name":"proxy-1","kind":1,"startTimeUnixNano":"412100000000","endTimeUnixNano":"417100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a9","parentSpanId":"00000000000001a6","name":"proxy-2","kind":1,"startTimeUnixNano":"412200000000","endTimeUnixNano":"417200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b1","parentSpanId":"00000000000001ae","name":"proxy-0","kind":1,"startTimeUnixNano":"422000000000","endTimeUnixNano":"427000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b2","parentSpanId":"00000000000001af","name":"proxy-1","kind":1,"startTimeUnixNano":"422100000000","endTimeUnixNano":"427100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b3","parentSpanId":"00000000000001b0","name":"proxy-2","kind":1,"startTimeUnixNano":"422200000000","endTimeUnixNano":"427200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001bb","parentSpanId":"00000000000001b8","name":"proxy-0","kind":1,"startTimeUnixNano":"432000000000","endTimeUnixNano":"437000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001bc","parentSpanId":"00000000000001b9","name":"proxy-1","kind":1,"startTimeUnixNano":"432100000000","endTimeUnixNano":"437100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001bd","parentSpanId":"00000000000001ba","name":"proxy-2","kind":1,"startTimeUnixNano":"432200000000","endTimeUnixNano":"437200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c5","parentSpanId":"00000000000001c2","name":"proxy-0","kind":1,"startTimeUnixNano":"442000000000","endTimeUnixNano":"447000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c6","parentSpanId":"00000000000001c3","name":"proxy-1","kind":1,"startTimeUnixNano":"442100000000","endTimeUnixNano":"447100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c7","parentSpanId":"00000000000001c4","name":"proxy-2","kind":1,"startTimeUnixNano":"442200000000","endTimeUnixNano":"447200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001cf","parentSpanId":"00000000000001cc","name":"proxy-0","kind":1,"startTimeUnixNano":"452000000000","endTimeUnixNano":"457000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d0","parentSpanId":"00000000000001cd","name":"proxy-1","kind":1,"startTimeUnixNano":"452100000000","endTimeUnixNano":"457100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d1","parentSpanId":"00000000000001ce","name":"proxy-2","kind":1,"startTimeUnixNano":"452200000000","endTimeUnixNano":"457200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d9","parentSpanId":"00000000000001d6","name":"proxy-0","kind":1,"startTimeUnixNano":"462000000000","endTimeUnixNano":"467000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001da","parentSpanId":"00000000000001d7","name":"proxy-1","kind":1,"startTimeUnixNano":"462100000000","endTimeUnixNano":"467100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001db","parentSpanId":"00000000000001d8","name":"proxy-2","kind":1,"startTimeUnixNano":"462200000000","endTimeUnixNano":"467200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e3","parentSpanId":"00000000000001e0","name":"proxy-0","kind":1,"startTimeUnixNano":"472000000000","endTimeUnixNano":"477000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e4","parentSpanId":"00000000000001e1","name":"proxy-1","kind":1,"startTimeUnixNano":"472100000000","endTimeUnixNano":"477100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e5","parentSpanId":"00000000000001e2","name":"proxy-2","kind":1,"startTimeUnixNano":"472200000000","endTimeUnixNano":"477200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ed","parentSpanId":"00000000000001ea","name":"proxy-0","kind":1,"startTimeUnixNano":"482000000000","endTimeUnixNano":"487000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ee","parentSpanId":"00000000000001eb","name":"proxy-1","kind":1,"startTimeUnixNano":"482100000000","endTimeUnixNano":"487100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ef","parentSpanId":"00000000000001ec","name":"proxy-2","kind":1,"startTimeUnixNano":"482200000000","endTimeUnixNano":"487200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f7","parentSpanId":"00000000000001f4","name":"proxy-0","kind":1,"startTimeUnixNano":"492000000000","endTimeUnixNano":"497000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f8","parentSpanId":"00000000000001f5","name":"proxy-1","kind":1,"startTimeUnixNano":"492100000000","endTimeUnixNano":"497100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f9","parentSpanId":"00000000000001f6","name":"proxy-2","kind":1,"startTimeUnixNano":"492200000000","endTimeUnixNano":"497200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000201","parentSpanId":"00000000000001fe","name":"proxy-0","kind":1,"startTimeUnixNano":"502000000000","endTimeUnixNano":"507000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000202","parentSpanId":"00000000000001ff","name":"proxy-1","kind":1,"startTimeUnixNano":"502100000000","endTimeUnixNano":"507100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000203","parentSpanId":"0000000000000200","name":"proxy-2","kind":1,"startTimeUnixNano":"502200000000","endTimeUnixNano":"507200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000020b","parentSpanId":"0000000000000208","name":"proxy-0","kind":1,"startTimeUnixNano":"512000000000","endTimeUnixNano":"517000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000020c","parentSpanId":"0000000000000209","name":"proxy-1","kind":1,"startTimeUnixNano":"512100000000","endTimeUnixNano":"517100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000020d","parentSpanId":"000000000000020a","name":"proxy-2","kind":1,"startTimeUnixNano":"512200000000","endTimeUnixNano":"517200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000215","parentSpanId":"0000000000000212","name":"proxy-0","kind":1,"startTimeUnixNano":"522000000000","endTimeUnixNano":"527000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000216","parentSpanId":"0000000000000213","name":"proxy-1","kind":1,"startTimeUnixNano":"522100000000","endTimeUnixNano":"527100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000217","parentSpanId":"0000000000000214","name":"proxy-2","kind":1,"startTimeUnixNano":"522200000000","endTimeUnixNano":"527200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000021f","parentSpanId":"000000000000021c","name":"proxy-0","kind":1,"startTimeUnixNano":"532000000000","endTimeUnixNano":"537000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000220","parentSpanId":"000000000000021d","name":"proxy-1","kind":1,"startTimeUnixNano":"532100000000","endTimeUnixNano":"537100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000221","parentSpanId":"000000000000021e","name":"proxy-2","kind":1,"startTimeUnixNano":"532200000000","endTimeUnixNano":"537200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000229","parentSpanId":"0000000000000226","name":"proxy-0","kind":1,"startTimeUnixNano":"542000000000","endTimeUnixNano":"547000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000022a","parentSpanId":"0000000000000227","name":"proxy-1","kind":1,"startTimeUnixNano":"542100000000","endTimeUnixNano":"547100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000022b","parentSpanId":"0000000000000228","name":"proxy-2","kind":1,"startTimeUnixNano":"542200000000","endTimeUnixNano":"547200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000233","parentSpanId":"0000000000000230","name":"proxy-0","kind":1,"startTimeUnixNano":"552000000000","endTimeUnixNano":"557000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000234","parentSpanId":"0000000000000231","name":"proxy-1","kind":1,"startTimeUnixNano":"552100000000","endTimeUnixNano":"557100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000235","parentSpanId":"0000000000000232","name":"proxy-2","kind":1,"startTimeUnixNano":"552200000000","endTimeUnixNano":"557200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000023d","parentSpanId":"000000000000023a","name":"proxy-0","kind":1,"startTimeUnixNano":"562000000000","endTimeUnixNano":"567000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000023e","parentSpanId":"000000000000023b","name":"proxy-1","kind":1,"startTimeUnixNano":"562100000000","endTimeUnixNano":"567100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000023f","parentSpanId":"000000000000023c","name":"proxy-2","kind":1,"startTimeUnixNano":"562200000000","endTimeUnixNano":"567200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000247","parentSpanId":"0000000000000244","name":"proxy-0","kind":1,"startTimeUnixNano":"572000000000","endTimeUnixNano":"577000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000248","parentSpanId":"0000000000000245","name":"proxy-1","kind":1,"startTimeUnixNano":"572100000000","endTimeUnixNano":"577100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000249","parentSpanId":"0000000000000246","name":"proxy-2","kind":1,"startTimeUnixNano":"572200000000","endTimeUnixNano":"577200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000251","parentSpanId":"000000000000024e","name":"proxy-0","kind":1,"startTimeUnixNano":"582000000000","endTimeUnixNano":"587000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000252","parentSpanId":"000000000000024f","name":"proxy-1","kind":1,"startTimeUnixNano":"582100000000","endTimeUnixNano":"587100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000253","parentSpanId":"0000000000000250","name":"proxy-2","kind":1,"startTimeUnixNano":"582200000000","endTimeUnixNano":"587200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000025b","parentSpanId":"0000000000000258","name":"proxy-0","kind":1,"startTimeUnixNano":"592000000000","endTimeUnixNano":"597000000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000025c","parentSpanId":"0000000000000259","name":"proxy-1","kind":1,"startTimeUnixNano":"592100000000","endTimeUnixNano":"597100000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"20"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000025d","parentSpanId":"000000000000025a","name":"proxy-2","kind":1,"startTimeUnixNano":"592200000000","endTimeUnixNano":"597200000000","attributes":[{"key":"component","value":{"stringValue":"proxy"}},{"key":"thread.id","value":{"intValue":"21"}}],"status":{"code":1}}
+ ]}]}
+, {"resource":{"attributes":[{"key":"service.name","value":{"stringValue":"consumer-service"}}]},
+ "scopeSpans":[{"scope":{"name":"trace-event-logger-test"},"spans":[
+
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000010","parentSpanId":"000000000000000d","name":"consume-0","kind":5,"startTimeUnixNano":"3000000000","endTimeUnixNano":"5000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000011","parentSpanId":"000000000000000d","name":"consume-1","kind":5,"startTimeUnixNano":"3100000000","endTimeUnixNano":"5100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000012","parentSpanId":"000000000000000e","name":"consume-2","kind":5,"startTimeUnixNano":"3200000000","endTimeUnixNano":"5200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000013","parentSpanId":"000000000000000f","name":"consume-3","kind":5,"startTimeUnixNano":"3300000000","endTimeUnixNano":"5300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000001a","parentSpanId":"0000000000000017","name":"consume-0","kind":5,"startTimeUnixNano":"13000000000","endTimeUnixNano":"15000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000001b","parentSpanId":"0000000000000017","name":"consume-1","kind":5,"startTimeUnixNano":"13100000000","endTimeUnixNano":"15100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000001c","parentSpanId":"0000000000000018","name":"consume-2","kind":5,"startTimeUnixNano":"13200000000","endTimeUnixNano":"15200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000001d","parentSpanId":"0000000000000019","name":"consume-3","kind":5,"startTimeUnixNano":"13300000000","endTimeUnixNano":"15300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000024","parentSpanId":"0000000000000021","name":"consume-0","kind":5,"startTimeUnixNano":"23000000000","endTimeUnixNano":"25000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000025","parentSpanId":"0000000000000021","name":"consume-1","kind":5,"startTimeUnixNano":"23100000000","endTimeUnixNano":"25100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000026","parentSpanId":"0000000000000022","name":"consume-2","kind":5,"startTimeUnixNano":"23200000000","endTimeUnixNano":"25200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000027","parentSpanId":"0000000000000023","name":"consume-3","kind":5,"startTimeUnixNano":"23300000000","endTimeUnixNano":"25300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000002e","parentSpanId":"000000000000002b","name":"consume-0","kind":5,"startTimeUnixNano":"33000000000","endTimeUnixNano":"35000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000002f","parentSpanId":"000000000000002b","name":"consume-1","kind":5,"startTimeUnixNano":"33100000000","endTimeUnixNano":"35100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000030","parentSpanId":"000000000000002c","name":"consume-2","kind":5,"startTimeUnixNano":"33200000000","endTimeUnixNano":"35200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000031","parentSpanId":"000000000000002d","name":"consume-3","kind":5,"startTimeUnixNano":"33300000000","endTimeUnixNano":"35300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000038","parentSpanId":"0000000000000035","name":"consume-0","kind":5,"startTimeUnixNano":"43000000000","endTimeUnixNano":"45000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000039","parentSpanId":"0000000000000035","name":"consume-1","kind":5,"startTimeUnixNano":"43100000000","endTimeUnixNano":"45100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000003a","parentSpanId":"0000000000000036","name":"consume-2","kind":5,"startTimeUnixNano":"43200000000","endTimeUnixNano":"45200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000003b","parentSpanId":"0000000000000037","name":"consume-3","kind":5,"startTimeUnixNano":"43300000000","endTimeUnixNano":"45300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000042","parentSpanId":"000000000000003f","name":"consume-0","kind":5,"startTimeUnixNano":"53000000000","endTimeUnixNano":"55000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000043","parentSpanId":"000000000000003f","name":"consume-1","kind":5,"startTimeUnixNano":"53100000000","endTimeUnixNano":"55100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000044","parentSpanId":"0000000000000040","name":"consume-2","kind":5,"startTimeUnixNano":"53200000000","endTimeUnixNano":"55200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000045","parentSpanId":"0000000000000041","name":"consume-3","kind":5,"startTimeUnixNano":"53300000000","endTimeUnixNano":"55300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000004c","parentSpanId":"0000000000000049","name":"consume-0","kind":5,"startTimeUnixNano":"63000000000","endTimeUnixNano":"65000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000004d","parentSpanId":"0000000000000049","name":"consume-1","kind":5,"startTimeUnixNano":"63100000000","endTimeUnixNano":"65100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000004e","parentSpanId":"000000000000004a","name":"consume-2","kind":5,"startTimeUnixNano":"63200000000","endTimeUnixNano":"65200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000004f","parentSpanId":"000000000000004b","name":"consume-3","kind":5,"startTimeUnixNano":"63300000000","endTimeUnixNano":"65300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000056","parentSpanId":"0000000000000053","name":"consume-0","kind":5,"startTimeUnixNano":"73000000000","endTimeUnixNano":"75000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000057","parentSpanId":"0000000000000053","name":"consume-1","kind":5,"startTimeUnixNano":"73100000000","endTimeUnixNano":"75100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000058","parentSpanId":"0000000000000054","name":"consume-2","kind":5,"startTimeUnixNano":"73200000000","endTimeUnixNano":"75200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000059","parentSpanId":"0000000000000055","name":"consume-3","kind":5,"startTimeUnixNano":"73300000000","endTimeUnixNano":"75300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000060","parentSpanId":"000000000000005d","name":"consume-0","kind":5,"startTimeUnixNano":"83000000000","endTimeUnixNano":"85000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000061","parentSpanId":"000000000000005d","name":"consume-1","kind":5,"startTimeUnixNano":"83100000000","endTimeUnixNano":"85100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000062","parentSpanId":"000000000000005e","name":"consume-2","kind":5,"startTimeUnixNano":"83200000000","endTimeUnixNano":"85200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000063","parentSpanId":"000000000000005f","name":"consume-3","kind":5,"startTimeUnixNano":"83300000000","endTimeUnixNano":"85300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000006a","parentSpanId":"0000000000000067","name":"consume-0","kind":5,"startTimeUnixNano":"93000000000","endTimeUnixNano":"95000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000006b","parentSpanId":"0000000000000067","name":"consume-1","kind":5,"startTimeUnixNano":"93100000000","endTimeUnixNano":"95100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000006c","parentSpanId":"0000000000000068","name":"consume-2","kind":5,"startTimeUnixNano":"93200000000","endTimeUnixNano":"95200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000006d","parentSpanId":"0000000000000069","name":"consume-3","kind":5,"startTimeUnixNano":"93300000000","endTimeUnixNano":"95300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000074","parentSpanId":"0000000000000071","name":"consume-0","kind":5,"startTimeUnixNano":"103000000000","endTimeUnixNano":"105000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000075","parentSpanId":"0000000000000071","name":"consume-1","kind":5,"startTimeUnixNano":"103100000000","endTimeUnixNano":"105100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000076","parentSpanId":"0000000000000072","name":"consume-2","kind":5,"startTimeUnixNano":"103200000000","endTimeUnixNano":"105200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000077","parentSpanId":"0000000000000073","name":"consume-3","kind":5,"startTimeUnixNano":"103300000000","endTimeUnixNano":"105300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000007e","parentSpanId":"000000000000007b","name":"consume-0","kind":5,"startTimeUnixNano":"113000000000","endTimeUnixNano":"115000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000007f","parentSpanId":"000000000000007b","name":"consume-1","kind":5,"startTimeUnixNano":"113100000000","endTimeUnixNano":"115100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000080","parentSpanId":"000000000000007c","name":"consume-2","kind":5,"startTimeUnixNano":"113200000000","endTimeUnixNano":"115200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000081","parentSpanId":"000000000000007d","name":"consume-3","kind":5,"startTimeUnixNano":"113300000000","endTimeUnixNano":"115300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000088","parentSpanId":"0000000000000085","name":"consume-0","kind":5,"startTimeUnixNano":"123000000000","endTimeUnixNano":"125000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000089","parentSpanId":"0000000000000085","name":"consume-1","kind":5,"startTimeUnixNano":"123100000000","endTimeUnixNano":"125100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000008a","parentSpanId":"0000000000000086","name":"consume-2","kind":5,"startTimeUnixNano":"123200000000","endTimeUnixNano":"125200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000008b","parentSpanId":"0000000000000087","name":"consume-3","kind":5,"startTimeUnixNano":"123300000000","endTimeUnixNano":"125300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000092","parentSpanId":"000000000000008f","name":"consume-0","kind":5,"startTimeUnixNano":"133000000000","endTimeUnixNano":"135000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000093","parentSpanId":"000000000000008f","name":"consume-1","kind":5,"startTimeUnixNano":"133100000000","endTimeUnixNano":"135100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000094","parentSpanId":"0000000000000090","name":"consume-2","kind":5,"startTimeUnixNano":"133200000000","endTimeUnixNano":"135200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000095","parentSpanId":"0000000000000091","name":"consume-3","kind":5,"startTimeUnixNano":"133300000000","endTimeUnixNano":"135300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000009c","parentSpanId":"0000000000000099","name":"consume-0","kind":5,"startTimeUnixNano":"143000000000","endTimeUnixNano":"145000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000009d","parentSpanId":"0000000000000099","name":"consume-1","kind":5,"startTimeUnixNano":"143100000000","endTimeUnixNano":"145100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000009e","parentSpanId":"000000000000009a","name":"consume-2","kind":5,"startTimeUnixNano":"143200000000","endTimeUnixNano":"145200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000009f","parentSpanId":"000000000000009b","name":"consume-3","kind":5,"startTimeUnixNano":"143300000000","endTimeUnixNano":"145300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a6","parentSpanId":"00000000000000a3","name":"consume-0","kind":5,"startTimeUnixNano":"153000000000","endTimeUnixNano":"155000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a7","parentSpanId":"00000000000000a3","name":"consume-1","kind":5,"startTimeUnixNano":"153100000000","endTimeUnixNano":"155100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a8","parentSpanId":"00000000000000a4","name":"consume-2","kind":5,"startTimeUnixNano":"153200000000","endTimeUnixNano":"155200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000a9","parentSpanId":"00000000000000a5","name":"consume-3","kind":5,"startTimeUnixNano":"153300000000","endTimeUnixNano":"155300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b0","parentSpanId":"00000000000000ad","name":"consume-0","kind":5,"startTimeUnixNano":"163000000000","endTimeUnixNano":"165000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b1","parentSpanId":"00000000000000ad","name":"consume-1","kind":5,"startTimeUnixNano":"163100000000","endTimeUnixNano":"165100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b2","parentSpanId":"00000000000000ae","name":"consume-2","kind":5,"startTimeUnixNano":"163200000000","endTimeUnixNano":"165200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000b3","parentSpanId":"00000000000000af","name":"consume-3","kind":5,"startTimeUnixNano":"163300000000","endTimeUnixNano":"165300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ba","parentSpanId":"00000000000000b7","name":"consume-0","kind":5,"startTimeUnixNano":"173000000000","endTimeUnixNano":"175000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000bb","parentSpanId":"00000000000000b7","name":"consume-1","kind":5,"startTimeUnixNano":"173100000000","endTimeUnixNano":"175100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000bc","parentSpanId":"00000000000000b8","name":"consume-2","kind":5,"startTimeUnixNano":"173200000000","endTimeUnixNano":"175200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000bd","parentSpanId":"00000000000000b9","name":"consume-3","kind":5,"startTimeUnixNano":"173300000000","endTimeUnixNano":"175300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c4","parentSpanId":"00000000000000c1","name":"consume-0","kind":5,"startTimeUnixNano":"183000000000","endTimeUnixNano":"185000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c5","parentSpanId":"00000000000000c1","name":"consume-1","kind":5,"startTimeUnixNano":"183100000000","endTimeUnixNano":"185100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c6","parentSpanId":"00000000000000c2","name":"consume-2","kind":5,"startTimeUnixNano":"183200000000","endTimeUnixNano":"185200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000c7","parentSpanId":"00000000000000c3","name":"consume-3","kind":5,"startTimeUnixNano":"183300000000","endTimeUnixNano":"185300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ce","parentSpanId":"00000000000000cb","name":"consume-0","kind":5,"startTimeUnixNano":"193000000000","endTimeUnixNano":"195000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000cf","parentSpanId":"00000000000000cb","name":"consume-1","kind":5,"startTimeUnixNano":"193100000000","endTimeUnixNano":"195100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d0","parentSpanId":"00000000000000cc","name":"consume-2","kind":5,"startTimeUnixNano":"193200000000","endTimeUnixNano":"195200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d1","parentSpanId":"00000000000000cd","name":"consume-3","kind":5,"startTimeUnixNano":"193300000000","endTimeUnixNano":"195300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d8","parentSpanId":"00000000000000d5","name":"consume-0","kind":5,"startTimeUnixNano":"203000000000","endTimeUnixNano":"205000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000d9","parentSpanId":"00000000000000d5","name":"consume-1","kind":5,"startTimeUnixNano":"203100000000","endTimeUnixNano":"205100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000da","parentSpanId":"00000000000000d6","name":"consume-2","kind":5,"startTimeUnixNano":"203200000000","endTimeUnixNano":"205200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000db","parentSpanId":"00000000000000d7","name":"consume-3","kind":5,"startTimeUnixNano":"203300000000","endTimeUnixNano":"205300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e2","parentSpanId":"00000000000000df","name":"consume-0","kind":5,"startTimeUnixNano":"213000000000","endTimeUnixNano":"215000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e3","parentSpanId":"00000000000000df","name":"consume-1","kind":5,"startTimeUnixNano":"213100000000","endTimeUnixNano":"215100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e4","parentSpanId":"00000000000000e0","name":"consume-2","kind":5,"startTimeUnixNano":"213200000000","endTimeUnixNano":"215200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000e5","parentSpanId":"00000000000000e1","name":"consume-3","kind":5,"startTimeUnixNano":"213300000000","endTimeUnixNano":"215300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ec","parentSpanId":"00000000000000e9","name":"consume-0","kind":5,"startTimeUnixNano":"223000000000","endTimeUnixNano":"225000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ed","parentSpanId":"00000000000000e9","name":"consume-1","kind":5,"startTimeUnixNano":"223100000000","endTimeUnixNano":"225100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ee","parentSpanId":"00000000000000ea","name":"consume-2","kind":5,"startTimeUnixNano":"223200000000","endTimeUnixNano":"225200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000ef","parentSpanId":"00000000000000eb","name":"consume-3","kind":5,"startTimeUnixNano":"223300000000","endTimeUnixNano":"225300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f6","parentSpanId":"00000000000000f3","name":"consume-0","kind":5,"startTimeUnixNano":"233000000000","endTimeUnixNano":"235000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f7","parentSpanId":"00000000000000f3","name":"consume-1","kind":5,"startTimeUnixNano":"233100000000","endTimeUnixNano":"235100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f8","parentSpanId":"00000000000000f4","name":"consume-2","kind":5,"startTimeUnixNano":"233200000000","endTimeUnixNano":"235200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000000f9","parentSpanId":"00000000000000f5","name":"consume-3","kind":5,"startTimeUnixNano":"233300000000","endTimeUnixNano":"235300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000100","parentSpanId":"00000000000000fd","name":"consume-0","kind":5,"startTimeUnixNano":"243000000000","endTimeUnixNano":"245000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000101","parentSpanId":"00000000000000fd","name":"consume-1","kind":5,"startTimeUnixNano":"243100000000","endTimeUnixNano":"245100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000102","parentSpanId":"00000000000000fe","name":"consume-2","kind":5,"startTimeUnixNano":"243200000000","endTimeUnixNano":"245200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000103","parentSpanId":"00000000000000ff","name":"consume-3","kind":5,"startTimeUnixNano":"243300000000","endTimeUnixNano":"245300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000010a","parentSpanId":"0000000000000107","name":"consume-0","kind":5,"startTimeUnixNano":"253000000000","endTimeUnixNano":"255000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000010b","parentSpanId":"0000000000000107","name":"consume-1","kind":5,"startTimeUnixNano":"253100000000","endTimeUnixNano":"255100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000010c","parentSpanId":"0000000000000108","name":"consume-2","kind":5,"startTimeUnixNano":"253200000000","endTimeUnixNano":"255200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000010d","parentSpanId":"0000000000000109","name":"consume-3","kind":5,"startTimeUnixNano":"253300000000","endTimeUnixNano":"255300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000114","parentSpanId":"0000000000000111","name":"consume-0","kind":5,"startTimeUnixNano":"263000000000","endTimeUnixNano":"265000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000115","parentSpanId":"0000000000000111","name":"consume-1","kind":5,"startTimeUnixNano":"263100000000","endTimeUnixNano":"265100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000116","parentSpanId":"0000000000000112","name":"consume-2","kind":5,"startTimeUnixNano":"263200000000","endTimeUnixNano":"265200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000117","parentSpanId":"0000000000000113","name":"consume-3","kind":5,"startTimeUnixNano":"263300000000","endTimeUnixNano":"265300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000011e","parentSpanId":"000000000000011b","name":"consume-0","kind":5,"startTimeUnixNano":"273000000000","endTimeUnixNano":"275000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000011f","parentSpanId":"000000000000011b","name":"consume-1","kind":5,"startTimeUnixNano":"273100000000","endTimeUnixNano":"275100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000120","parentSpanId":"000000000000011c","name":"consume-2","kind":5,"startTimeUnixNano":"273200000000","endTimeUnixNano":"275200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000121","parentSpanId":"000000000000011d","name":"consume-3","kind":5,"startTimeUnixNano":"273300000000","endTimeUnixNano":"275300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000128","parentSpanId":"0000000000000125","name":"consume-0","kind":5,"startTimeUnixNano":"283000000000","endTimeUnixNano":"285000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000129","parentSpanId":"0000000000000125","name":"consume-1","kind":5,"startTimeUnixNano":"283100000000","endTimeUnixNano":"285100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000012a","parentSpanId":"0000000000000126","name":"consume-2","kind":5,"startTimeUnixNano":"283200000000","endTimeUnixNano":"285200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000012b","parentSpanId":"0000000000000127","name":"consume-3","kind":5,"startTimeUnixNano":"283300000000","endTimeUnixNano":"285300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000132","parentSpanId":"000000000000012f","name":"consume-0","kind":5,"startTimeUnixNano":"293000000000","endTimeUnixNano":"295000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000133","parentSpanId":"000000000000012f","name":"consume-1","kind":5,"startTimeUnixNano":"293100000000","endTimeUnixNano":"295100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000134","parentSpanId":"0000000000000130","name":"consume-2","kind":5,"startTimeUnixNano":"293200000000","endTimeUnixNano":"295200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000135","parentSpanId":"0000000000000131","name":"consume-3","kind":5,"startTimeUnixNano":"293300000000","endTimeUnixNano":"295300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000013c","parentSpanId":"0000000000000139","name":"consume-0","kind":5,"startTimeUnixNano":"303000000000","endTimeUnixNano":"305000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000013d","parentSpanId":"0000000000000139","name":"consume-1","kind":5,"startTimeUnixNano":"303100000000","endTimeUnixNano":"305100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000013e","parentSpanId":"000000000000013a","name":"consume-2","kind":5,"startTimeUnixNano":"303200000000","endTimeUnixNano":"305200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000013f","parentSpanId":"000000000000013b","name":"consume-3","kind":5,"startTimeUnixNano":"303300000000","endTimeUnixNano":"305300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000146","parentSpanId":"0000000000000143","name":"consume-0","kind":5,"startTimeUnixNano":"313000000000","endTimeUnixNano":"315000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000147","parentSpanId":"0000000000000143","name":"consume-1","kind":5,"startTimeUnixNano":"313100000000","endTimeUnixNano":"315100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000148","parentSpanId":"0000000000000144","name":"consume-2","kind":5,"startTimeUnixNano":"313200000000","endTimeUnixNano":"315200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000149","parentSpanId":"0000000000000145","name":"consume-3","kind":5,"startTimeUnixNano":"313300000000","endTimeUnixNano":"315300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000150","parentSpanId":"000000000000014d","name":"consume-0","kind":5,"startTimeUnixNano":"323000000000","endTimeUnixNano":"325000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000151","parentSpanId":"000000000000014d","name":"consume-1","kind":5,"startTimeUnixNano":"323100000000","endTimeUnixNano":"325100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000152","parentSpanId":"000000000000014e","name":"consume-2","kind":5,"startTimeUnixNano":"323200000000","endTimeUnixNano":"325200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000153","parentSpanId":"000000000000014f","name":"consume-3","kind":5,"startTimeUnixNano":"323300000000","endTimeUnixNano":"325300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000015a","parentSpanId":"0000000000000157","name":"consume-0","kind":5,"startTimeUnixNano":"333000000000","endTimeUnixNano":"335000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000015b","parentSpanId":"0000000000000157","name":"consume-1","kind":5,"startTimeUnixNano":"333100000000","endTimeUnixNano":"335100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000015c","parentSpanId":"0000000000000158","name":"consume-2","kind":5,"startTimeUnixNano":"333200000000","endTimeUnixNano":"335200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000015d","parentSpanId":"0000000000000159","name":"consume-3","kind":5,"startTimeUnixNano":"333300000000","endTimeUnixNano":"335300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000164","parentSpanId":"0000000000000161","name":"consume-0","kind":5,"startTimeUnixNano":"343000000000","endTimeUnixNano":"345000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000165","parentSpanId":"0000000000000161","name":"consume-1","kind":5,"startTimeUnixNano":"343100000000","endTimeUnixNano":"345100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000166","parentSpanId":"0000000000000162","name":"consume-2","kind":5,"startTimeUnixNano":"343200000000","endTimeUnixNano":"345200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000167","parentSpanId":"0000000000000163","name":"consume-3","kind":5,"startTimeUnixNano":"343300000000","endTimeUnixNano":"345300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000016e","parentSpanId":"000000000000016b","name":"consume-0","kind":5,"startTimeUnixNano":"353000000000","endTimeUnixNano":"355000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000016f","parentSpanId":"000000000000016b","name":"consume-1","kind":5,"startTimeUnixNano":"353100000000","endTimeUnixNano":"355100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000170","parentSpanId":"000000000000016c","name":"consume-2","kind":5,"startTimeUnixNano":"353200000000","endTimeUnixNano":"355200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000171","parentSpanId":"000000000000016d","name":"consume-3","kind":5,"startTimeUnixNano":"353300000000","endTimeUnixNano":"355300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000178","parentSpanId":"0000000000000175","name":"consume-0","kind":5,"startTimeUnixNano":"363000000000","endTimeUnixNano":"365000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000179","parentSpanId":"0000000000000175","name":"consume-1","kind":5,"startTimeUnixNano":"363100000000","endTimeUnixNano":"365100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000017a","parentSpanId":"0000000000000176","name":"consume-2","kind":5,"startTimeUnixNano":"363200000000","endTimeUnixNano":"365200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000017b","parentSpanId":"0000000000000177","name":"consume-3","kind":5,"startTimeUnixNano":"363300000000","endTimeUnixNano":"365300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000182","parentSpanId":"000000000000017f","name":"consume-0","kind":5,"startTimeUnixNano":"373000000000","endTimeUnixNano":"375000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000183","parentSpanId":"000000000000017f","name":"consume-1","kind":5,"startTimeUnixNano":"373100000000","endTimeUnixNano":"375100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000184","parentSpanId":"0000000000000180","name":"consume-2","kind":5,"startTimeUnixNano":"373200000000","endTimeUnixNano":"375200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000185","parentSpanId":"0000000000000181","name":"consume-3","kind":5,"startTimeUnixNano":"373300000000","endTimeUnixNano":"375300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000018c","parentSpanId":"0000000000000189","name":"consume-0","kind":5,"startTimeUnixNano":"383000000000","endTimeUnixNano":"385000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000018d","parentSpanId":"0000000000000189","name":"consume-1","kind":5,"startTimeUnixNano":"383100000000","endTimeUnixNano":"385100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000018e","parentSpanId":"000000000000018a","name":"consume-2","kind":5,"startTimeUnixNano":"383200000000","endTimeUnixNano":"385200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000018f","parentSpanId":"000000000000018b","name":"consume-3","kind":5,"startTimeUnixNano":"383300000000","endTimeUnixNano":"385300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000196","parentSpanId":"0000000000000193","name":"consume-0","kind":5,"startTimeUnixNano":"393000000000","endTimeUnixNano":"395000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000197","parentSpanId":"0000000000000193","name":"consume-1","kind":5,"startTimeUnixNano":"393100000000","endTimeUnixNano":"395100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000198","parentSpanId":"0000000000000194","name":"consume-2","kind":5,"startTimeUnixNano":"393200000000","endTimeUnixNano":"395200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000199","parentSpanId":"0000000000000195","name":"consume-3","kind":5,"startTimeUnixNano":"393300000000","endTimeUnixNano":"395300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a0","parentSpanId":"000000000000019d","name":"consume-0","kind":5,"startTimeUnixNano":"403000000000","endTimeUnixNano":"405000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a1","parentSpanId":"000000000000019d","name":"consume-1","kind":5,"startTimeUnixNano":"403100000000","endTimeUnixNano":"405100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a2","parentSpanId":"000000000000019e","name":"consume-2","kind":5,"startTimeUnixNano":"403200000000","endTimeUnixNano":"405200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001a3","parentSpanId":"000000000000019f","name":"consume-3","kind":5,"startTimeUnixNano":"403300000000","endTimeUnixNano":"405300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001aa","parentSpanId":"00000000000001a7","name":"consume-0","kind":5,"startTimeUnixNano":"413000000000","endTimeUnixNano":"415000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ab","parentSpanId":"00000000000001a7","name":"consume-1","kind":5,"startTimeUnixNano":"413100000000","endTimeUnixNano":"415100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ac","parentSpanId":"00000000000001a8","name":"consume-2","kind":5,"startTimeUnixNano":"413200000000","endTimeUnixNano":"415200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ad","parentSpanId":"00000000000001a9","name":"consume-3","kind":5,"startTimeUnixNano":"413300000000","endTimeUnixNano":"415300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b4","parentSpanId":"00000000000001b1","name":"consume-0","kind":5,"startTimeUnixNano":"423000000000","endTimeUnixNano":"425000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b5","parentSpanId":"00000000000001b1","name":"consume-1","kind":5,"startTimeUnixNano":"423100000000","endTimeUnixNano":"425100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b6","parentSpanId":"00000000000001b2","name":"consume-2","kind":5,"startTimeUnixNano":"423200000000","endTimeUnixNano":"425200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001b7","parentSpanId":"00000000000001b3","name":"consume-3","kind":5,"startTimeUnixNano":"423300000000","endTimeUnixNano":"425300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001be","parentSpanId":"00000000000001bb","name":"consume-0","kind":5,"startTimeUnixNano":"433000000000","endTimeUnixNano":"435000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001bf","parentSpanId":"00000000000001bb","name":"consume-1","kind":5,"startTimeUnixNano":"433100000000","endTimeUnixNano":"435100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c0","parentSpanId":"00000000000001bc","name":"consume-2","kind":5,"startTimeUnixNano":"433200000000","endTimeUnixNano":"435200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c1","parentSpanId":"00000000000001bd","name":"consume-3","kind":5,"startTimeUnixNano":"433300000000","endTimeUnixNano":"435300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c8","parentSpanId":"00000000000001c5","name":"consume-0","kind":5,"startTimeUnixNano":"443000000000","endTimeUnixNano":"445000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001c9","parentSpanId":"00000000000001c5","name":"consume-1","kind":5,"startTimeUnixNano":"443100000000","endTimeUnixNano":"445100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001ca","parentSpanId":"00000000000001c6","name":"consume-2","kind":5,"startTimeUnixNano":"443200000000","endTimeUnixNano":"445200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001cb","parentSpanId":"00000000000001c7","name":"consume-3","kind":5,"startTimeUnixNano":"443300000000","endTimeUnixNano":"445300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d2","parentSpanId":"00000000000001cf","name":"consume-0","kind":5,"startTimeUnixNano":"453000000000","endTimeUnixNano":"455000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d3","parentSpanId":"00000000000001cf","name":"consume-1","kind":5,"startTimeUnixNano":"453100000000","endTimeUnixNano":"455100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d4","parentSpanId":"00000000000001d0","name":"consume-2","kind":5,"startTimeUnixNano":"453200000000","endTimeUnixNano":"455200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001d5","parentSpanId":"00000000000001d1","name":"consume-3","kind":5,"startTimeUnixNano":"453300000000","endTimeUnixNano":"455300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001dc","parentSpanId":"00000000000001d9","name":"consume-0","kind":5,"startTimeUnixNano":"463000000000","endTimeUnixNano":"465000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001dd","parentSpanId":"00000000000001d9","name":"consume-1","kind":5,"startTimeUnixNano":"463100000000","endTimeUnixNano":"465100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001de","parentSpanId":"00000000000001da","name":"consume-2","kind":5,"startTimeUnixNano":"463200000000","endTimeUnixNano":"465200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001df","parentSpanId":"00000000000001db","name":"consume-3","kind":5,"startTimeUnixNano":"463300000000","endTimeUnixNano":"465300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e6","parentSpanId":"00000000000001e3","name":"consume-0","kind":5,"startTimeUnixNano":"473000000000","endTimeUnixNano":"475000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e7","parentSpanId":"00000000000001e3","name":"consume-1","kind":5,"startTimeUnixNano":"473100000000","endTimeUnixNano":"475100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e8","parentSpanId":"00000000000001e4","name":"consume-2","kind":5,"startTimeUnixNano":"473200000000","endTimeUnixNano":"475200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001e9","parentSpanId":"00000000000001e5","name":"consume-3","kind":5,"startTimeUnixNano":"473300000000","endTimeUnixNano":"475300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f0","parentSpanId":"00000000000001ed","name":"consume-0","kind":5,"startTimeUnixNano":"483000000000","endTimeUnixNano":"485000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f1","parentSpanId":"00000000000001ed","name":"consume-1","kind":5,"startTimeUnixNano":"483100000000","endTimeUnixNano":"485100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f2","parentSpanId":"00000000000001ee","name":"consume-2","kind":5,"startTimeUnixNano":"483200000000","endTimeUnixNano":"485200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001f3","parentSpanId":"00000000000001ef","name":"consume-3","kind":5,"startTimeUnixNano":"483300000000","endTimeUnixNano":"485300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001fa","parentSpanId":"00000000000001f7","name":"consume-0","kind":5,"startTimeUnixNano":"493000000000","endTimeUnixNano":"495000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001fb","parentSpanId":"00000000000001f7","name":"consume-1","kind":5,"startTimeUnixNano":"493100000000","endTimeUnixNano":"495100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001fc","parentSpanId":"00000000000001f8","name":"consume-2","kind":5,"startTimeUnixNano":"493200000000","endTimeUnixNano":"495200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"00000000000001fd","parentSpanId":"00000000000001f9","name":"consume-3","kind":5,"startTimeUnixNano":"493300000000","endTimeUnixNano":"495300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000204","parentSpanId":"0000000000000201","name":"consume-0","kind":5,"startTimeUnixNano":"503000000000","endTimeUnixNano":"505000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000205","parentSpanId":"0000000000000201","name":"consume-1","kind":5,"startTimeUnixNano":"503100000000","endTimeUnixNano":"505100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000206","parentSpanId":"0000000000000202","name":"consume-2","kind":5,"startTimeUnixNano":"503200000000","endTimeUnixNano":"505200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000207","parentSpanId":"0000000000000203","name":"consume-3","kind":5,"startTimeUnixNano":"503300000000","endTimeUnixNano":"505300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000020e","parentSpanId":"000000000000020b","name":"consume-0","kind":5,"startTimeUnixNano":"513000000000","endTimeUnixNano":"515000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000020f","parentSpanId":"000000000000020b","name":"consume-1","kind":5,"startTimeUnixNano":"513100000000","endTimeUnixNano":"515100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000210","parentSpanId":"000000000000020c","name":"consume-2","kind":5,"startTimeUnixNano":"513200000000","endTimeUnixNano":"515200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000211","parentSpanId":"000000000000020d","name":"consume-3","kind":5,"startTimeUnixNano":"513300000000","endTimeUnixNano":"515300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000218","parentSpanId":"0000000000000215","name":"consume-0","kind":5,"startTimeUnixNano":"523000000000","endTimeUnixNano":"525000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000219","parentSpanId":"0000000000000215","name":"consume-1","kind":5,"startTimeUnixNano":"523100000000","endTimeUnixNano":"525100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000021a","parentSpanId":"0000000000000216","name":"consume-2","kind":5,"startTimeUnixNano":"523200000000","endTimeUnixNano":"525200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000021b","parentSpanId":"0000000000000217","name":"consume-3","kind":5,"startTimeUnixNano":"523300000000","endTimeUnixNano":"525300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000222","parentSpanId":"000000000000021f","name":"consume-0","kind":5,"startTimeUnixNano":"533000000000","endTimeUnixNano":"535000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000223","parentSpanId":"000000000000021f","name":"consume-1","kind":5,"startTimeUnixNano":"533100000000","endTimeUnixNano":"535100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000224","parentSpanId":"0000000000000220","name":"consume-2","kind":5,"startTimeUnixNano":"533200000000","endTimeUnixNano":"535200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000225","parentSpanId":"0000000000000221","name":"consume-3","kind":5,"startTimeUnixNano":"533300000000","endTimeUnixNano":"535300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000022c","parentSpanId":"0000000000000229","name":"consume-0","kind":5,"startTimeUnixNano":"543000000000","endTimeUnixNano":"545000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000022d","parentSpanId":"0000000000000229","name":"consume-1","kind":5,"startTimeUnixNano":"543100000000","endTimeUnixNano":"545100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000022e","parentSpanId":"000000000000022a","name":"consume-2","kind":5,"startTimeUnixNano":"543200000000","endTimeUnixNano":"545200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000022f","parentSpanId":"000000000000022b","name":"consume-3","kind":5,"startTimeUnixNano":"543300000000","endTimeUnixNano":"545300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000236","parentSpanId":"0000000000000233","name":"consume-0","kind":5,"startTimeUnixNano":"553000000000","endTimeUnixNano":"555000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000237","parentSpanId":"0000000000000233","name":"consume-1","kind":5,"startTimeUnixNano":"553100000000","endTimeUnixNano":"555100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000238","parentSpanId":"0000000000000234","name":"consume-2","kind":5,"startTimeUnixNano":"553200000000","endTimeUnixNano":"555200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000239","parentSpanId":"0000000000000235","name":"consume-3","kind":5,"startTimeUnixNano":"553300000000","endTimeUnixNano":"555300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000240","parentSpanId":"000000000000023d","name":"consume-0","kind":5,"startTimeUnixNano":"563000000000","endTimeUnixNano":"565000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000241","parentSpanId":"000000000000023d","name":"consume-1","kind":5,"startTimeUnixNano":"563100000000","endTimeUnixNano":"565100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000242","parentSpanId":"000000000000023e","name":"consume-2","kind":5,"startTimeUnixNano":"563200000000","endTimeUnixNano":"565200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000243","parentSpanId":"000000000000023f","name":"consume-3","kind":5,"startTimeUnixNano":"563300000000","endTimeUnixNano":"565300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000024a","parentSpanId":"0000000000000247","name":"consume-0","kind":5,"startTimeUnixNano":"573000000000","endTimeUnixNano":"575000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000024b","parentSpanId":"0000000000000247","name":"consume-1","kind":5,"startTimeUnixNano":"573100000000","endTimeUnixNano":"575100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000024c","parentSpanId":"0000000000000248","name":"consume-2","kind":5,"startTimeUnixNano":"573200000000","endTimeUnixNano":"575200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000024d","parentSpanId":"0000000000000249","name":"consume-3","kind":5,"startTimeUnixNano":"573300000000","endTimeUnixNano":"575300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000254","parentSpanId":"0000000000000251","name":"consume-0","kind":5,"startTimeUnixNano":"583000000000","endTimeUnixNano":"585000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000255","parentSpanId":"0000000000000251","name":"consume-1","kind":5,"startTimeUnixNano":"583100000000","endTimeUnixNano":"585100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000256","parentSpanId":"0000000000000252","name":"consume-2","kind":5,"startTimeUnixNano":"583200000000","endTimeUnixNano":"585200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000257","parentSpanId":"0000000000000253","name":"consume-3","kind":5,"startTimeUnixNano":"583300000000","endTimeUnixNano":"585300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000025e","parentSpanId":"000000000000025b","name":"consume-0","kind":5,"startTimeUnixNano":"593000000000","endTimeUnixNano":"595000000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"30"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"000000000000025f","parentSpanId":"000000000000025b","name":"consume-1","kind":5,"startTimeUnixNano":"593100000000","endTimeUnixNano":"595100000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"31"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000260","parentSpanId":"000000000000025c","name":"consume-2","kind":5,"startTimeUnixNano":"593200000000","endTimeUnixNano":"595200000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"32"}}],"status":{"code":1}},
+ {"traceId":"0af7651916cd43dd8448eb211c80319c","spanId":"0000000000000261","parentSpanId":"000000000000025d","name":"consume-3","kind":5,"startTimeUnixNano":"593300000000","endTimeUnixNano":"595300000000","attributes":[{"key":"messaging.operation","value":{"stringValue":"process"}},{"key":"thread.id","value":{"intValue":"33"}}],"status":{"code":1}}
+ ]}]}
+]}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.classpath b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.classpath
new file mode 100644
index 000000000..1d57be56a
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.classpath
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.gitignore b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.gitignore
new file mode 100644
index 000000000..ae3c17260
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.project b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.project
new file mode 100644
index 000000000..90d8f6cfb
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.project
@@ -0,0 +1,28 @@
+
+
+ org.eclipse.tracecompass.incubator.otlp.core
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..2219cab85
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: %Bundle-Vendor
+Bundle-SymbolicName: org.eclipse.tracecompass.incubator.otlp.core;singleton:=true
+Bundle-Version: 0.18.0.qualifier
+Bundle-Localization: plugin
+Bundle-Activator: org.eclipse.tracecompass.incubator.internal.otlp.core.Activator
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-17
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.tracecompass.common.core,
+ org.eclipse.tracecompass.tmf.core,
+ com.google.gson,
+ com.google.guava,
+ org.eclipse.tracecompass.jsontrace.core,
+ org.eclipse.tracecompass.incubator.opentracing.core,
+ org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
+Export-Package: org.eclipse.tracecompass.incubator.internal.otlp.core;x-friends:="org.eclipse.tracecompass.incubator.otlp.core.tests",
+ org.eclipse.tracecompass.incubator.internal.otlp.core.trace;x-friends:="org.eclipse.tracecompass.incubator.otlp.core.tests"
+Automatic-Module-Name: org.eclipse.tracecompass.incubator.otlp.core
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/about.html b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/about.html
new file mode 100644
index 000000000..164f781a8
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/about.html
@@ -0,0 +1,36 @@
+
+
+
+
+About
+
+
+ About This Content
+
+ November 30, 2017
+ License
+
+
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at http://www.eclipse.org/legal/epl-2.0.
+ For purposes of the EPL, "Program" will mean the Content.
+
+
+
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at http://www.eclipse.org.
+
+
+
+
\ No newline at end of file
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/build.properties b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/build.properties
new file mode 100644
index 000000000..e9838e809
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/build.properties
@@ -0,0 +1,18 @@
+###############################################################################
+# Copyright (c) 2026 Ericsson
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ about.html,\
+ plugin.properties,\
+ .,\
+ plugin.xml
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.properties b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.properties
new file mode 100644
index 000000000..549353ecb
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2026 Ericsson
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0
+#
+# SPDX-License-Identifier: EPL-2.0
+###############################################################################
+
+Bundle-Vendor = Eclipse Trace Compass Incubator
+Bundle-Name = Trace Compass OTLP Core Plug-in (Incubator)
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.xml b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.xml
new file mode 100644
index 000000000..230059e8c
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/plugin.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/pom.xml b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/pom.xml
new file mode 100644
index 000000000..d96a90304
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ 4.0.0
+
+
+ org.eclipse.tracecompass.incubator.tracetypes-parent
+ org.eclipse.tracecompass.incubator
+ 0.18.0-SNAPSHOT
+
+
+ org.eclipse.tracecompass.incubator.otlp.core
+ eclipse-plugin
+
+ Trace Compass Incubator OTLP Core Plug-in
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/Activator.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/Activator.java
new file mode 100644
index 000000000..a3742dbfb
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/Activator.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core;
+
+import org.eclipse.tracecompass.common.core.TraceCompassActivator;
+
+/**
+ * Activator
+ */
+public class Activator extends TraceCompassActivator {
+
+ /** The plug-in ID */
+ public static final String PLUGIN_ID = "org.eclipse.tracecompass.incubator.otlp.core"; //$NON-NLS-1$
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ super(PLUGIN_ID);
+ }
+
+ /**
+ * Returns the instance of this plug-in
+ *
+ * @return The plugin instance
+ */
+ public static TraceCompassActivator getInstance() {
+ return TraceCompassActivator.getInstance(PLUGIN_ID);
+ }
+
+ @Override
+ protected void startActions() {
+ // Nothing
+ }
+
+ @Override
+ protected void stopActions() {
+ // Nothing
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
new file mode 100644
index 000000000..c8df433ec
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
@@ -0,0 +1,187 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.IOpenTracingConstants;
+import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.OpenTracingField;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+/**
+ * Parses OTLP span JSON into an {@link OpenTracingField} so the existing
+ * OpenTracing analysis and views can be reused.
+ *
+ * OTLP span format:
+ *
+ * {
+ * "traceId": "...",
+ * "spanId": "...",
+ * "parentSpanId": "...",
+ * "name": "...",
+ * "kind": 2,
+ * "startTimeUnixNano": "...",
+ * "endTimeUnixNano": "...",
+ * "attributes": [{"key": "...", "value": {"stringValue": "..."}}],
+ * "status": {"code": 1},
+ * "serviceName": "..." (injected by sorting job)
+ * }
+ *
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpField {
+
+ private static final Gson G_SON = new Gson();
+
+ private OtlpField() {
+ // utility class
+ }
+
+ /**
+ * Parse an OTLP span JSON string into an OpenTracingField
+ *
+ * @param jsonString
+ * the OTLP span JSON
+ * @return an OpenTracingField, or null if parsing fails
+ */
+ public static @Nullable OpenTracingField parseJson(String jsonString) {
+ JsonObject root = G_SON.fromJson(jsonString, JsonObject.class);
+ if (root == null) {
+ return null;
+ }
+
+ String name = optString(root, "name"); //$NON-NLS-1$
+ if (name == null) {
+ return null;
+ }
+ String traceId = optString(root, "traceId"); //$NON-NLS-1$
+ String spanId = optString(root, "spanId"); //$NON-NLS-1$
+ if (traceId == null || spanId == null) {
+ return null;
+ }
+
+ String startTimeStr = optString(root, "startTimeUnixNano"); //$NON-NLS-1$
+ String endTimeStr = optString(root, "endTimeUnixNano"); //$NON-NLS-1$
+ if (startTimeStr == null || endTimeStr == null) {
+ return null;
+ }
+
+ long startTimeNanos = Long.parseLong(startTimeStr);
+ long endTimeNanos = Long.parseLong(endTimeStr);
+ long durationNanos = endTimeNanos - startTimeNanos;
+
+ String parentSpanId = optString(root, "parentSpanId"); //$NON-NLS-1$
+ String serviceName = optString(root, "serviceName"); //$NON-NLS-1$
+ if (serviceName == null) {
+ serviceName = ""; //$NON-NLS-1$
+ }
+
+ // Convert to Jaeger-compatible JSON and delegate to OpenTracingField
+ String jaegerJson = toJaegerJson(root, name, traceId, spanId,
+ startTimeNanos, durationNanos, parentSpanId, serviceName);
+
+ // Build a process field for OpenTracingField
+ String processField = "{\"serviceName\":\"" + serviceName + "\"}"; //$NON-NLS-1$ //$NON-NLS-2$
+ return OpenTracingField.parseJson(jaegerJson, processField);
+ }
+
+ /**
+ * Convert OTLP span data to Jaeger-compatible JSON string that
+ * OpenTracingField.parseJson can handle.
+ */
+ private static String toJaegerJson(JsonObject otlpRoot,
+ String name, String traceId, String spanId, long startTimeNanos,
+ long durationNanos, @Nullable String parentSpanId, String serviceName) {
+ JsonObject jaeger = new JsonObject();
+ jaeger.addProperty(IOpenTracingConstants.OPERATION_NAME, name);
+ jaeger.addProperty(IOpenTracingConstants.TRACE_ID, traceId);
+ jaeger.addProperty(IOpenTracingConstants.SPAN_ID, spanId);
+ // Jaeger uses microseconds
+ jaeger.addProperty(IOpenTracingConstants.START_TIME, startTimeNanos / 1000);
+ jaeger.addProperty(IOpenTracingConstants.DURATION, durationNanos / 1000);
+
+ // References
+ if (parentSpanId != null && !parentSpanId.isEmpty()) {
+ JsonArray refs = new JsonArray();
+ JsonObject ref = new JsonObject();
+ ref.addProperty(IOpenTracingConstants.REFERENCE_TYPE, "CHILD_OF"); //$NON-NLS-1$
+ ref.addProperty(IOpenTracingConstants.SPAN_ID, parentSpanId);
+ refs.add(ref);
+ jaeger.add(IOpenTracingConstants.REFERENCES, refs);
+ }
+
+ // Tags from OTLP attributes
+ JsonArray attributes = optJSONArray(otlpRoot, "attributes"); //$NON-NLS-1$
+ if (attributes != null) {
+ JsonArray tags = new JsonArray();
+ for (int i = 0; i < attributes.size(); i++) {
+ JsonObject attr = attributes.get(i).getAsJsonObject();
+ String key = attr.get("key").getAsString(); //$NON-NLS-1$
+ JsonObject valueObj = attr.getAsJsonObject("value"); //$NON-NLS-1$
+ String value = extractAttributeValue(valueObj);
+ JsonObject tag = new JsonObject();
+ tag.addProperty(IOpenTracingConstants.KEY, key);
+ tag.addProperty(IOpenTracingConstants.VALUE, value);
+ tags.add(tag);
+ }
+ // Add service.name as a tag
+ if (!serviceName.isEmpty()) {
+ JsonObject svcTag = new JsonObject();
+ svcTag.addProperty(IOpenTracingConstants.KEY, "service.name"); //$NON-NLS-1$
+ svcTag.addProperty(IOpenTracingConstants.VALUE, serviceName);
+ tags.add(svcTag);
+ }
+ jaeger.add(IOpenTracingConstants.TAGS, tags);
+ }
+
+ // Process ID - use service name
+ jaeger.addProperty(IOpenTracingConstants.PROCESS_ID, serviceName);
+
+ return G_SON.toJson(jaeger);
+ }
+
+ private static String extractAttributeValue(JsonObject valueObj) {
+ if (valueObj == null) {
+ return ""; //$NON-NLS-1$
+ }
+ if (valueObj.has("stringValue")) { //$NON-NLS-1$
+ return valueObj.get("stringValue").getAsString(); //$NON-NLS-1$
+ }
+ if (valueObj.has("intValue")) { //$NON-NLS-1$
+ return valueObj.get("intValue").getAsString(); //$NON-NLS-1$
+ }
+ if (valueObj.has("boolValue")) { //$NON-NLS-1$
+ return valueObj.get("boolValue").getAsString(); //$NON-NLS-1$
+ }
+ if (valueObj.has("doubleValue")) { //$NON-NLS-1$
+ return valueObj.get("doubleValue").getAsString(); //$NON-NLS-1$
+ }
+ if (valueObj.has("arrayValue")) { //$NON-NLS-1$
+ return valueObj.get("arrayValue").toString(); //$NON-NLS-1$
+ }
+ return valueObj.toString();
+ }
+
+ private static @Nullable String optString(JsonObject root, String key) {
+ JsonElement el = root.get(key);
+ return el != null && !el.isJsonNull() ? el.getAsString() : null;
+ }
+
+ private static @Nullable JsonArray optJSONArray(JsonObject root, String key) {
+ JsonElement el = root.get(key);
+ return el != null && el.isJsonArray() ? el.getAsJsonArray() : null;
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
new file mode 100644
index 000000000..2572851e7
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.tracecompass.incubator.internal.otlp.core.Activator;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.stream.JsonReader;
+
+/**
+ * Sorting job for OTLP traces. Flattens the nested resourceSpans/scopeSpans
+ * structure into individual span JSON objects sorted by startTimeUnixNano.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpSortingJob extends Job {
+
+ private static final Gson G_SON = new Gson();
+
+ private final ITmfTrace fTrace;
+ private final String fPath;
+
+ /**
+ * Constructor
+ *
+ * @param trace
+ * the trace
+ * @param path
+ * path to the OTLP JSON file
+ */
+ public OtlpSortingJob(ITmfTrace trace, String path) {
+ super("Sorting OTLP trace"); //$NON-NLS-1$
+ fTrace = trace;
+ fPath = path;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ List allSpans = new ArrayList<>();
+
+ try (FileReader fileReader = new FileReader(fPath);
+ JsonReader reader = new JsonReader(fileReader)) {
+ JsonObject root = G_SON.fromJson(reader, JsonObject.class);
+ JsonArray resourceSpans = root.getAsJsonArray("resourceSpans"); //$NON-NLS-1$
+ if (resourceSpans == null) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No resourceSpans found"); //$NON-NLS-1$
+ }
+
+ for (JsonElement rsElement : resourceSpans) {
+ JsonObject rs = rsElement.getAsJsonObject();
+ String serviceName = extractServiceName(rs);
+ JsonArray scopeSpans = rs.getAsJsonArray("scopeSpans"); //$NON-NLS-1$
+ if (scopeSpans == null) {
+ continue;
+ }
+ for (JsonElement ssElement : scopeSpans) {
+ JsonObject ss = ssElement.getAsJsonObject();
+ JsonArray spans = ss.getAsJsonArray("spans"); //$NON-NLS-1$
+ if (spans == null) {
+ continue;
+ }
+ for (JsonElement spanElement : spans) {
+ JsonObject span = spanElement.getAsJsonObject();
+ // Inject service name into the span for later use
+ span.addProperty("serviceName", serviceName); //$NON-NLS-1$
+ allSpans.add(span);
+ }
+ }
+ }
+ }
+
+ // Sort by startTimeUnixNano
+ allSpans.sort(Comparator.comparingLong(span -> {
+ JsonElement el = span.get("startTimeUnixNano"); //$NON-NLS-1$
+ return el != null ? Long.parseLong(el.getAsString()) : 0L;
+ }));
+
+ // Write sorted spans as a JSON array (one object per line)
+ String dir = TmfTraceManager.getSupplementaryFileDir(fTrace);
+ File outFile = new File(dir + new File(fPath).getName());
+ outFile.getParentFile().mkdirs();
+ try (PrintWriter writer = new PrintWriter(outFile)) {
+ writer.println('[');
+ for (int i = 0; i < allSpans.size(); i++) {
+ writer.print(G_SON.toJson(allSpans.get(i)));
+ if (i < allSpans.size() - 1) {
+ writer.println(',');
+ } else {
+ writer.println();
+ }
+ }
+ writer.println(']');
+ }
+
+ return Status.OK_STATUS;
+ } catch (IOException e) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error sorting OTLP trace", e); //$NON-NLS-1$
+ }
+ }
+
+ private static String extractServiceName(JsonObject resourceSpan) {
+ JsonObject resource = resourceSpan.getAsJsonObject("resource"); //$NON-NLS-1$
+ if (resource == null) {
+ return ""; //$NON-NLS-1$
+ }
+ JsonArray attributes = resource.getAsJsonArray("attributes"); //$NON-NLS-1$
+ if (attributes == null) {
+ return ""; //$NON-NLS-1$
+ }
+ for (JsonElement attrElement : attributes) {
+ JsonObject attr = attrElement.getAsJsonObject();
+ if ("service.name".equals(attr.get("key").getAsString())) { //$NON-NLS-1$ //$NON-NLS-2$
+ JsonObject value = attr.getAsJsonObject("value"); //$NON-NLS-1$
+ if (value != null && value.has("stringValue")) { //$NON-NLS-1$
+ return value.get("stringValue").getAsString(); //$NON-NLS-1$
+ }
+ }
+ }
+ return ""; //$NON-NLS-1$
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
new file mode 100644
index 000000000..e7201746c
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
@@ -0,0 +1,202 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.IOpenTracingConstants;
+import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.OpenTracingAspects;
+import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.OpenTracingEvent;
+import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.OpenTracingField;
+import org.eclipse.tracecompass.incubator.internal.otlp.core.Activator;
+import org.eclipse.tracecompass.internal.provisional.jsontrace.core.trace.JsonTrace;
+import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
+import org.eclipse.tracecompass.tmf.core.event.ITmfLostEvent;
+import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
+import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
+import org.eclipse.tracecompass.tmf.core.io.BufferedRandomAccessFile;
+import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
+import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
+import org.eclipse.tracecompass.tmf.core.trace.TraceValidationStatus;
+import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
+import org.eclipse.tracecompass.tmf.core.trace.location.TmfLongLocation;
+
+import com.google.common.collect.Lists;
+import com.google.gson.stream.JsonReader;
+
+/**
+ * OTLP (OpenTelemetry Protocol) trace. Reads OTLP JSON traces exported from
+ * Jaeger or other OpenTelemetry-compatible systems.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpTrace extends JsonTrace {
+
+ private final @NonNull Iterable<@NonNull ITmfEventAspect>> fEventAspects;
+
+ /**
+ * Constructor
+ */
+ @SuppressWarnings("null")
+ public OtlpTrace() {
+ fEventAspects = Lists.newArrayList(OpenTracingAspects.getAspects());
+ }
+
+ @Override
+ public void initTrace(IResource resource, String path, Class extends ITmfEvent> type) throws TmfTraceException {
+ super.initTrace(resource, path, type);
+ fProperties.put("Type", "OTLP"); //$NON-NLS-1$ //$NON-NLS-2$
+ String dir = TmfTraceManager.getSupplementaryFileDir(this);
+ fFile = new File(dir + new File(path).getName());
+ if (!fFile.exists()) {
+ Job sortJob = new OtlpSortingJob(this, path);
+ sortJob.schedule();
+ while (sortJob.getResult() == null) {
+ try {
+ sortJob.join();
+ } catch (InterruptedException e) {
+ throw new TmfTraceException(e.getMessage(), e);
+ }
+ }
+ IStatus result = sortJob.getResult();
+ if (!result.isOK()) {
+ throw new TmfTraceException("Job failed " + result.getMessage()); //$NON-NLS-1$
+ }
+ }
+ try {
+ fFileInput = new BufferedRandomAccessFile(fFile, "r"); //$NON-NLS-1$
+ goToCorrectStart(fFileInput);
+ } catch (IOException e) {
+ throw new TmfTraceException(e.getMessage(), e);
+ }
+ }
+
+ @Override
+ public IStatus validate(IProject project, String path) {
+ File file = new File(path);
+ if (!file.exists()) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "File not found: " + path); //$NON-NLS-1$
+ }
+ if (!file.isFile()) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Not a file. It's a directory: " + path); //$NON-NLS-1$
+ }
+ try {
+ if (!TmfTraceUtils.isText(file)) {
+ return new TraceValidationStatus(0, Activator.PLUGIN_ID);
+ }
+ } catch (IOException e) {
+ Activator.getInstance().logError("Error validating file: " + path, e); //$NON-NLS-1$
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "IOException validating file: " + path, e); //$NON-NLS-1$
+ }
+ // Check if this is an OTLP format file by looking for "resourceSpans"
+ try (FileReader fileReader = new FileReader(path);
+ JsonReader reader = new JsonReader(fileReader)) {
+ reader.beginObject();
+ if (reader.hasNext()) {
+ String name = reader.nextName();
+ if ("resourceSpans".equals(name)) { //$NON-NLS-1$
+ return new TraceValidationStatus(MAX_CONFIDENCE, Activator.PLUGIN_ID);
+ }
+ }
+ } catch (Exception e) {
+ // Not valid JSON or not OTLP
+ }
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Not an OTLP trace"); //$NON-NLS-1$
+ }
+
+ /**
+ * For OTLP, the sorted file is already a flat list of JSON objects (one per
+ * line), so we just need to skip to the start of the array.
+ */
+ private static void goToCorrectStart(RandomAccessFile rafile) throws IOException {
+ // The sorted file starts with '[', skip it
+ int val = rafile.read();
+ while (val != -1 && val != '{') {
+ val = rafile.read();
+ }
+ if (val == '{') {
+ rafile.seek(rafile.getFilePointer() - 1);
+ }
+ }
+
+ @Override
+ public Iterable<@NonNull ITmfEventAspect>> getEventAspects() {
+ return fEventAspects;
+ }
+
+ @Override
+ public ITmfEvent parseEvent(ITmfContext context) {
+ @Nullable
+ ITmfLocation location = context.getLocation();
+ if (location instanceof TmfLongLocation) {
+ TmfLongLocation tmfLongLocation = (TmfLongLocation) location;
+ Long locationInfo = tmfLongLocation.getLocationInfo();
+ if (location.equals(NULL_LOCATION)) {
+ locationInfo = 0L;
+ }
+ try {
+ if (!locationInfo.equals(fFileInput.getFilePointer())) {
+ fFileInput.seek(locationInfo);
+ }
+ String nextJson = readNextEventString(() -> fFileInput.read());
+ if (nextJson != null) {
+ OpenTracingField field = OtlpField.parseJson(nextJson);
+ if (field == null) {
+ return null;
+ }
+ return new OpenTracingEvent(this, context.getRank(), field);
+ }
+ } catch (IOException e) {
+ Activator.getInstance().logError("Error parsing event", e); //$NON-NLS-1$
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected synchronized void updateAttributes(final ITmfContext context, final @NonNull ITmfEvent event) {
+ ITmfTimestamp timestamp = event.getTimestamp();
+ Long duration = event.getContent().getFieldValue(Long.class, IOpenTracingConstants.DURATION);
+ ITmfTimestamp endTime = duration != null ? TmfTimestamp.fromNanos(timestamp.toNanos() + duration) : timestamp;
+ if (event instanceof ITmfLostEvent) {
+ endTime = ((ITmfLostEvent) event).getTimeRange().getEndTime();
+ }
+ if (getStartTime().equals(TmfTimestamp.BIG_BANG) || (getStartTime().compareTo(timestamp) > 0)) {
+ setStartTime(timestamp);
+ }
+ if (getEndTime().equals(TmfTimestamp.BIG_CRUNCH) || (getEndTime().compareTo(endTime) < 0)) {
+ setEndTime(endTime);
+ }
+ if (context.hasValidRank()) {
+ long rank = context.getRank();
+ if (getNbEvents() <= rank) {
+ setNbEvents(rank + 1);
+ }
+ if (getIndexer() != null) {
+ getIndexer().updateIndex(context, timestamp);
+ }
+ }
+ }
+}
diff --git a/tracetypes/pom.xml b/tracetypes/pom.xml
index 9a8ab5ed8..680cc3be9 100644
--- a/tracetypes/pom.xml
+++ b/tracetypes/pom.xml
@@ -81,6 +81,8 @@
org.eclipse.tracecompass.incubator.dpdk.core
org.eclipse.tracecompass.incubator.dpdk.core.tests
org.eclipse.tracecompass.incubator.dpdk.ui
+ org.eclipse.tracecompass.incubator.otlp.core
+ org.eclipse.tracecompass.incubator.otlp.core.tests
From d20098fa080e4c38a4059ef1bf996fe05897f50f Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 13:53:44 -0400
Subject: [PATCH 02/12] otlp: Add OTLP core plugin to OpenTracing feature
Include org.eclipse.tracecompass.incubator.otlp.core in the
opentracing feature so it is available to end users when they
install the distributed tracing support.
This patch was made with the assistance of claude sonnet 4.6
Change-Id: Ia366b0fe83149e2a924d784380d93e8d0f01eb5a
Signed-off-by: Matthew Khouzam
---
.../feature.xml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.opentracing/feature.xml b/tracetypes/org.eclipse.tracecompass.incubator.opentracing/feature.xml
index 367bcb69c..669939f8e 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.opentracing/feature.xml
+++ b/tracetypes/org.eclipse.tracecompass.incubator.opentracing/feature.xml
@@ -58,4 +58,11 @@
version="0.0.0"
unpack="false"/>
+
+
From dc74447326b6bc613fd3a7fa92886eabaff17a2c Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 13:59:18 -0400
Subject: [PATCH 03/12] otlp: Add native OTLP span data model
Introduce OtlpSpan, OtlpSpanKind, OtlpSpanStatus, OtlpSpanEvent, and
OtlpSpanLink to preserve OTLP-specific fields that are lost in the
Jaeger conversion. Add OtlpField.parseOtlpSpan() to parse the full
OTLP data natively alongside the OpenTracing-compatible path.
This patch was made with the assistance of claude sonnet 4.6
Change-Id: Ib112618004d491e3be909715563b9b53fc54a68c
Signed-off-by: Matthew Khouzam
---
.../internal/otlp/core/trace/OtlpField.java | 189 +++++++
.../internal/otlp/core/trace/OtlpSpan.java | 464 ++++++++++++++++++
.../otlp/core/trace/OtlpSpanEvent.java | 74 +++
.../otlp/core/trace/OtlpSpanKind.java | 62 +++
.../otlp/core/trace/OtlpSpanLink.java | 87 ++++
.../otlp/core/trace/OtlpSpanStatus.java | 91 ++++
6 files changed, 967 insertions(+)
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanEvent.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanKind.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanLink.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanStatus.java
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
index c8df433ec..720435549 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
@@ -11,6 +11,12 @@
package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.IOpenTracingConstants;
import org.eclipse.tracecompass.incubator.internal.opentracing.core.event.OpenTracingField;
@@ -98,6 +104,95 @@ private OtlpField() {
return OpenTracingField.parseJson(jaegerJson, processField);
}
+ /**
+ * Parse an OTLP span JSON string into a native {@link OtlpSpan} model that
+ * preserves all OTLP-specific fields.
+ *
+ * @param jsonString
+ * the OTLP span JSON
+ * @return an OtlpSpan, or null if parsing fails
+ */
+ public static @Nullable OtlpSpan parseOtlpSpan(String jsonString) {
+ JsonObject root = G_SON.fromJson(jsonString, JsonObject.class);
+ if (root == null) {
+ return null;
+ }
+
+ String name = optString(root, "name"); //$NON-NLS-1$
+ if (name == null) {
+ return null;
+ }
+ String traceId = optString(root, "traceId"); //$NON-NLS-1$
+ String spanId = optString(root, "spanId"); //$NON-NLS-1$
+ if (traceId == null || spanId == null) {
+ return null;
+ }
+
+ String startTimeStr = optString(root, "startTimeUnixNano"); //$NON-NLS-1$
+ String endTimeStr = optString(root, "endTimeUnixNano"); //$NON-NLS-1$
+ if (startTimeStr == null || endTimeStr == null) {
+ return null;
+ }
+
+ long startTimeNanos = Long.parseLong(startTimeStr);
+ long endTimeNanos = Long.parseLong(endTimeStr);
+ long durationNanos = endTimeNanos - startTimeNanos;
+
+ String parentSpanId = optString(root, "parentSpanId"); //$NON-NLS-1$
+ String serviceName = optString(root, "serviceName"); //$NON-NLS-1$
+ if (serviceName == null) {
+ serviceName = ""; //$NON-NLS-1$
+ }
+
+ // Parse kind
+ int kindValue = 0;
+ JsonElement kindEl = root.get("kind"); //$NON-NLS-1$
+ if (kindEl != null && !kindEl.isJsonNull()) {
+ kindValue = kindEl.getAsInt();
+ }
+
+ // Parse status
+ OtlpSpanStatus status = parseStatus(root);
+
+ // Parse attributes
+ Map<@NonNull String, @NonNull String> attributes = parseAttributes(optJSONArray(root, "attributes")); //$NON-NLS-1$
+
+ // Parse events
+ List<@NonNull OtlpSpanEvent> events = parseSpanEvents(optJSONArray(root, "events")); //$NON-NLS-1$
+
+ // Parse links
+ List<@NonNull OtlpSpanLink> links = parseSpanLinks(optJSONArray(root, "links")); //$NON-NLS-1$
+
+ // Parse dropped counts
+ int droppedAttributesCount = optInt(root, "droppedAttributesCount"); //$NON-NLS-1$
+ int droppedEventsCount = optInt(root, "droppedEventsCount"); //$NON-NLS-1$
+ int droppedLinksCount = optInt(root, "droppedLinksCount"); //$NON-NLS-1$
+
+ // Parse instrumentation scope (if injected)
+ String scopeName = optString(root, "instrumentationScopeName"); //$NON-NLS-1$
+ String scopeVersion = optString(root, "instrumentationScopeVersion"); //$NON-NLS-1$
+
+ return new OtlpSpan.Builder()
+ .traceId(traceId)
+ .spanId(spanId)
+ .parentSpanId(parentSpanId)
+ .operationName(name)
+ .startTimeNanos(startTimeNanos)
+ .durationNanos(durationNanos)
+ .serviceName(serviceName)
+ .kind(OtlpSpanKind.fromValue(kindValue))
+ .status(status)
+ .attributes(attributes)
+ .events(events)
+ .links(links)
+ .instrumentationScopeName(scopeName)
+ .instrumentationScopeVersion(scopeVersion)
+ .droppedAttributesCount(droppedAttributesCount)
+ .droppedEventsCount(droppedEventsCount)
+ .droppedLinksCount(droppedLinksCount)
+ .build();
+ }
+
/**
* Convert OTLP span data to Jaeger-compatible JSON string that
* OpenTracingField.parseJson can handle.
@@ -153,6 +248,95 @@ private static String toJaegerJson(JsonObject otlpRoot,
return G_SON.toJson(jaeger);
}
+ private static OtlpSpanStatus parseStatus(JsonObject root) {
+ JsonElement statusEl = root.get("status"); //$NON-NLS-1$
+ if (statusEl == null || !statusEl.isJsonObject()) {
+ return new OtlpSpanStatus(OtlpSpanStatus.STATUS_CODE_UNSET, null);
+ }
+ JsonObject statusObj = statusEl.getAsJsonObject();
+ int code = OtlpSpanStatus.STATUS_CODE_UNSET;
+ JsonElement codeEl = statusObj.get("code"); //$NON-NLS-1$
+ if (codeEl != null && !codeEl.isJsonNull()) {
+ code = codeEl.getAsInt();
+ }
+ String message = null;
+ JsonElement msgEl = statusObj.get("message"); //$NON-NLS-1$
+ if (msgEl != null && !msgEl.isJsonNull()) {
+ message = msgEl.getAsString();
+ }
+ return new OtlpSpanStatus(code, message);
+ }
+
+ private static @NonNull Map<@NonNull String, @NonNull String> parseAttributes(@Nullable JsonArray attributes) {
+ if (attributes == null || attributes.size() == 0) {
+ return new HashMap<>();
+ }
+ Map<@NonNull String, @NonNull String> result = new HashMap<>();
+ for (int i = 0; i < attributes.size(); i++) {
+ JsonObject attr = attributes.get(i).getAsJsonObject();
+ JsonElement keyEl = attr.get("key"); //$NON-NLS-1$
+ if (keyEl == null) {
+ continue;
+ }
+ String key = keyEl.getAsString();
+ JsonObject valueObj = attr.getAsJsonObject("value"); //$NON-NLS-1$
+ String value = extractAttributeValue(valueObj);
+ result.put(key, value);
+ }
+ return result;
+ }
+
+ private static @NonNull List<@NonNull OtlpSpanEvent> parseSpanEvents(@Nullable JsonArray events) {
+ if (events == null || events.size() == 0) {
+ return new ArrayList<>();
+ }
+ List<@NonNull OtlpSpanEvent> result = new ArrayList<>();
+ for (int i = 0; i < events.size(); i++) {
+ JsonObject eventObj = events.get(i).getAsJsonObject();
+ String eventName = ""; //$NON-NLS-1$
+ JsonElement nameEl = eventObj.get("name"); //$NON-NLS-1$
+ if (nameEl != null && !nameEl.isJsonNull()) {
+ eventName = nameEl.getAsString();
+ }
+ long timeUnixNano = 0;
+ JsonElement timeEl = eventObj.get("timeUnixNano"); //$NON-NLS-1$
+ if (timeEl != null && !timeEl.isJsonNull()) {
+ timeUnixNano = Long.parseLong(timeEl.getAsString());
+ }
+ Map<@NonNull String, @NonNull String> attrs = parseAttributes(optJSONArray(eventObj, "attributes")); //$NON-NLS-1$
+ result.add(new OtlpSpanEvent(eventName, timeUnixNano, attrs));
+ }
+ return result;
+ }
+
+ private static @NonNull List<@NonNull OtlpSpanLink> parseSpanLinks(@Nullable JsonArray links) {
+ if (links == null || links.size() == 0) {
+ return new ArrayList<>();
+ }
+ List<@NonNull OtlpSpanLink> result = new ArrayList<>();
+ for (int i = 0; i < links.size(); i++) {
+ JsonObject linkObj = links.get(i).getAsJsonObject();
+ String linkTraceId = ""; //$NON-NLS-1$
+ JsonElement traceIdEl = linkObj.get("traceId"); //$NON-NLS-1$
+ if (traceIdEl != null && !traceIdEl.isJsonNull()) {
+ linkTraceId = traceIdEl.getAsString();
+ }
+ String linkSpanId = ""; //$NON-NLS-1$
+ JsonElement spanIdEl = linkObj.get("spanId"); //$NON-NLS-1$
+ if (spanIdEl != null && !spanIdEl.isJsonNull()) {
+ linkSpanId = spanIdEl.getAsString();
+ }
+ String traceState = null;
+ JsonElement stateEl = linkObj.get("traceState"); //$NON-NLS-1$
+ if (stateEl != null && !stateEl.isJsonNull()) {
+ traceState = stateEl.getAsString();
+ }
+ Map<@NonNull String, @NonNull String> attrs = parseAttributes(optJSONArray(linkObj, "attributes")); //$NON-NLS-1$
+ result.add(new OtlpSpanLink(linkTraceId, linkSpanId, attrs, traceState));
+ }
+ return result;
+ }
+
private static String extractAttributeValue(JsonObject valueObj) {
if (valueObj == null) {
return ""; //$NON-NLS-1$
@@ -180,6 +364,11 @@ private static String extractAttributeValue(JsonObject valueObj) {
return el != null && !el.isJsonNull() ? el.getAsString() : null;
}
+ private static int optInt(JsonObject root, String key) {
+ JsonElement el = root.get(key);
+ return el != null && !el.isJsonNull() ? el.getAsInt() : 0;
+ }
+
private static @Nullable JsonArray optJSONArray(JsonObject root, String key) {
JsonElement el = root.get(key);
return el != null && el.isJsonArray() ? el.getAsJsonArray() : null;
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java
new file mode 100644
index 000000000..5ffd757e4
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java
@@ -0,0 +1,464 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * Native OTLP span data model that preserves all OTLP-specific fields beyond
+ * what the OpenTracing/Jaeger model supports.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpSpan {
+
+ // OpenTracing-compatible fields
+ private final @NonNull String fTraceId;
+ private final @NonNull String fSpanId;
+ private final @Nullable String fParentSpanId;
+ private final @NonNull String fOperationName;
+ private final long fStartTimeNanos;
+ private final long fDurationNanos;
+ private final @NonNull String fServiceName;
+
+ // OTLP-specific fields
+ private final @NonNull OtlpSpanKind fKind;
+ private final @NonNull OtlpSpanStatus fStatus;
+ private final @NonNull List<@NonNull OtlpSpanEvent> fEvents;
+ private final @NonNull List<@NonNull OtlpSpanLink> fLinks;
+ private final @Nullable String fInstrumentationScopeName;
+ private final @Nullable String fInstrumentationScopeVersion;
+ private final @NonNull Map<@NonNull String, @NonNull String> fAttributes;
+ private final int fDroppedAttributesCount;
+ private final int fDroppedEventsCount;
+ private final int fDroppedLinksCount;
+
+ /**
+ * Constructor
+ *
+ * @param builder
+ * the builder to construct this span from
+ */
+ private OtlpSpan(Builder builder) {
+ fTraceId = builder.fTraceId;
+ fSpanId = builder.fSpanId;
+ fParentSpanId = builder.fParentSpanId;
+ fOperationName = builder.fOperationName;
+ fStartTimeNanos = builder.fStartTimeNanos;
+ fDurationNanos = builder.fDurationNanos;
+ fServiceName = builder.fServiceName;
+ fKind = builder.fKind;
+ fStatus = builder.fStatus;
+ fEvents = Collections.unmodifiableList(builder.fEvents);
+ fLinks = Collections.unmodifiableList(builder.fLinks);
+ fInstrumentationScopeName = builder.fInstrumentationScopeName;
+ fInstrumentationScopeVersion = builder.fInstrumentationScopeVersion;
+ fAttributes = Collections.unmodifiableMap(builder.fAttributes);
+ fDroppedAttributesCount = builder.fDroppedAttributesCount;
+ fDroppedEventsCount = builder.fDroppedEventsCount;
+ fDroppedLinksCount = builder.fDroppedLinksCount;
+ }
+
+ /**
+ * Get the trace ID
+ *
+ * @return the trace ID
+ */
+ public @NonNull String getTraceId() {
+ return fTraceId;
+ }
+
+ /**
+ * Get the span ID
+ *
+ * @return the span ID
+ */
+ public @NonNull String getSpanId() {
+ return fSpanId;
+ }
+
+ /**
+ * Get the parent span ID
+ *
+ * @return the parent span ID, or null if this is a root span
+ */
+ public @Nullable String getParentSpanId() {
+ return fParentSpanId;
+ }
+
+ /**
+ * Get the operation name
+ *
+ * @return the operation name
+ */
+ public @NonNull String getOperationName() {
+ return fOperationName;
+ }
+
+ /**
+ * Get the start time in nanoseconds since Unix epoch
+ *
+ * @return the start time in nanoseconds
+ */
+ public long getStartTimeNanos() {
+ return fStartTimeNanos;
+ }
+
+ /**
+ * Get the duration in nanoseconds
+ *
+ * @return the duration in nanoseconds
+ */
+ public long getDurationNanos() {
+ return fDurationNanos;
+ }
+
+ /**
+ * Get the service name
+ *
+ * @return the service name
+ */
+ public @NonNull String getServiceName() {
+ return fServiceName;
+ }
+
+ /**
+ * Get the span kind
+ *
+ * @return the span kind
+ */
+ public @NonNull OtlpSpanKind getKind() {
+ return fKind;
+ }
+
+ /**
+ * Get the span status
+ *
+ * @return the span status
+ */
+ public @NonNull OtlpSpanStatus getStatus() {
+ return fStatus;
+ }
+
+ /**
+ * Get the span events (timestamped logs)
+ *
+ * @return an unmodifiable list of span events
+ */
+ public @NonNull List<@NonNull OtlpSpanEvent> getEvents() {
+ return fEvents;
+ }
+
+ /**
+ * Get the span links
+ *
+ * @return an unmodifiable list of span links
+ */
+ public @NonNull List<@NonNull OtlpSpanLink> getLinks() {
+ return fLinks;
+ }
+
+ /**
+ * Get the instrumentation scope name
+ *
+ * @return the scope name, or null if not set
+ */
+ public @Nullable String getInstrumentationScopeName() {
+ return fInstrumentationScopeName;
+ }
+
+ /**
+ * Get the instrumentation scope version
+ *
+ * @return the scope version, or null if not set
+ */
+ public @Nullable String getInstrumentationScopeVersion() {
+ return fInstrumentationScopeVersion;
+ }
+
+ /**
+ * Get the span attributes
+ *
+ * @return an unmodifiable map of attributes
+ */
+ public @NonNull Map<@NonNull String, @NonNull String> getAttributes() {
+ return fAttributes;
+ }
+
+ /**
+ * Get the number of dropped attributes
+ *
+ * @return the dropped attributes count
+ */
+ public int getDroppedAttributesCount() {
+ return fDroppedAttributesCount;
+ }
+
+ /**
+ * Get the number of dropped events
+ *
+ * @return the dropped events count
+ */
+ public int getDroppedEventsCount() {
+ return fDroppedEventsCount;
+ }
+
+ /**
+ * Get the number of dropped links
+ *
+ * @return the dropped links count
+ */
+ public int getDroppedLinksCount() {
+ return fDroppedLinksCount;
+ }
+
+ /**
+ * Builder for {@link OtlpSpan}
+ */
+ public static class Builder {
+ private @NonNull String fTraceId = ""; //$NON-NLS-1$
+ private @NonNull String fSpanId = ""; //$NON-NLS-1$
+ private @Nullable String fParentSpanId;
+ private @NonNull String fOperationName = ""; //$NON-NLS-1$
+ private long fStartTimeNanos;
+ private long fDurationNanos;
+ private @NonNull String fServiceName = ""; //$NON-NLS-1$
+ private @NonNull OtlpSpanKind fKind = OtlpSpanKind.INTERNAL;
+ private @NonNull OtlpSpanStatus fStatus = new OtlpSpanStatus(OtlpSpanStatus.STATUS_CODE_UNSET, null);
+ private @NonNull List<@NonNull OtlpSpanEvent> fEvents = Collections.emptyList();
+ private @NonNull List<@NonNull OtlpSpanLink> fLinks = Collections.emptyList();
+ private @Nullable String fInstrumentationScopeName;
+ private @Nullable String fInstrumentationScopeVersion;
+ private @NonNull Map<@NonNull String, @NonNull String> fAttributes = Collections.emptyMap();
+ private int fDroppedAttributesCount;
+ private int fDroppedEventsCount;
+ private int fDroppedLinksCount;
+
+ /**
+ * Set the trace ID
+ *
+ * @param traceId
+ * the trace ID
+ * @return this builder
+ */
+ public Builder traceId(@NonNull String traceId) {
+ fTraceId = traceId;
+ return this;
+ }
+
+ /**
+ * Set the span ID
+ *
+ * @param spanId
+ * the span ID
+ * @return this builder
+ */
+ public Builder spanId(@NonNull String spanId) {
+ fSpanId = spanId;
+ return this;
+ }
+
+ /**
+ * Set the parent span ID
+ *
+ * @param parentSpanId
+ * the parent span ID
+ * @return this builder
+ */
+ public Builder parentSpanId(@Nullable String parentSpanId) {
+ fParentSpanId = parentSpanId;
+ return this;
+ }
+
+ /**
+ * Set the operation name
+ *
+ * @param operationName
+ * the operation name
+ * @return this builder
+ */
+ public Builder operationName(@NonNull String operationName) {
+ fOperationName = operationName;
+ return this;
+ }
+
+ /**
+ * Set the start time in nanoseconds
+ *
+ * @param startTimeNanos
+ * the start time in nanoseconds since Unix epoch
+ * @return this builder
+ */
+ public Builder startTimeNanos(long startTimeNanos) {
+ fStartTimeNanos = startTimeNanos;
+ return this;
+ }
+
+ /**
+ * Set the duration in nanoseconds
+ *
+ * @param durationNanos
+ * the duration in nanoseconds
+ * @return this builder
+ */
+ public Builder durationNanos(long durationNanos) {
+ fDurationNanos = durationNanos;
+ return this;
+ }
+
+ /**
+ * Set the service name
+ *
+ * @param serviceName
+ * the service name
+ * @return this builder
+ */
+ public Builder serviceName(@NonNull String serviceName) {
+ fServiceName = serviceName;
+ return this;
+ }
+
+ /**
+ * Set the span kind
+ *
+ * @param kind
+ * the span kind
+ * @return this builder
+ */
+ public Builder kind(@NonNull OtlpSpanKind kind) {
+ fKind = kind;
+ return this;
+ }
+
+ /**
+ * Set the span status
+ *
+ * @param status
+ * the span status
+ * @return this builder
+ */
+ public Builder status(@NonNull OtlpSpanStatus status) {
+ fStatus = status;
+ return this;
+ }
+
+ /**
+ * Set the span events
+ *
+ * @param events
+ * the span events
+ * @return this builder
+ */
+ public Builder events(@NonNull List<@NonNull OtlpSpanEvent> events) {
+ fEvents = events;
+ return this;
+ }
+
+ /**
+ * Set the span links
+ *
+ * @param links
+ * the span links
+ * @return this builder
+ */
+ public Builder links(@NonNull List<@NonNull OtlpSpanLink> links) {
+ fLinks = links;
+ return this;
+ }
+
+ /**
+ * Set the instrumentation scope name
+ *
+ * @param name
+ * the scope name
+ * @return this builder
+ */
+ public Builder instrumentationScopeName(@Nullable String name) {
+ fInstrumentationScopeName = name;
+ return this;
+ }
+
+ /**
+ * Set the instrumentation scope version
+ *
+ * @param version
+ * the scope version
+ * @return this builder
+ */
+ public Builder instrumentationScopeVersion(@Nullable String version) {
+ fInstrumentationScopeVersion = version;
+ return this;
+ }
+
+ /**
+ * Set the span attributes
+ *
+ * @param attributes
+ * the attributes map
+ * @return this builder
+ */
+ public Builder attributes(@NonNull Map<@NonNull String, @NonNull String> attributes) {
+ fAttributes = attributes;
+ return this;
+ }
+
+ /**
+ * Set the dropped attributes count
+ *
+ * @param count
+ * the dropped attributes count
+ * @return this builder
+ */
+ public Builder droppedAttributesCount(int count) {
+ fDroppedAttributesCount = count;
+ return this;
+ }
+
+ /**
+ * Set the dropped events count
+ *
+ * @param count
+ * the dropped events count
+ * @return this builder
+ */
+ public Builder droppedEventsCount(int count) {
+ fDroppedEventsCount = count;
+ return this;
+ }
+
+ /**
+ * Set the dropped links count
+ *
+ * @param count
+ * the dropped links count
+ * @return this builder
+ */
+ public Builder droppedLinksCount(int count) {
+ fDroppedLinksCount = count;
+ return this;
+ }
+
+ /**
+ * Build the OtlpSpan
+ *
+ * @return the constructed OtlpSpan
+ */
+ public OtlpSpan build() {
+ return new OtlpSpan(this);
+ }
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanEvent.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanEvent.java
new file mode 100644
index 000000000..b641d37b6
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanEvent.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+/**
+ * Represents an event (timestamped log) within an OTLP span. This is NOT a TMF
+ * event — it is a sub-event within the span data model.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpSpanEvent {
+
+ private final @NonNull String fName;
+ private final long fTimeUnixNano;
+ private final @NonNull Map<@NonNull String, @NonNull String> fAttributes;
+
+ /**
+ * Constructor
+ *
+ * @param name
+ * the event name
+ * @param timeUnixNano
+ * the event timestamp in nanoseconds since Unix epoch
+ * @param attributes
+ * the event attributes
+ */
+ public OtlpSpanEvent(@NonNull String name, long timeUnixNano,
+ @NonNull Map<@NonNull String, @NonNull String> attributes) {
+ fName = name;
+ fTimeUnixNano = timeUnixNano;
+ fAttributes = Collections.unmodifiableMap(attributes);
+ }
+
+ /**
+ * Get the event name
+ *
+ * @return the event name
+ */
+ public @NonNull String getName() {
+ return fName;
+ }
+
+ /**
+ * Get the event timestamp in nanoseconds since Unix epoch
+ *
+ * @return the timestamp in nanoseconds
+ */
+ public long getTimeUnixNano() {
+ return fTimeUnixNano;
+ }
+
+ /**
+ * Get the event attributes
+ *
+ * @return an unmodifiable map of attributes
+ */
+ public @NonNull Map<@NonNull String, @NonNull String> getAttributes() {
+ return fAttributes;
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanKind.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanKind.java
new file mode 100644
index 000000000..f6aec6190
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanKind.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+/**
+ * Enum representing the OTLP span kind.
+ *
+ * @author Matthew Khouzam
+ */
+public enum OtlpSpanKind {
+
+ /** Internal span (default) */
+ INTERNAL(0),
+ /** Server span */
+ SERVER(1),
+ /** Client span */
+ CLIENT(2),
+ /** Producer span */
+ PRODUCER(3),
+ /** Consumer span */
+ CONSUMER(4);
+
+ private final int fValue;
+
+ OtlpSpanKind(int value) {
+ fValue = value;
+ }
+
+ /**
+ * Get the numeric value of this span kind
+ *
+ * @return the numeric value
+ */
+ public int getValue() {
+ return fValue;
+ }
+
+ /**
+ * Get the span kind from its numeric value
+ *
+ * @param value
+ * the numeric value (0-4)
+ * @return the corresponding span kind, or INTERNAL if not recognized
+ */
+ public static OtlpSpanKind fromValue(int value) {
+ for (OtlpSpanKind kind : values()) {
+ if (kind.fValue == value) {
+ return kind;
+ }
+ }
+ return INTERNAL;
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanLink.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanLink.java
new file mode 100644
index 000000000..57602166b
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanLink.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * Represents a link from one span to another in the OTLP model.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpSpanLink {
+
+ private final @NonNull String fTraceId;
+ private final @NonNull String fSpanId;
+ private final @NonNull Map<@NonNull String, @NonNull String> fAttributes;
+ private final @Nullable String fTraceState;
+
+ /**
+ * Constructor
+ *
+ * @param traceId
+ * the trace ID of the linked span
+ * @param spanId
+ * the span ID of the linked span
+ * @param attributes
+ * link attributes
+ * @param traceState
+ * the trace state, may be null
+ */
+ public OtlpSpanLink(@NonNull String traceId, @NonNull String spanId,
+ @NonNull Map<@NonNull String, @NonNull String> attributes, @Nullable String traceState) {
+ fTraceId = traceId;
+ fSpanId = spanId;
+ fAttributes = Collections.unmodifiableMap(attributes);
+ fTraceState = traceState;
+ }
+
+ /**
+ * Get the trace ID
+ *
+ * @return the trace ID
+ */
+ public @NonNull String getTraceId() {
+ return fTraceId;
+ }
+
+ /**
+ * Get the span ID
+ *
+ * @return the span ID
+ */
+ public @NonNull String getSpanId() {
+ return fSpanId;
+ }
+
+ /**
+ * Get the link attributes
+ *
+ * @return an unmodifiable map of attributes
+ */
+ public @NonNull Map<@NonNull String, @NonNull String> getAttributes() {
+ return fAttributes;
+ }
+
+ /**
+ * Get the trace state
+ *
+ * @return the trace state, or null if not set
+ */
+ public @Nullable String getTraceState() {
+ return fTraceState;
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanStatus.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanStatus.java
new file mode 100644
index 000000000..d461413c0
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpanStatus.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * Represents an OTLP span status with a status code and optional message.
+ *
+ * Status codes:
+ *
+ * - 0 - UNSET
+ * - 1 - OK
+ * - 2 - ERROR
+ *
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpSpanStatus {
+
+ /** Status code: Unset */
+ public static final int STATUS_CODE_UNSET = 0;
+ /** Status code: OK */
+ public static final int STATUS_CODE_OK = 1;
+ /** Status code: Error */
+ public static final int STATUS_CODE_ERROR = 2;
+
+ private final int fCode;
+ private final @Nullable String fMessage;
+
+ /**
+ * Constructor
+ *
+ * @param code
+ * the status code (0=UNSET, 1=OK, 2=ERROR)
+ * @param message
+ * optional status message, may be null
+ */
+ public OtlpSpanStatus(int code, @Nullable String message) {
+ fCode = code;
+ fMessage = message;
+ }
+
+ /**
+ * Get the status code
+ *
+ * @return the status code
+ */
+ public int getCode() {
+ return fCode;
+ }
+
+ /**
+ * Get the status message
+ *
+ * @return the status message, or null if not set
+ */
+ public @Nullable String getMessage() {
+ return fMessage;
+ }
+
+ @Override
+ public @NonNull String toString() {
+ String msg = fMessage;
+ if (msg != null && !msg.isEmpty()) {
+ return getCodeName() + ": " + msg; //$NON-NLS-1$
+ }
+ return getCodeName();
+ }
+
+ private String getCodeName() {
+ switch (fCode) {
+ case STATUS_CODE_OK:
+ return "OK"; //$NON-NLS-1$
+ case STATUS_CODE_ERROR:
+ return "ERROR"; //$NON-NLS-1$
+ default:
+ return "UNSET"; //$NON-NLS-1$
+ }
+ }
+}
From 30bc3d9e138f9e556202526fefb49707ec16515e Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 14:00:46 -0400
Subject: [PATCH 04/12] otlp: Preserve OTLP resource attributes
Inject all resource attributes (service.version, host.name, etc.) into
the sorted span JSON and parse them into the native OtlpSpan model.
Also expose them as resource.* tags in the Jaeger-compatible path.
This patch was made with the assistance of claude sonnet 4.6
Change-Id: Ic98716ba906e5e38ad81ee5e0b5ecb6477b4a549
Signed-off-by: Matthew Khouzam
---
.../internal/otlp/core/trace/OtlpField.java | 34 +++++++++++++++----
.../otlp/core/trace/OtlpSortingJob.java | 14 ++++++++
.../internal/otlp/core/trace/OtlpSpan.java | 24 +++++++++++++
3 files changed, 65 insertions(+), 7 deletions(-)
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
index 720435549..748f3ad46 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
@@ -172,6 +172,9 @@ private OtlpField() {
String scopeName = optString(root, "instrumentationScopeName"); //$NON-NLS-1$
String scopeVersion = optString(root, "instrumentationScopeVersion"); //$NON-NLS-1$
+ // Parse resource attributes
+ Map<@NonNull String, @NonNull String> resourceAttributes = parseAttributes(optJSONArray(root, "resourceAttributes")); //$NON-NLS-1$
+
return new OtlpSpan.Builder()
.traceId(traceId)
.spanId(spanId)
@@ -183,6 +186,7 @@ private OtlpField() {
.kind(OtlpSpanKind.fromValue(kindValue))
.status(status)
.attributes(attributes)
+ .resourceAttributes(resourceAttributes)
.events(events)
.links(links)
.instrumentationScopeName(scopeName)
@@ -220,8 +224,8 @@ private static String toJaegerJson(JsonObject otlpRoot,
// Tags from OTLP attributes
JsonArray attributes = optJSONArray(otlpRoot, "attributes"); //$NON-NLS-1$
+ JsonArray tags = new JsonArray();
if (attributes != null) {
- JsonArray tags = new JsonArray();
for (int i = 0; i < attributes.size(); i++) {
JsonObject attr = attributes.get(i).getAsJsonObject();
String key = attr.get("key").getAsString(); //$NON-NLS-1$
@@ -232,13 +236,29 @@ private static String toJaegerJson(JsonObject otlpRoot,
tag.addProperty(IOpenTracingConstants.VALUE, value);
tags.add(tag);
}
- // Add service.name as a tag
- if (!serviceName.isEmpty()) {
- JsonObject svcTag = new JsonObject();
- svcTag.addProperty(IOpenTracingConstants.KEY, "service.name"); //$NON-NLS-1$
- svcTag.addProperty(IOpenTracingConstants.VALUE, serviceName);
- tags.add(svcTag);
+ }
+ // Add resource attributes as resource.* tags
+ JsonArray resourceAttributes = optJSONArray(otlpRoot, "resourceAttributes"); //$NON-NLS-1$
+ if (resourceAttributes != null) {
+ for (int i = 0; i < resourceAttributes.size(); i++) {
+ JsonObject attr = resourceAttributes.get(i).getAsJsonObject();
+ String key = attr.get("key").getAsString(); //$NON-NLS-1$
+ JsonObject valueObj = attr.getAsJsonObject("value"); //$NON-NLS-1$
+ String value = extractAttributeValue(valueObj);
+ JsonObject tag = new JsonObject();
+ tag.addProperty(IOpenTracingConstants.KEY, "resource." + key); //$NON-NLS-1$
+ tag.addProperty(IOpenTracingConstants.VALUE, value);
+ tags.add(tag);
}
+ }
+ // Add service.name as a tag
+ if (!serviceName.isEmpty()) {
+ JsonObject svcTag = new JsonObject();
+ svcTag.addProperty(IOpenTracingConstants.KEY, "service.name"); //$NON-NLS-1$
+ svcTag.addProperty(IOpenTracingConstants.VALUE, serviceName);
+ tags.add(svcTag);
+ }
+ if (tags.size() > 0) {
jaeger.add(IOpenTracingConstants.TAGS, tags);
}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
index 2572851e7..86f5510a8 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
@@ -23,6 +23,7 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.incubator.internal.otlp.core.Activator;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
@@ -76,6 +77,7 @@ protected IStatus run(IProgressMonitor monitor) {
for (JsonElement rsElement : resourceSpans) {
JsonObject rs = rsElement.getAsJsonObject();
String serviceName = extractServiceName(rs);
+ JsonArray resourceAttributes = extractResourceAttributes(rs);
JsonArray scopeSpans = rs.getAsJsonArray("scopeSpans"); //$NON-NLS-1$
if (scopeSpans == null) {
continue;
@@ -90,6 +92,10 @@ protected IStatus run(IProgressMonitor monitor) {
JsonObject span = spanElement.getAsJsonObject();
// Inject service name into the span for later use
span.addProperty("serviceName", serviceName); //$NON-NLS-1$
+ // Inject all resource attributes
+ if (resourceAttributes != null && resourceAttributes.size() > 0) {
+ span.add("resourceAttributes", resourceAttributes); //$NON-NLS-1$
+ }
allSpans.add(span);
}
}
@@ -145,4 +151,12 @@ private static String extractServiceName(JsonObject resourceSpan) {
}
return ""; //$NON-NLS-1$
}
+
+ private static @Nullable JsonArray extractResourceAttributes(JsonObject resourceSpan) {
+ JsonObject resource = resourceSpan.getAsJsonObject("resource"); //$NON-NLS-1$
+ if (resource == null) {
+ return null;
+ }
+ return resource.getAsJsonArray("attributes"); //$NON-NLS-1$
+ }
}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java
index 5ffd757e4..6041b534d 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSpan.java
@@ -43,6 +43,7 @@ public class OtlpSpan {
private final @Nullable String fInstrumentationScopeName;
private final @Nullable String fInstrumentationScopeVersion;
private final @NonNull Map<@NonNull String, @NonNull String> fAttributes;
+ private final @NonNull Map<@NonNull String, @NonNull String> fResourceAttributes;
private final int fDroppedAttributesCount;
private final int fDroppedEventsCount;
private final int fDroppedLinksCount;
@@ -68,6 +69,7 @@ private OtlpSpan(Builder builder) {
fInstrumentationScopeName = builder.fInstrumentationScopeName;
fInstrumentationScopeVersion = builder.fInstrumentationScopeVersion;
fAttributes = Collections.unmodifiableMap(builder.fAttributes);
+ fResourceAttributes = Collections.unmodifiableMap(builder.fResourceAttributes);
fDroppedAttributesCount = builder.fDroppedAttributesCount;
fDroppedEventsCount = builder.fDroppedEventsCount;
fDroppedLinksCount = builder.fDroppedLinksCount;
@@ -199,6 +201,15 @@ public long getDurationNanos() {
return fAttributes;
}
+ /**
+ * Get the resource attributes
+ *
+ * @return an unmodifiable map of resource attributes
+ */
+ public @NonNull Map<@NonNull String, @NonNull String> getResourceAttributes() {
+ return fResourceAttributes;
+ }
+
/**
* Get the number of dropped attributes
*
@@ -244,6 +255,7 @@ public static class Builder {
private @Nullable String fInstrumentationScopeName;
private @Nullable String fInstrumentationScopeVersion;
private @NonNull Map<@NonNull String, @NonNull String> fAttributes = Collections.emptyMap();
+ private @NonNull Map<@NonNull String, @NonNull String> fResourceAttributes = Collections.emptyMap();
private int fDroppedAttributesCount;
private int fDroppedEventsCount;
private int fDroppedLinksCount;
@@ -416,6 +428,18 @@ public Builder attributes(@NonNull Map<@NonNull String, @NonNull String> attribu
return this;
}
+ /**
+ * Set the resource attributes
+ *
+ * @param resourceAttributes
+ * the resource attributes map
+ * @return this builder
+ */
+ public Builder resourceAttributes(@NonNull Map<@NonNull String, @NonNull String> resourceAttributes) {
+ fResourceAttributes = resourceAttributes;
+ return this;
+ }
+
/**
* Set the dropped attributes count
*
From a885eeb0ddc66018b525f3c0ff2f6274270a888f Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 14:01:03 -0400
Subject: [PATCH 05/12] otlp: Map OTLP span events to Jaeger logs
Parse OTLP span events (timestamped logs within spans) and map them
to Jaeger log entries so the SpanLife analysis can display them as
markers on the span timeline.
This patch was made with the assistance of claude sonnet 4.6
Change-Id: I6501091514a1e735c0e7e3eb42708a64f8e1f230
Signed-off-by: Matthew Khouzam
---
.../internal/otlp/core/trace/OtlpField.java | 48 +++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
index 748f3ad46..a03aceca9 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpField.java
@@ -265,6 +265,54 @@ private static String toJaegerJson(JsonObject otlpRoot,
// Process ID - use service name
jaeger.addProperty(IOpenTracingConstants.PROCESS_ID, serviceName);
+ // Map OTLP span events to Jaeger logs
+ JsonArray events = optJSONArray(otlpRoot, "events"); //$NON-NLS-1$
+ if (events != null && events.size() > 0) {
+ JsonArray logs = new JsonArray();
+ for (int i = 0; i < events.size(); i++) {
+ JsonObject eventObj = events.get(i).getAsJsonObject();
+ JsonObject log = new JsonObject();
+
+ // Convert timeUnixNano to microseconds for Jaeger
+ long timeNano = 0;
+ JsonElement timeEl = eventObj.get("timeUnixNano"); //$NON-NLS-1$
+ if (timeEl != null && !timeEl.isJsonNull()) {
+ timeNano = Long.parseLong(timeEl.getAsString());
+ }
+ log.addProperty(IOpenTracingConstants.TIMESTAMP, timeNano / 1000);
+
+ // Build fields array: first field is always "event" -> name
+ JsonArray fields = new JsonArray();
+ JsonObject eventField = new JsonObject();
+ eventField.addProperty(IOpenTracingConstants.KEY, "event"); //$NON-NLS-1$
+ String eventName = ""; //$NON-NLS-1$
+ JsonElement nameEl = eventObj.get("name"); //$NON-NLS-1$
+ if (nameEl != null && !nameEl.isJsonNull()) {
+ eventName = nameEl.getAsString();
+ }
+ eventField.addProperty(IOpenTracingConstants.VALUE, eventName);
+ fields.add(eventField);
+
+ // Add event attributes as additional fields
+ JsonArray eventAttrs = optJSONArray(eventObj, "attributes"); //$NON-NLS-1$
+ if (eventAttrs != null) {
+ for (int j = 0; j < eventAttrs.size(); j++) {
+ JsonObject attr = eventAttrs.get(j).getAsJsonObject();
+ String key = attr.get("key").getAsString(); //$NON-NLS-1$
+ JsonObject valueObj = attr.getAsJsonObject("value"); //$NON-NLS-1$
+ String value = extractAttributeValue(valueObj);
+ JsonObject field = new JsonObject();
+ field.addProperty(IOpenTracingConstants.KEY, key);
+ field.addProperty(IOpenTracingConstants.VALUE, value);
+ fields.add(field);
+ }
+ }
+ log.add(IOpenTracingConstants.FIELDS, fields);
+ logs.add(log);
+ }
+ jaeger.add(IOpenTracingConstants.LOGS, logs);
+ }
+
return G_SON.toJson(jaeger);
}
From 29d62f95d0a45aa254a825c0180e3f925bf41f1e Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 15:03:36 -0400
Subject: [PATCH 06/12] otlp: Add protobuf support for OTLP binary trace
exports
Parse OTLP ExportTraceServiceRequest protobuf binary files (.pb) using
com.google.protobuf CodedInputStream wire format parsing. The protobuf
reader extracts spans into the same JSON model used by the JSON path,
so all downstream analysis (SpanLife, native OtlpSpan model) works
unchanged.
Validation detects protobuf by checking for non-text file with proto
wire format header (0x0A = field 1, wire type 2).
This patch was made with the assistance of claude sonnet 4.6
Change-Id: Iead951a70aa4057accf02cb2a0db2545aa28a901
Signed-off-by: Matthew Khouzam
---
.../META-INF/MANIFEST.MF | 1 +
.../otlp/core/trace/OtlpProtobufParser.java | 795 ++++++++++++++++++
.../core/trace/OtlpProtobufSortingJob.java | 98 +++
.../internal/otlp/core/trace/OtlpTrace.java | 35 +-
4 files changed, 925 insertions(+), 4 deletions(-)
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufParser.java
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF
index 2219cab85..28dcd39f7 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/META-INF/MANIFEST.MF
@@ -19,4 +19,5 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional
Export-Package: org.eclipse.tracecompass.incubator.internal.otlp.core;x-friends:="org.eclipse.tracecompass.incubator.otlp.core.tests",
org.eclipse.tracecompass.incubator.internal.otlp.core.trace;x-friends:="org.eclipse.tracecompass.incubator.otlp.core.tests"
+Import-Package: com.google.protobuf
Automatic-Module-Name: org.eclipse.tracecompass.incubator.otlp.core
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufParser.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufParser.java
new file mode 100644
index 000000000..8e2a6432a
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufParser.java
@@ -0,0 +1,795 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.protobuf.ByteString;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.WireFormat;
+
+/**
+ * Low-level parser for OTLP protobuf binary trace files
+ * (ExportTraceServiceRequest). Parses the wire format directly using
+ * {@link CodedInputStream}, without generated proto stubs.
+ *
+ * The parser produces a list of {@link JsonObject} spans in the same flat
+ * format as the JSON sorting job, so they can feed directly into
+ * {@link OtlpField#parseJson(String)}.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpProtobufParser {
+
+ private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray(); //$NON-NLS-1$
+
+ private OtlpProtobufParser() {
+ // utility class
+ }
+
+ /**
+ * Parse an OTLP protobuf binary file and return all spans as JsonObjects.
+ *
+ * @param path
+ * path to the .pb file
+ * @return list of span JsonObjects in flat OTLP JSON format
+ * @throws IOException
+ * if reading fails
+ */
+ public static @NonNull List<@NonNull JsonObject> parse(String path) throws IOException {
+ List<@NonNull JsonObject> allSpans = new ArrayList<>();
+ try (FileInputStream fis = new FileInputStream(path)) {
+ CodedInputStream cis = CodedInputStream.newInstance(fis);
+ cis.setSizeLimit(Integer.MAX_VALUE);
+ parseExportTraceServiceRequest(cis, allSpans);
+ }
+ return allSpans;
+ }
+
+ /**
+ * Parse ExportTraceServiceRequest: repeated ResourceSpans resource_spans =
+ * 1
+ */
+ private static void parseExportTraceServiceRequest(CodedInputStream cis, List<@NonNull JsonObject> allSpans) throws IOException {
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ if (fieldNumber == 1 && wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ parseResourceSpans(cis, allSpans);
+ cis.popLimit(oldLimit);
+ } else {
+ skipField(cis, wireType);
+ }
+ }
+ }
+
+ /**
+ * Parse ResourceSpans message
+ */
+ private static void parseResourceSpans(CodedInputStream cis, List<@NonNull JsonObject> allSpans) throws IOException {
+ JsonArray resourceAttributes = new JsonArray();
+ String serviceName = ""; //$NON-NLS-1$
+ List<@NonNull JsonObject> scopeSpansList = new ArrayList<>();
+
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // Resource resource = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ parseResource(cis, resourceAttributes);
+ cis.popLimit(oldLimit);
+ // Extract service.name from resource attributes
+ serviceName = extractServiceName(resourceAttributes);
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // repeated ScopeSpans scope_spans = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ parseScopeSpans(cis, scopeSpansList);
+ cis.popLimit(oldLimit);
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+
+ // Inject resource info into each span
+ for (JsonObject span : scopeSpansList) {
+ span.addProperty("serviceName", serviceName); //$NON-NLS-1$
+ if (resourceAttributes.size() > 0) {
+ span.add("resourceAttributes", resourceAttributes.deepCopy()); //$NON-NLS-1$
+ }
+ allSpans.add(span);
+ }
+ }
+
+ /**
+ * Parse Resource message: repeated KeyValue attributes = 1
+ */
+ private static void parseResource(CodedInputStream cis, JsonArray resourceAttributes) throws IOException {
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ if (fieldNumber == 1 && wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject kv = parseKeyValue(cis);
+ cis.popLimit(oldLimit);
+ if (kv != null) {
+ resourceAttributes.add(kv);
+ }
+ } else {
+ skipField(cis, wireType);
+ }
+ }
+ }
+
+ /**
+ * Parse ScopeSpans message
+ */
+ private static void parseScopeSpans(CodedInputStream cis, List<@NonNull JsonObject> spans) throws IOException {
+ String scopeName = null;
+ String scopeVersion = null;
+
+ // We need to buffer spans because scope info comes in field 1,
+ // but spans are in field 2
+ List<@NonNull JsonObject> localSpans = new ArrayList<>();
+
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // InstrumentationScope scope = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ String[] scopeInfo = parseInstrumentationScope(cis);
+ cis.popLimit(oldLimit);
+ scopeName = scopeInfo[0];
+ scopeVersion = scopeInfo[1];
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // repeated Span spans = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject span = parseSpan(cis);
+ cis.popLimit(oldLimit);
+ localSpans.add(span);
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+
+ // Inject scope info into spans
+ for (JsonObject span : localSpans) {
+ if (scopeName != null) {
+ span.addProperty("instrumentationScopeName", scopeName); //$NON-NLS-1$
+ }
+ if (scopeVersion != null) {
+ span.addProperty("instrumentationScopeVersion", scopeVersion); //$NON-NLS-1$
+ }
+ spans.add(span);
+ }
+ }
+
+ /**
+ * Parse InstrumentationScope: name=1, version=2
+ *
+ * @return [name, version]
+ */
+ private static String[] parseInstrumentationScope(CodedInputStream cis) throws IOException {
+ String name = null;
+ String version = null;
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // string name = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ name = cis.readStringRequireUtf8();
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // string version = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ version = cis.readStringRequireUtf8();
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+ return new String[] { name, version };
+ }
+
+ /**
+ * Parse a Span message into a flat JsonObject
+ */
+ private static @NonNull JsonObject parseSpan(CodedInputStream cis) throws IOException {
+ JsonObject span = new JsonObject();
+ JsonArray attributes = new JsonArray();
+ JsonArray events = new JsonArray();
+ JsonArray links = new JsonArray();
+
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // bytes trace_id = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ ByteString bs = cis.readBytes();
+ span.addProperty("traceId", bytesToHex(bs.toByteArray())); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // bytes span_id = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ ByteString bs = cis.readBytes();
+ span.addProperty("spanId", bytesToHex(bs.toByteArray())); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 3: // string trace_state = 3
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ span.addProperty("traceState", cis.readStringRequireUtf8()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 4: // bytes parent_span_id = 4
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ ByteString bs = cis.readBytes();
+ byte[] bytes = bs.toByteArray();
+ if (bytes.length > 0) {
+ span.addProperty("parentSpanId", bytesToHex(bytes)); //$NON-NLS-1$
+ }
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 5: // string name = 5
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ span.addProperty("name", cis.readStringRequireUtf8()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 6: // SpanKind kind = 6 (enum/varint)
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ span.addProperty("kind", cis.readEnum()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 7: // fixed64 start_time_unix_nano = 7
+ if (wireType == WireFormat.WIRETYPE_FIXED64) {
+ long startTime = cis.readFixed64();
+ span.addProperty("startTimeUnixNano", String.valueOf(startTime)); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 8: // fixed64 end_time_unix_nano = 8
+ if (wireType == WireFormat.WIRETYPE_FIXED64) {
+ long endTime = cis.readFixed64();
+ span.addProperty("endTimeUnixNano", String.valueOf(endTime)); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 9: // repeated KeyValue attributes = 9
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject kv = parseKeyValue(cis);
+ cis.popLimit(oldLimit);
+ if (kv != null) {
+ attributes.add(kv);
+ }
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 10: // uint32 dropped_attributes_count = 10
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ span.addProperty("droppedAttributesCount", cis.readUInt32()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 11: // repeated Event events = 11
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject event = parseEvent(cis);
+ cis.popLimit(oldLimit);
+ events.add(event);
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 12: // uint32 dropped_events_count = 12
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ span.addProperty("droppedEventsCount", cis.readUInt32()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 13: // repeated Link links = 13
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject link = parseLink(cis);
+ cis.popLimit(oldLimit);
+ links.add(link);
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 14: // uint32 dropped_links_count = 14
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ span.addProperty("droppedLinksCount", cis.readUInt32()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 15: // Status status = 15
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject status = parseStatus(cis);
+ cis.popLimit(oldLimit);
+ span.add("status", status); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+
+ if (attributes.size() > 0) {
+ span.add("attributes", attributes); //$NON-NLS-1$
+ }
+ if (events.size() > 0) {
+ span.add("events", events); //$NON-NLS-1$
+ }
+ if (links.size() > 0) {
+ span.add("links", links); //$NON-NLS-1$
+ }
+ return span;
+ }
+
+ /**
+ * Parse Event message
+ */
+ private static @NonNull JsonObject parseEvent(CodedInputStream cis) throws IOException {
+ JsonObject event = new JsonObject();
+ JsonArray attributes = new JsonArray();
+
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // fixed64 time_unix_nano = 1
+ if (wireType == WireFormat.WIRETYPE_FIXED64) {
+ long timeNano = cis.readFixed64();
+ event.addProperty("timeUnixNano", String.valueOf(timeNano)); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // string name = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ event.addProperty("name", cis.readStringRequireUtf8()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 3: // repeated KeyValue attributes = 3
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject kv = parseKeyValue(cis);
+ cis.popLimit(oldLimit);
+ if (kv != null) {
+ attributes.add(kv);
+ }
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 4: // uint32 dropped_attributes_count = 4
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ event.addProperty("droppedAttributesCount", cis.readUInt32()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+
+ if (attributes.size() > 0) {
+ event.add("attributes", attributes); //$NON-NLS-1$
+ }
+ return event;
+ }
+
+ /**
+ * Parse Link message
+ */
+ private static @NonNull JsonObject parseLink(CodedInputStream cis) throws IOException {
+ JsonObject link = new JsonObject();
+ JsonArray attributes = new JsonArray();
+
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // bytes trace_id = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ ByteString bs = cis.readBytes();
+ link.addProperty("traceId", bytesToHex(bs.toByteArray())); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // bytes span_id = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ ByteString bs = cis.readBytes();
+ link.addProperty("spanId", bytesToHex(bs.toByteArray())); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 3: // string trace_state = 3
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ link.addProperty("traceState", cis.readStringRequireUtf8()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 4: // repeated KeyValue attributes = 4
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject kv = parseKeyValue(cis);
+ cis.popLimit(oldLimit);
+ if (kv != null) {
+ attributes.add(kv);
+ }
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 5: // uint32 dropped_attributes_count = 5
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ link.addProperty("droppedAttributesCount", cis.readUInt32()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+
+ if (attributes.size() > 0) {
+ link.add("attributes", attributes); //$NON-NLS-1$
+ }
+ return link;
+ }
+
+ /**
+ * Parse Status message: message=2, code=3
+ */
+ private static @NonNull JsonObject parseStatus(CodedInputStream cis) throws IOException {
+ JsonObject status = new JsonObject();
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 2: // string message = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ status.addProperty("message", cis.readStringRequireUtf8()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 3: // StatusCode code = 3 (enum/varint)
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ status.addProperty("code", cis.readEnum()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+ return status;
+ }
+
+ /**
+ * Parse KeyValue message: key=1 (string), value=2 (AnyValue)
+ */
+ private static JsonObject parseKeyValue(CodedInputStream cis) throws IOException {
+ String key = null;
+ JsonObject value = null;
+
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // string key = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ key = cis.readStringRequireUtf8();
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // AnyValue value = 2
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ value = parseAnyValue(cis);
+ cis.popLimit(oldLimit);
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+
+ if (key == null) {
+ return null;
+ }
+ JsonObject kv = new JsonObject();
+ kv.addProperty("key", key); //$NON-NLS-1$
+ if (value != null) {
+ kv.add("value", value); //$NON-NLS-1$
+ }
+ return kv;
+ }
+
+ /**
+ * Parse AnyValue (oneof): string_value=1, bool_value=2, int_value=3,
+ * double_value=4, array_value=5, kvlist_value=6, bytes_value=7
+ */
+ private static @NonNull JsonObject parseAnyValue(CodedInputStream cis) throws IOException {
+ JsonObject anyValue = new JsonObject();
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ switch (fieldNumber) {
+ case 1: // string string_value = 1
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ anyValue.addProperty("stringValue", cis.readStringRequireUtf8()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 2: // bool bool_value = 2
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ anyValue.addProperty("boolValue", cis.readBool()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 3: // int64 int_value = 3
+ if (wireType == WireFormat.WIRETYPE_VARINT) {
+ anyValue.addProperty("intValue", String.valueOf(cis.readInt64())); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 4: // double double_value = 4
+ if (wireType == WireFormat.WIRETYPE_FIXED64) {
+ anyValue.addProperty("doubleValue", cis.readDouble()); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 5: // ArrayValue array_value = 5
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject arrayValue = parseArrayValue(cis);
+ cis.popLimit(oldLimit);
+ anyValue.add("arrayValue", arrayValue); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 6: // KeyValueList kvlist_value = 6
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject kvList = parseKeyValueList(cis);
+ cis.popLimit(oldLimit);
+ anyValue.add("kvlistValue", kvList); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ case 7: // bytes bytes_value = 7
+ if (wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ ByteString bs = cis.readBytes();
+ anyValue.addProperty("bytesValue", bytesToHex(bs.toByteArray())); //$NON-NLS-1$
+ } else {
+ skipField(cis, wireType);
+ }
+ break;
+ default:
+ skipField(cis, wireType);
+ break;
+ }
+ }
+ return anyValue;
+ }
+
+ /**
+ * Parse ArrayValue: repeated AnyValue values = 1
+ */
+ private static @NonNull JsonObject parseArrayValue(CodedInputStream cis) throws IOException {
+ JsonObject arrayValue = new JsonObject();
+ JsonArray values = new JsonArray();
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ if (fieldNumber == 1 && wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject val = parseAnyValue(cis);
+ cis.popLimit(oldLimit);
+ values.add(val);
+ } else {
+ skipField(cis, wireType);
+ }
+ }
+ arrayValue.add("values", values); //$NON-NLS-1$
+ return arrayValue;
+ }
+
+ /**
+ * Parse KeyValueList: repeated KeyValue values = 1
+ */
+ private static @NonNull JsonObject parseKeyValueList(CodedInputStream cis) throws IOException {
+ JsonObject kvList = new JsonObject();
+ JsonArray values = new JsonArray();
+ while (!cis.isAtEnd()) {
+ int tag = cis.readTag();
+ int fieldNumber = WireFormat.getTagFieldNumber(tag);
+ int wireType = WireFormat.getTagWireType(tag);
+ if (fieldNumber == 1 && wireType == WireFormat.WIRETYPE_LENGTH_DELIMITED) {
+ int length = cis.readRawVarint32();
+ int oldLimit = cis.pushLimit(length);
+ JsonObject kv = parseKeyValue(cis);
+ cis.popLimit(oldLimit);
+ if (kv != null) {
+ values.add(kv);
+ }
+ } else {
+ skipField(cis, wireType);
+ }
+ }
+ kvList.add("values", values); //$NON-NLS-1$
+ return kvList;
+ }
+
+ /**
+ * Extract service.name from resource attributes
+ */
+ private static String extractServiceName(JsonArray resourceAttributes) {
+ for (int i = 0; i < resourceAttributes.size(); i++) {
+ JsonObject attr = resourceAttributes.get(i).getAsJsonObject();
+ if ("service.name".equals(attr.get("key").getAsString())) { //$NON-NLS-1$ //$NON-NLS-2$
+ JsonObject value = attr.getAsJsonObject("value"); //$NON-NLS-1$
+ if (value != null && value.has("stringValue")) { //$NON-NLS-1$
+ return value.get("stringValue").getAsString(); //$NON-NLS-1$
+ }
+ }
+ }
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * Skip an unknown field based on its wire type
+ */
+ private static void skipField(CodedInputStream cis, int wireType) throws IOException {
+ switch (wireType) {
+ case WireFormat.WIRETYPE_VARINT:
+ cis.readRawVarint64();
+ break;
+ case WireFormat.WIRETYPE_FIXED64:
+ cis.readFixed64();
+ break;
+ case WireFormat.WIRETYPE_LENGTH_DELIMITED:
+ int length = cis.readRawVarint32();
+ cis.skipRawBytes(length);
+ break;
+ case WireFormat.WIRETYPE_FIXED32:
+ cis.readFixed32();
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Convert a byte array to a lowercase hex string
+ */
+ private static String bytesToHex(byte[] bytes) {
+ char[] hexChars = new char[bytes.length * 2];
+ for (int i = 0; i < bytes.length; i++) {
+ int v = bytes[i] & 0xFF;
+ hexChars[i * 2] = HEX_CHARS[v >>> 4];
+ hexChars[i * 2 + 1] = HEX_CHARS[v & 0x0F];
+ }
+ return new String(hexChars);
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java
new file mode 100644
index 000000000..82a584cc6
--- /dev/null
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License 2.0 which
+ * accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.incubator.internal.otlp.core.Activator;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+/**
+ * Sorting job for OTLP protobuf binary traces. Parses the protobuf file using
+ * {@link OtlpProtobufParser}, sorts spans by startTimeUnixNano, and writes the
+ * same sorted JSON format as {@link OtlpSortingJob}.
+ *
+ * @author Matthew Khouzam
+ */
+public class OtlpProtobufSortingJob extends Job {
+
+ private static final Gson G_SON = new Gson();
+
+ private final ITmfTrace fTrace;
+ private final String fPath;
+
+ /**
+ * Constructor
+ *
+ * @param trace
+ * the trace
+ * @param path
+ * path to the OTLP protobuf file
+ */
+ public OtlpProtobufSortingJob(ITmfTrace trace, String path) {
+ super("Sorting OTLP protobuf trace"); //$NON-NLS-1$
+ fTrace = trace;
+ fPath = path;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ List<@NonNull JsonObject> allSpans = OtlpProtobufParser.parse(fPath);
+
+ if (allSpans.isEmpty()) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No spans found in protobuf file"); //$NON-NLS-1$
+ }
+
+ // Sort by startTimeUnixNano
+ allSpans.sort(Comparator.comparingLong(span -> {
+ JsonElement el = span.get("startTimeUnixNano"); //$NON-NLS-1$
+ return el != null ? Long.parseLong(el.getAsString()) : 0L;
+ }));
+
+ // Write sorted spans as a JSON array (one object per line)
+ String dir = TmfTraceManager.getSupplementaryFileDir(fTrace);
+ File outFile = new File(dir + new File(fPath).getName());
+ outFile.getParentFile().mkdirs();
+ try (PrintWriter writer = new PrintWriter(outFile)) {
+ writer.println('[');
+ for (int i = 0; i < allSpans.size(); i++) {
+ writer.print(G_SON.toJson(allSpans.get(i)));
+ if (i < allSpans.size() - 1) {
+ writer.println(',');
+ } else {
+ writer.println();
+ }
+ }
+ writer.println(']');
+ }
+
+ return Status.OK_STATUS;
+ } catch (IOException e) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error parsing OTLP protobuf trace", e); //$NON-NLS-1$
+ }
+ }
+}
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
index e7201746c..d6614396d 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
@@ -12,6 +12,7 @@
package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
@@ -71,7 +72,12 @@ public void initTrace(IResource resource, String path, Class extends ITmfEvent
String dir = TmfTraceManager.getSupplementaryFileDir(this);
fFile = new File(dir + new File(path).getName());
if (!fFile.exists()) {
- Job sortJob = new OtlpSortingJob(this, path);
+ Job sortJob;
+ if (isProtobufFile(path)) {
+ sortJob = new OtlpProtobufSortingJob(this, path);
+ } else {
+ sortJob = new OtlpSortingJob(this, path);
+ }
sortJob.schedule();
while (sortJob.getResult() == null) {
try {
@@ -102,14 +108,21 @@ public IStatus validate(IProject project, String path) {
if (!file.isFile()) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Not a file. It's a directory: " + path); //$NON-NLS-1$
}
+ boolean isText;
try {
- if (!TmfTraceUtils.isText(file)) {
- return new TraceValidationStatus(0, Activator.PLUGIN_ID);
- }
+ isText = TmfTraceUtils.isText(file);
} catch (IOException e) {
Activator.getInstance().logError("Error validating file: " + path, e); //$NON-NLS-1$
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "IOException validating file: " + path, e); //$NON-NLS-1$
}
+ if (!isText) {
+ // Check for protobuf format: first byte should be 0x0A
+ // (field 1, wire type LENGTH_DELIMITED)
+ if (isProtobufFile(path)) {
+ return new TraceValidationStatus(MAX_CONFIDENCE - 5, Activator.PLUGIN_ID);
+ }
+ return new TraceValidationStatus(0, Activator.PLUGIN_ID);
+ }
// Check if this is an OTLP format file by looking for "resourceSpans"
try (FileReader fileReader = new FileReader(path);
JsonReader reader = new JsonReader(fileReader)) {
@@ -126,6 +139,20 @@ public IStatus validate(IProject project, String path) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Not an OTLP trace"); //$NON-NLS-1$
}
+ /**
+ * Check if a file looks like an OTLP protobuf file. The first byte of an
+ * ExportTraceServiceRequest should be 0x0A (field 1, wire type 2 =
+ * LENGTH_DELIMITED).
+ */
+ private static boolean isProtobufFile(String path) {
+ try (FileInputStream fis = new FileInputStream(path)) {
+ int firstByte = fis.read();
+ return firstByte == 0x0A;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+
/**
* For OTLP, the sorted file is already a flat list of JSON objects (one per
* line), so we just need to skip to the start of the array.
From 0501e6e98f29ffbf26acadbf3e4a8d81c7e11f19 Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 21 Aug 2026 15:05:38 -0400
Subject: [PATCH 07/12] otlp: Add OTLP line-delimited JSON (JSONL) support
Handle OTLP exports where each line is a separate
ExportTraceServiceRequest JSON object. The sorting job tries single
JSON parse first and falls back to line-by-line JSONL parsing.
Validation accepts both formats.
Change-Id: I38b8b3aa92bd334231efb2cc589e1513c3c98df4
Signed-off-by: Matthew Khouzam
---
.../otlp/core/trace/OtlpSortingJob.java | 130 +++++++++++++-----
.../internal/otlp/core/trace/OtlpTrace.java | 12 +-
2 files changed, 108 insertions(+), 34 deletions(-)
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
index 86f5510a8..6b94e39ea 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
@@ -11,6 +11,7 @@
package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
@@ -32,11 +33,14 @@
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
import com.google.gson.stream.JsonReader;
/**
* Sorting job for OTLP traces. Flattens the nested resourceSpans/scopeSpans
* structure into individual span JSON objects sorted by startTimeUnixNano.
+ * Supports both single JSON file and JSONL (one ExportTraceServiceRequest per
+ * line) formats.
*
* @author Matthew Khouzam
*/
@@ -66,40 +70,16 @@ protected IStatus run(IProgressMonitor monitor) {
try {
List allSpans = new ArrayList<>();
- try (FileReader fileReader = new FileReader(fPath);
- JsonReader reader = new JsonReader(fileReader)) {
- JsonObject root = G_SON.fromJson(reader, JsonObject.class);
- JsonArray resourceSpans = root.getAsJsonArray("resourceSpans"); //$NON-NLS-1$
- if (resourceSpans == null) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No resourceSpans found"); //$NON-NLS-1$
- }
+ // Try single JSON parse first
+ boolean singleJsonParsed = tryParseSingleJson(allSpans);
+ if (!singleJsonParsed) {
+ // Fall back to JSONL line-by-line parsing
+ allSpans.clear();
+ tryParseJsonl(allSpans);
+ }
- for (JsonElement rsElement : resourceSpans) {
- JsonObject rs = rsElement.getAsJsonObject();
- String serviceName = extractServiceName(rs);
- JsonArray resourceAttributes = extractResourceAttributes(rs);
- JsonArray scopeSpans = rs.getAsJsonArray("scopeSpans"); //$NON-NLS-1$
- if (scopeSpans == null) {
- continue;
- }
- for (JsonElement ssElement : scopeSpans) {
- JsonObject ss = ssElement.getAsJsonObject();
- JsonArray spans = ss.getAsJsonArray("spans"); //$NON-NLS-1$
- if (spans == null) {
- continue;
- }
- for (JsonElement spanElement : spans) {
- JsonObject span = spanElement.getAsJsonObject();
- // Inject service name into the span for later use
- span.addProperty("serviceName", serviceName); //$NON-NLS-1$
- // Inject all resource attributes
- if (resourceAttributes != null && resourceAttributes.size() > 0) {
- span.add("resourceAttributes", resourceAttributes); //$NON-NLS-1$
- }
- allSpans.add(span);
- }
- }
- }
+ if (allSpans.isEmpty()) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No spans found in OTLP trace"); //$NON-NLS-1$
}
// Sort by startTimeUnixNano
@@ -131,6 +111,90 @@ protected IStatus run(IProgressMonitor monitor) {
}
}
+ /**
+ * Try to parse the file as a single JSON ExportTraceServiceRequest.
+ *
+ * @return true if parsing succeeded, false otherwise
+ */
+ private boolean tryParseSingleJson(List allSpans) {
+ try (FileReader fileReader = new FileReader(fPath);
+ JsonReader reader = new JsonReader(fileReader)) {
+ JsonObject root = G_SON.fromJson(reader, JsonObject.class);
+ if (root == null) {
+ return false;
+ }
+ JsonArray resourceSpans = root.getAsJsonArray("resourceSpans"); //$NON-NLS-1$
+ if (resourceSpans == null) {
+ return false;
+ }
+ extractSpansFromResourceSpans(resourceSpans, allSpans);
+ return true;
+ } catch (JsonSyntaxException | IOException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Parse the file as JSONL (one ExportTraceServiceRequest per line).
+ */
+ private void tryParseJsonl(List allSpans) throws IOException {
+ try (BufferedReader br = new BufferedReader(new FileReader(fPath))) {
+ String line;
+ while ((line = br.readLine()) != null) {
+ line = line.trim();
+ if (line.isEmpty()) {
+ continue;
+ }
+ try {
+ JsonObject root = G_SON.fromJson(line, JsonObject.class);
+ if (root == null) {
+ continue;
+ }
+ JsonArray resourceSpans = root.getAsJsonArray("resourceSpans"); //$NON-NLS-1$
+ if (resourceSpans == null) {
+ continue;
+ }
+ extractSpansFromResourceSpans(resourceSpans, allSpans);
+ } catch (JsonSyntaxException e) {
+ // Skip malformed lines
+ }
+ }
+ }
+ }
+
+ /**
+ * Extract individual spans from a resourceSpans array and add them to the
+ * allSpans list.
+ */
+ private static void extractSpansFromResourceSpans(JsonArray resourceSpans, List allSpans) {
+ for (JsonElement rsElement : resourceSpans) {
+ JsonObject rs = rsElement.getAsJsonObject();
+ String serviceName = extractServiceName(rs);
+ JsonArray resourceAttributes = extractResourceAttributes(rs);
+ JsonArray scopeSpans = rs.getAsJsonArray("scopeSpans"); //$NON-NLS-1$
+ if (scopeSpans == null) {
+ continue;
+ }
+ for (JsonElement ssElement : scopeSpans) {
+ JsonObject ss = ssElement.getAsJsonObject();
+ JsonArray spans = ss.getAsJsonArray("spans"); //$NON-NLS-1$
+ if (spans == null) {
+ continue;
+ }
+ for (JsonElement spanElement : spans) {
+ JsonObject span = spanElement.getAsJsonObject();
+ // Inject service name into the span for later use
+ span.addProperty("serviceName", serviceName); //$NON-NLS-1$
+ // Inject all resource attributes
+ if (resourceAttributes != null && resourceAttributes.size() > 0) {
+ span.add("resourceAttributes", resourceAttributes); //$NON-NLS-1$
+ }
+ allSpans.add(span);
+ }
+ }
+ }
+ }
+
private static String extractServiceName(JsonObject resourceSpan) {
JsonObject resource = resourceSpan.getAsJsonObject("resource"); //$NON-NLS-1$
if (resource == null) {
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
index d6614396d..9d877a66f 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpTrace.java
@@ -11,6 +11,7 @@
package org.eclipse.tracecompass.incubator.internal.otlp.core.trace;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
@@ -134,7 +135,16 @@ public IStatus validate(IProject project, String path) {
}
}
} catch (Exception e) {
- // Not valid JSON or not OTLP
+ // Not valid JSON or not OTLP - try JSONL format
+ }
+ // Check for JSONL format (one JSON object per line)
+ try (BufferedReader br = new BufferedReader(new FileReader(path))) {
+ String firstLine = br.readLine();
+ if (firstLine != null && firstLine.trim().contains("\"resourceSpans\"")) { //$NON-NLS-1$
+ return new TraceValidationStatus(MAX_CONFIDENCE - 1, Activator.PLUGIN_ID);
+ }
+ } catch (Exception e) {
+ // Not valid JSONL
}
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Not an OTLP trace"); //$NON-NLS-1$
}
From bfccdbc599c77117f8ea5b531be1b6784020be19 Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Fri, 28 Aug 2026 10:30:00 -0400
Subject: [PATCH 08/12] otlp: Flatten span events into individual trace events
OTLP spans can contain span events (logs) that represent timestamped
occurrences within a span. Previously these were only accessible as
Jaeger-style logs embedded inside the parent span's event content.
Flatten each span event into its own zero-duration synthetic span
entry during sorting so that each span event appears as a separate
row in the events table. The synthetic entries inherit the parent
span's traceId, spanId, serviceName, and resource attributes.
For example, a trace with 12 spans and 530 span events now produces
542 TMF events instead of 12.
This patch was made with the assistance of claude sonnet 4.6
Change-Id: I9fa1008ee15a1d47f84f3c28eb524042abcac398
Signed-off-by: Matthew Khouzam
---
.../core/trace/OtlpProtobufSortingJob.java | 14 +-
.../otlp/core/trace/OtlpSortingJob.java | 132 +++++++++++++++++-
2 files changed, 140 insertions(+), 6 deletions(-)
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java
index 82a584cc6..1346e61be 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpProtobufSortingJob.java
@@ -67,8 +67,14 @@ protected IStatus run(IProgressMonitor monitor) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No spans found in protobuf file"); //$NON-NLS-1$
}
+ // Extract span events as individual entries
+ List<@NonNull JsonObject> allEntries = new java.util.ArrayList<>(allSpans);
+ for (JsonObject span : allSpans) {
+ OtlpSortingJob.extractSpanEvents(span, allEntries);
+ }
+
// Sort by startTimeUnixNano
- allSpans.sort(Comparator.comparingLong(span -> {
+ allEntries.sort(Comparator.comparingLong(span -> {
JsonElement el = span.get("startTimeUnixNano"); //$NON-NLS-1$
return el != null ? Long.parseLong(el.getAsString()) : 0L;
}));
@@ -79,9 +85,9 @@ protected IStatus run(IProgressMonitor monitor) {
outFile.getParentFile().mkdirs();
try (PrintWriter writer = new PrintWriter(outFile)) {
writer.println('[');
- for (int i = 0; i < allSpans.size(); i++) {
- writer.print(G_SON.toJson(allSpans.get(i)));
- if (i < allSpans.size() - 1) {
+ for (int i = 0; i < allEntries.size(); i++) {
+ writer.print(G_SON.toJson(allEntries.get(i)));
+ if (i < allEntries.size() - 1) {
writer.println(',');
} else {
writer.println();
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
index 6b94e39ea..f4659dcea 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core/src/org/eclipse/tracecompass/incubator/internal/otlp/core/trace/OtlpSortingJob.java
@@ -163,8 +163,11 @@ private void tryParseJsonl(List allSpans) throws IOException {
}
/**
- * Extract individual spans from a resourceSpans array and add them to the
- * allSpans list.
+ * Extract individual spans and span events from a resourceSpans array.
+ * Each OTLP span becomes one entry. Each OTLP span event (log) also
+ * becomes its own entry so it appears as a separate row in the events
+ * table. Span events are represented as zero-duration spans at the
+ * event's timestamp, inheriting the parent span's context.
*/
private static void extractSpansFromResourceSpans(JsonArray resourceSpans, List allSpans) {
for (JsonElement rsElement : resourceSpans) {
@@ -190,11 +193,136 @@ private static void extractSpansFromResourceSpans(JsonArray resourceSpans, List<
span.add("resourceAttributes", resourceAttributes); //$NON-NLS-1$
}
allSpans.add(span);
+
+ // Extract span events as individual entries
+ extractSpanEvents(span, allSpans);
}
}
}
}
+ /**
+ * Extract OTLP span events (logs) from a span and add them as
+ * individual zero-duration span entries. Each event inherits the
+ * parent span's traceId, spanId, and service context. The span must
+ * already have {@code serviceName} and optionally
+ * {@code resourceAttributes} injected.
+ *
+ * @param span
+ * the span to extract events from
+ * @param allSpans
+ * the list to add extracted events to
+ */
+ static void extractSpanEvents(JsonObject span, List allSpans) {
+ JsonArray events = span.getAsJsonArray("events"); //$NON-NLS-1$
+ if (events == null || events.size() == 0) {
+ return;
+ }
+ String traceId = ""; //$NON-NLS-1$
+ JsonElement traceIdEl = span.get("traceId"); //$NON-NLS-1$
+ if (traceIdEl != null && !traceIdEl.isJsonNull()) {
+ traceId = traceIdEl.getAsString();
+ }
+ String spanId = ""; //$NON-NLS-1$
+ JsonElement spanIdEl = span.get("spanId"); //$NON-NLS-1$
+ if (spanIdEl != null && !spanIdEl.isJsonNull()) {
+ spanId = spanIdEl.getAsString();
+ }
+ String serviceName = ""; //$NON-NLS-1$
+ JsonElement svcEl = span.get("serviceName"); //$NON-NLS-1$
+ if (svcEl != null && !svcEl.isJsonNull()) {
+ serviceName = svcEl.getAsString();
+ }
+ @Nullable JsonArray resourceAttributes = span.getAsJsonArray("resourceAttributes"); //$NON-NLS-1$
+
+ for (int i = 0; i < events.size(); i++) {
+ JsonObject event = events.get(i).getAsJsonObject();
+ String timeStr = "0"; //$NON-NLS-1$
+ JsonElement timeEl = event.get("timeUnixNano"); //$NON-NLS-1$
+ if (timeEl != null && !timeEl.isJsonNull()) {
+ timeStr = timeEl.getAsString();
+ }
+ String eventName = ""; //$NON-NLS-1$
+ JsonElement nameEl = event.get("name"); //$NON-NLS-1$
+ if (nameEl != null && !nameEl.isJsonNull()) {
+ eventName = nameEl.getAsString();
+ }
+
+ // Build a synthetic span entry for this event
+ JsonObject synth = new JsonObject();
+ synth.addProperty("traceId", traceId); //$NON-NLS-1$
+ synth.addProperty("spanId", spanId); //$NON-NLS-1$
+ synth.addProperty("name", eventName); //$NON-NLS-1$
+ synth.addProperty("startTimeUnixNano", timeStr); //$NON-NLS-1$
+ synth.addProperty("endTimeUnixNano", timeStr); //$NON-NLS-1$
+ synth.addProperty("serviceName", serviceName); //$NON-NLS-1$
+ // Carry the event's own attributes as span attributes
+ JsonArray eventAttrs = event.getAsJsonArray("attributes"); //$NON-NLS-1$
+ if (eventAttrs != null && eventAttrs.size() > 0) {
+ synth.add("attributes", eventAttrs); //$NON-NLS-1$
+ }
+ if (resourceAttributes != null && resourceAttributes.size() > 0) {
+ synth.add("resourceAttributes", resourceAttributes); //$NON-NLS-1$
+ }
+ allSpans.add(synth);
+ }
+ }
+
+ /**
+ * Extract OTLP span events (logs) from a span and add them as
+ * individual zero-duration span entries. Each event inherits the
+ * parent span's traceId, spanId, and service context.
+ */
+ private static void extractSpanEvents(JsonObject span, String serviceName,
+ @Nullable JsonArray resourceAttributes, List allSpans) {
+ JsonArray events = span.getAsJsonArray("events"); //$NON-NLS-1$
+ if (events == null || events.size() == 0) {
+ return;
+ }
+ String traceId = ""; //$NON-NLS-1$
+ JsonElement traceIdEl = span.get("traceId"); //$NON-NLS-1$
+ if (traceIdEl != null && !traceIdEl.isJsonNull()) {
+ traceId = traceIdEl.getAsString();
+ }
+ String spanId = ""; //$NON-NLS-1$
+ JsonElement spanIdEl = span.get("spanId"); //$NON-NLS-1$
+ if (spanIdEl != null && !spanIdEl.isJsonNull()) {
+ spanId = spanIdEl.getAsString();
+ }
+
+ for (int i = 0; i < events.size(); i++) {
+ JsonObject event = events.get(i).getAsJsonObject();
+ String timeStr = "0"; //$NON-NLS-1$
+ JsonElement timeEl = event.get("timeUnixNano"); //$NON-NLS-1$
+ if (timeEl != null && !timeEl.isJsonNull()) {
+ timeStr = timeEl.getAsString();
+ }
+ String eventName = ""; //$NON-NLS-1$
+ JsonElement nameEl = event.get("name"); //$NON-NLS-1$
+ if (nameEl != null && !nameEl.isJsonNull()) {
+ eventName = nameEl.getAsString();
+ }
+
+ // Build a synthetic span entry for this event
+ JsonObject synth = new JsonObject();
+ synth.addProperty("traceId", traceId); //$NON-NLS-1$
+ synth.addProperty("spanId", spanId); //$NON-NLS-1$
+ synth.addProperty("name", eventName); //$NON-NLS-1$
+ synth.addProperty("startTimeUnixNano", timeStr); //$NON-NLS-1$
+ synth.addProperty("endTimeUnixNano", timeStr); //$NON-NLS-1$
+ synth.addProperty("serviceName", serviceName); //$NON-NLS-1$
+ // Carry the event's own attributes as span attributes
+ JsonArray eventAttrs = event.getAsJsonArray("attributes"); //$NON-NLS-1$
+ if (eventAttrs != null && eventAttrs.size() > 0) {
+ synth.add("attributes", eventAttrs); //$NON-NLS-1$
+ }
+ if (resourceAttributes != null && resourceAttributes.size() > 0) {
+ synth.add("resourceAttributes", resourceAttributes); //$NON-NLS-1$
+ }
+ allSpans.add(synth);
+ }
+ }
+
private static String extractServiceName(JsonObject resourceSpan) {
JsonObject resource = resourceSpan.getAsJsonObject("resource"); //$NON-NLS-1$
if (resource == null) {
From fa0272518744e46eb00c269558f293cd76e9c70b Mon Sep 17 00:00:00 2001
From: Matthew Khouzam
Date: Wed, 26 Aug 2026 16:03:21 -0400
Subject: [PATCH 09/12] otlp: Add Eclipse project settings and protobuf to
target
Add missing Eclipse project configuration for the OTLP core plugin:
- Add API tools builder and nature to .project
- Add .settings/ with standard JDT, PDE, and API tools preferences
Add com.google.protobuf:protobuf-java to the target platform so the
OTLP plugin can be imported and resolved in Eclipse.
This patch was made with the assistance of claude sonnet 4.6
Change-Id: I03587c9ff9e88981c1848821aba81a1519b137a1
Signed-off-by: Matthew Khouzam
---
.../tracecompass-incubator-master.target | 10 +
.../about.html | 4 +-
.../.project | 6 +
.../org.eclipse.core.resources.prefs | 2 +
.../.settings/org.eclipse.core.runtime.prefs | 2 +
.../.settings/org.eclipse.jdt.core.prefs | 433 ++++++++++++++++++
.../.settings/org.eclipse.jdt.ui.prefs | 60 +++
.../.settings/org.eclipse.pde.api.tools.prefs | 99 ++++
.../.settings/org.eclipse.pde.prefs | 32 ++
.../about.html | 4 +-
.../internal/otlp/core/trace/OtlpField.java | 152 ++++--
.../otlp/core/trace/OtlpProtobufParser.java | 10 +-
.../core/trace/OtlpProtobufSortingJob.java | 13 +-
.../otlp/core/trace/OtlpSortingJob.java | 36 +-
.../otlp/core/trace/OtlpSpanKind.java | 17 +-
.../internal/otlp/core/trace/OtlpTrace.java | 31 +-
16 files changed, 836 insertions(+), 75 deletions(-)
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.settings/org.eclipse.core.resources.prefs
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.settings/org.eclipse.core.runtime.prefs
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.settings/org.eclipse.jdt.core.prefs
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.settings/org.eclipse.jdt.ui.prefs
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.settings/org.eclipse.pde.api.tools.prefs
create mode 100644 tracetypes/org.eclipse.tracecompass.incubator.otlp.core/.settings/org.eclipse.pde.prefs
diff --git a/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target b/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target
index 9cae4c7a8..db1a4cd4a 100644
--- a/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target
+++ b/common/org.eclipse.tracecompass.incubator.target/tracecompass-incubator-master.target
@@ -271,6 +271,16 @@
+
+
+
+ com.google.protobuf
+ protobuf-java
+ 4.29.3
+ jar
+
+
+
diff --git a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html
index 8eee37d47..48eea4092 100644
--- a/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html
+++ b/tracetypes/org.eclipse.tracecompass.incubator.otlp.core.tests/about.html
@@ -16,7 +16,7 @@ License
("Content"). Unless otherwise indicated below, the Content
is provided to you under the terms and conditions of the Eclipse
Public License Version 2.0 ("EPL"). A copy of the EPL is
- available at http://www.eclipse.org/legal/epl-2.0.
+ available at https://www.eclipse.org/legal/epl-2.0.
For purposes of the EPL, "Program" will mean the Content.
@@ -29,7 +29,7 @@ License
license exists, contact the Redistributor. Unless otherwise indicated
below, the terms and conditions of the EPL still apply to any source
code in the Content and such source code may be obtained at http://www.eclipse.org.
+ href="https://www.eclipse.org/">https://www.eclipse.org.