mirror of
https://github.com/apache/skywalking-booster-ui.git
synced 2025-05-02 18:04:54 +00:00
fix: resizing window causes the trace graph to display incorrectly (#367)
This commit is contained in:
parent
f76500bb6e
commit
7aef327d2e
29
src/utils/debounce.ts
Normal file
29
src/utils/debounce.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export function debounce(callback: Function, dur: number) {
|
||||||
|
let timer: any;
|
||||||
|
|
||||||
|
return function () {
|
||||||
|
if (timer) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
}
|
||||||
|
timer = setTimeout(function () {
|
||||||
|
callback();
|
||||||
|
}, dur);
|
||||||
|
};
|
||||||
|
}
|
@ -81,7 +81,7 @@ limitations under the License. -->
|
|||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: $font-size-smaller;
|
font-size: $font-size-smaller;
|
||||||
border-bottom: 1px solid $border-color;
|
border-bottom: 1px solid $border-color;
|
||||||
min-width: 1200px;
|
min-width: 1000px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tools {
|
.tools {
|
||||||
@ -101,6 +101,6 @@ limitations under the License. -->
|
|||||||
min-height: calc(100% - 150px);
|
min-height: calc(100% - 150px);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
min-width: 1200px;
|
min-width: 1000px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -172,9 +172,8 @@ limitations under the License. -->
|
|||||||
}
|
}
|
||||||
|
|
||||||
.trace-chart {
|
.trace-chart {
|
||||||
height: calc(100% - 100px);
|
height: calc(100% - 95px);
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
padding-bottom: 20px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.trace-detail-wrapper {
|
.trace-detail-wrapper {
|
||||||
|
@ -159,6 +159,7 @@ limitations under the License. -->
|
|||||||
|
|
||||||
.selectors {
|
.selectors {
|
||||||
margin: 2px 2px 0 0;
|
margin: 2px 2px 0 0;
|
||||||
|
width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.trace-t-wrapper {
|
.trace-t-wrapper {
|
||||||
@ -182,11 +183,11 @@ limitations under the License. -->
|
|||||||
}
|
}
|
||||||
|
|
||||||
.trace-t {
|
.trace-t {
|
||||||
width: 420px;
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
width: 300px;
|
width: 280px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.trace-tr {
|
.trace-tr {
|
||||||
|
@ -29,6 +29,7 @@ limitations under the License. -->
|
|||||||
import type { Span, Ref } from "@/types/trace";
|
import type { Span, Ref } from "@/types/trace";
|
||||||
import SpanDetail from "./SpanDetail.vue";
|
import SpanDetail from "./SpanDetail.vue";
|
||||||
import { useAppStoreWithOut } from "@/store/modules/app";
|
import { useAppStoreWithOut } from "@/store/modules/app";
|
||||||
|
import { debounce } from "@/utils/debounce";
|
||||||
|
|
||||||
/* global defineProps, Nullable, defineExpose,Recordable*/
|
/* global defineProps, Nullable, defineExpose,Recordable*/
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -45,6 +46,8 @@ limitations under the License. -->
|
|||||||
const refSpans = ref<Array<Ref>>([]);
|
const refSpans = ref<Array<Ref>>([]);
|
||||||
const tree = ref<Nullable<any>>(null);
|
const tree = ref<Nullable<any>>(null);
|
||||||
const traceGraph = ref<Nullable<HTMLDivElement>>(null);
|
const traceGraph = ref<Nullable<HTMLDivElement>>(null);
|
||||||
|
const debounceFunc = debounce(draw, 500);
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
tree,
|
tree,
|
||||||
});
|
});
|
||||||
@ -55,6 +58,15 @@ limitations under the License. -->
|
|||||||
loading.value = false;
|
loading.value = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
draw();
|
||||||
|
loading.value = false;
|
||||||
|
window.addEventListener("resize", debounceFunc);
|
||||||
|
});
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
if (!traceGraph.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (props.type === "List") {
|
if (props.type === "List") {
|
||||||
tree.value = new ListGraph(traceGraph.value, handleSelectSpan);
|
tree.value = new ListGraph(traceGraph.value, handleSelectSpan);
|
||||||
tree.value.init({ label: "TRACE_ROOT", children: segmentId.value }, props.data, fixSpansSize.value);
|
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 = new TreeGraph(traceGraph.value, handleSelectSpan);
|
||||||
tree.value.init({ label: `${props.traceId}`, children: segmentId.value }, props.data);
|
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) {
|
function handleSelectSpan(i: Recordable) {
|
||||||
currentSpan.value = i.data;
|
currentSpan.value = i.data;
|
||||||
@ -273,7 +280,7 @@ limitations under the License. -->
|
|||||||
}
|
}
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
d3.selectAll(".d3-tip").remove();
|
d3.selectAll(".d3-tip").remove();
|
||||||
window.removeEventListener("resize", resize);
|
window.removeEventListener("resize", debounceFunc);
|
||||||
});
|
});
|
||||||
watch(
|
watch(
|
||||||
() => props.data,
|
() => props.data,
|
||||||
|
@ -47,6 +47,7 @@ export default class ListGraph {
|
|||||||
this.el = el;
|
this.el = el;
|
||||||
this.width = el.getBoundingClientRect().width - 10;
|
this.width = el.getBoundingClientRect().width - 10;
|
||||||
this.height = el.getBoundingClientRect().height - 10;
|
this.height = el.getBoundingClientRect().height - 10;
|
||||||
|
d3.select(".trace-list-dowanload").remove();
|
||||||
this.svg = d3
|
this.svg = d3
|
||||||
.select(this.el)
|
.select(this.el)
|
||||||
.append("svg")
|
.append("svg")
|
||||||
@ -384,15 +385,4 @@ export default class ListGraph {
|
|||||||
visDate(date: number, pattern = "YYYY-MM-DD HH:mm:ss:SSS") {
|
visDate(date: number, pattern = "YYYY-MM-DD HH:mm:ss:SSS") {
|
||||||
return dayjs(date).format(pattern);
|
return dayjs(date).format(pattern);
|
||||||
}
|
}
|
||||||
resize() {
|
|
||||||
if (!this.el) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.width = this.el.getBoundingClientRect().width - 20;
|
|
||||||
this.height = this.el.getBoundingClientRect().height - 10;
|
|
||||||
this.svg.attr("width", this.width).attr("height", this.height);
|
|
||||||
this.svg.select("g").attr("transform", () => `translate(160, 0)`);
|
|
||||||
const transform = d3.zoomTransform(this.svg).translate(0, 0);
|
|
||||||
d3.zoom().transform(this.svg, transform);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,7 @@ export default class TraceMap {
|
|||||||
this.topChild = [];
|
this.topChild = [];
|
||||||
this.width = el.clientWidth - 20;
|
this.width = el.clientWidth - 20;
|
||||||
this.height = el.clientHeight - 30;
|
this.height = el.clientHeight - 30;
|
||||||
|
d3.select(".d3-trace-tree").remove();
|
||||||
this.body = d3
|
this.body = d3
|
||||||
.select(this.el)
|
.select(this.el)
|
||||||
.append("svg")
|
.append("svg")
|
||||||
@ -78,17 +79,6 @@ export default class TraceMap {
|
|||||||
this.svg = this.body.append("g").attr("transform", () => `translate(120, 0)`);
|
this.svg = this.body.append("g").attr("transform", () => `translate(120, 0)`);
|
||||||
this.svg.call(this.tip);
|
this.svg.call(this.tip);
|
||||||
}
|
}
|
||||||
resize() {
|
|
||||||
if (!this.el) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.width = this.el.clientWidth;
|
|
||||||
this.height = this.el.clientHeight + 100;
|
|
||||||
this.body.attr("width", this.width).attr("height", this.height);
|
|
||||||
this.body.select("g").attr("transform", () => `translate(160, 0)`);
|
|
||||||
const transform = d3.zoomTransform(this.body).translate(0, 0);
|
|
||||||
d3.zoom().transform(this.body, transform);
|
|
||||||
}
|
|
||||||
init(data: Recordable, row: Recordable) {
|
init(data: Recordable, row: Recordable) {
|
||||||
this.treemap = d3.tree().size([row.length * 35, this.width]);
|
this.treemap = d3.tree().size([row.length * 35, this.width]);
|
||||||
this.row = row;
|
this.row = row;
|
||||||
|
Loading…
Reference in New Issue
Block a user