>(null);
+ const debounceFunc = debounce(draw, 500);
+
defineExpose({
tree,
});
@@ -55,6 +58,15 @@ limitations under the License. -->
loading.value = false;
return;
}
+ draw();
+ loading.value = false;
+ window.addEventListener("resize", debounceFunc);
+ });
+
+ function draw() {
+ if (!traceGraph.value) {
+ return;
+ }
if (props.type === "List") {
tree.value = new ListGraph(traceGraph.value, handleSelectSpan);
tree.value.init({ label: "TRACE_ROOT", children: segmentId.value }, props.data, fixSpansSize.value);
@@ -63,11 +75,6 @@ limitations under the License. -->
tree.value = new TreeGraph(traceGraph.value, handleSelectSpan);
tree.value.init({ label: `${props.traceId}`, children: segmentId.value }, props.data);
}
- loading.value = false;
- window.addEventListener("resize", resize);
- });
- function resize() {
- tree.value.resize();
}
function handleSelectSpan(i: Recordable) {
currentSpan.value = i.data;
@@ -132,28 +139,61 @@ limitations under the License. -->
}
segmentHeaders.forEach((span: Span) => {
if (span.refs.length) {
+ let exit = 0;
span.refs.forEach((ref) => {
- const index = props.data.findIndex(
+ const i = props.data.findIndex(
(i: Recordable) => ref.parentSegmentId === i.segmentId && ref.parentSpanId === i.spanId,
);
- if (index === -1) {
- // create a known broken node.
- const i = ref.parentSpanId;
- const fixSpanKeyContent = {
+ if (i > -1) {
+ exit = 1;
+ }
+ });
+
+ if (!exit) {
+ const ref = span.refs[0];
+ // create a known broken node.
+ const i = ref.parentSpanId;
+ const fixSpanKeyContent = {
+ traceId: ref.traceId,
+ segmentId: ref.parentSegmentId,
+ spanId: i,
+ parentSpanId: i > -1 ? 0 : -1,
+ };
+ if (!_.find(fixSpans, fixSpanKeyContent)) {
+ fixSpans.push({
+ ...fixSpanKeyContent,
+ refs: [],
+ endpointName: `VNode: ${ref.parentSegmentId}`,
+ serviceCode: "VirtualNode",
+ type: `[Broken] ${ref.type}`,
+ peer: "",
+ component: `VirtualNode: #${i}`,
+ isError: true,
+ isBroken: true,
+ layer: "Broken",
+ tags: [],
+ logs: [],
+ startTime: 0,
+ endTime: 0,
+ });
+ }
+ // if root broken node is not exist, create a root broken node.
+ if (fixSpanKeyContent.parentSpanId > -1) {
+ const fixRootSpanKeyContent = {
traceId: ref.traceId,
segmentId: ref.parentSegmentId,
- spanId: i,
- parentSpanId: i > -1 ? 0 : -1,
+ spanId: 0,
+ parentSpanId: -1,
};
- if (!_.find(fixSpans, fixSpanKeyContent)) {
+ if (!_.find(fixSpans, fixRootSpanKeyContent)) {
fixSpans.push({
- ...fixSpanKeyContent,
+ ...fixRootSpanKeyContent,
refs: [],
endpointName: `VNode: ${ref.parentSegmentId}`,
serviceCode: "VirtualNode",
type: `[Broken] ${ref.type}`,
peer: "",
- component: `VirtualNode: #${i}`,
+ component: `VirtualNode: #0`,
isError: true,
isBroken: true,
layer: "Broken",
@@ -163,44 +203,16 @@ limitations under the License. -->
endTime: 0,
});
}
- // if root broken node is not exist, create a root broken node.
- if (fixSpanKeyContent.parentSpanId > -1) {
- const fixRootSpanKeyContent = {
- traceId: ref.traceId,
- segmentId: ref.parentSegmentId,
- spanId: 0,
- parentSpanId: -1,
- };
- if (!_.find(fixSpans, fixRootSpanKeyContent)) {
- fixSpans.push({
- ...fixRootSpanKeyContent,
- refs: [],
- endpointName: `VNode: ${ref.parentSegmentId}`,
- serviceCode: "VirtualNode",
- type: `[Broken] ${ref.type}`,
- peer: "",
- component: `VirtualNode: #0`,
- isError: true,
- isBroken: true,
- layer: "Broken",
- tags: [],
- logs: [],
- startTime: 0,
- endTime: 0,
- });
- }
- }
}
- });
+ }
}
});
[...fixSpans, ...props.data].forEach((i) => {
i.label = i.endpointName || "no operation name";
i.children = [];
- if (segmentGroup[i.segmentId] === undefined) {
+ if (!segmentGroup[i.segmentId]) {
segmentIdGroup.push(i.segmentId);
- segmentGroup[i.segmentId] = [];
- segmentGroup[i.segmentId].push(i);
+ segmentGroup[i.segmentId] = [i];
} else {
segmentGroup[i.segmentId].push(i);
}
@@ -273,7 +285,7 @@ limitations under the License. -->
}
onBeforeUnmount(() => {
d3.selectAll(".d3-tip").remove();
- window.removeEventListener("resize", resize);
+ window.removeEventListener("resize", debounceFunc);
});
watch(
() => props.data,
diff --git a/src/views/dashboard/related/trace/components/D3Graph/SpanDetail.vue b/src/views/dashboard/related/trace/components/D3Graph/SpanDetail.vue
index a9d54711..eebdd416 100644
--- a/src/views/dashboard/related/trace/components/D3Graph/SpanDetail.vue
+++ b/src/views/dashboard/related/trace/components/D3Graph/SpanDetail.vue
@@ -42,6 +42,12 @@ limitations under the License. -->
{{ t("isError") }}:
{{ currentSpan.isError }}
+ {{ t("traceID") }}.
+
+
+ {{ item.traceId }}
+
+
{{ t("tags") }}.
{{ i.key }}:
@@ -127,7 +133,7 @@ limitations under the License. -->