mirror of
https://github.com/apache/skywalking-booster-ui.git
synced 2025-05-07 10:42:56 +00:00
fix: polish the eBPF profiling widget (#90)
This commit is contained in:
parent
8c7fee4d86
commit
21523b8cb5
2
src/types/ebpf.d.ts
vendored
2
src/types/ebpf.d.ts
vendored
@ -52,7 +52,7 @@ export type Process = {
|
|||||||
instanceName: string;
|
instanceName: string;
|
||||||
agentId: string;
|
agentId: string;
|
||||||
detectType: string;
|
detectType: string;
|
||||||
attributes: { name: string; value: string };
|
attributes: { name: string; value: string }[];
|
||||||
labels: string[];
|
labels: string[];
|
||||||
};
|
};
|
||||||
export type StackElement = {
|
export type StackElement = {
|
||||||
|
@ -16,7 +16,7 @@ limitations under the License. -->
|
|||||||
<div class="flex-h content">
|
<div class="flex-h content">
|
||||||
<TaskList />
|
<TaskList />
|
||||||
<div class="vis-graph ml-5">
|
<div class="vis-graph ml-5">
|
||||||
<div class="item">
|
<div class="schedules">
|
||||||
<EBPFSchedules />
|
<EBPFSchedules />
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
@ -44,7 +44,11 @@ import EBPFStack from "./components/EBPFStack.vue";
|
|||||||
.item {
|
.item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
height: calc(50% - 10px);
|
height: calc(100% - 200px);
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.schedules {
|
||||||
|
height: 190px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -34,7 +34,7 @@ limitations under the License. -->
|
|||||||
placeholder="Please input name"
|
placeholder="Please input name"
|
||||||
class="input-with-search"
|
class="input-with-search"
|
||||||
size="small"
|
size="small"
|
||||||
@change="searchProcesses"
|
@change="searchProcesses(0)"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
<el-button size="small">
|
<el-button size="small">
|
||||||
@ -180,7 +180,7 @@ function visTimeline() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
searchProcesses();
|
searchProcesses(0);
|
||||||
if (!timeline.value) {
|
if (!timeline.value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -190,6 +190,8 @@ function visTimeline() {
|
|||||||
height: h,
|
height: h,
|
||||||
width: "100%",
|
width: "100%",
|
||||||
locale: "en",
|
locale: "en",
|
||||||
|
selectable: false,
|
||||||
|
zoomable: false,
|
||||||
};
|
};
|
||||||
visGraph.value = new Timeline(timeline.value, items, options);
|
visGraph.value = new Timeline(timeline.value, items, options);
|
||||||
}
|
}
|
||||||
@ -198,18 +200,38 @@ function changePage(pageIndex: number) {
|
|||||||
searchProcesses(pageIndex);
|
searchProcesses(pageIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
function searchProcesses(pageIndex?: any) {
|
function searchProcesses(pageIndex: number) {
|
||||||
const arr = processes.value.filter(
|
const arr = processes.value.filter(
|
||||||
(d: { name: string; instanceName: string }) =>
|
(d: {
|
||||||
|
name: string;
|
||||||
|
instanceName: string;
|
||||||
|
attributes: { name: string; value: string }[];
|
||||||
|
}) =>
|
||||||
d.name.includes(searchText.value) ||
|
d.name.includes(searchText.value) ||
|
||||||
d.instanceName.includes(searchText.value)
|
d.instanceName.includes(searchText.value) ||
|
||||||
|
searchAttribute(d.attributes, searchText.value)
|
||||||
);
|
);
|
||||||
currentProcesses.value = arr.splice(
|
currentProcesses.value = arr.filter(
|
||||||
(pageIndex - 1 || 0) * pageSize,
|
(d, index: number) =>
|
||||||
pageSize * (pageIndex || 1)
|
(pageIndex - 1 || 0) * pageSize <= index &&
|
||||||
|
pageSize * (pageIndex || 1) > index
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function searchAttribute(
|
||||||
|
attributes: { name: string; value: string }[],
|
||||||
|
text: string
|
||||||
|
) {
|
||||||
|
const item = attributes.find(
|
||||||
|
(d: { name: string; value: string }) => d.name === "command_line"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return item.value.includes(text);
|
||||||
|
}
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => ebpfStore.eBPFSchedules,
|
() => ebpfStore.eBPFSchedules,
|
||||||
() => {
|
() => {
|
||||||
|
@ -78,6 +78,7 @@ function drawGraph() {
|
|||||||
.sort(true)
|
.sort(true)
|
||||||
.title("")
|
.title("")
|
||||||
.selfValue(false)
|
.selfValue(false)
|
||||||
|
.inverted(true)
|
||||||
.setColorMapper((d, originalColor) =>
|
.setColorMapper((d, originalColor) =>
|
||||||
d.highlight ? "#6aff8f" : originalColor
|
d.highlight ? "#6aff8f" : originalColor
|
||||||
);
|
);
|
||||||
@ -86,8 +87,9 @@ function drawGraph() {
|
|||||||
.direction("w")
|
.direction("w")
|
||||||
.html(
|
.html(
|
||||||
(d: { data: StackElement }) =>
|
(d: { data: StackElement }) =>
|
||||||
`<div class="mb-5">Symbol: ${d.data.name}</div><div class="mb-5">Dump Count: ${d.data.dumpCount}</div>`
|
`<div class="mb-5 name">Symbol: ${d.data.name}</div><div class="mb-5">Dump Count: ${d.data.dumpCount}</div>`
|
||||||
);
|
)
|
||||||
|
.style("max-width", "500px");
|
||||||
flameChart.value.tooltip(tip);
|
flameChart.value.tooltip(tip);
|
||||||
d3.select("#graph-stack").datum(stackTree.value).call(flameChart.value);
|
d3.select("#graph-stack").datum(stackTree.value).call(flameChart.value);
|
||||||
}
|
}
|
||||||
@ -176,4 +178,8 @@ watch(
|
|||||||
color: red;
|
color: red;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.name {
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -111,10 +111,6 @@ function changeType(opt: any[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function createTask() {
|
async function createTask() {
|
||||||
if (!labels.value.length) {
|
|
||||||
ElMessage.warning("no labels");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const date = monitorTime.value === "0" ? new Date() : time.value;
|
const date = monitorTime.value === "0" ? new Date() : time.value;
|
||||||
const params = {
|
const params = {
|
||||||
serviceId: selectorStore.currentService.id,
|
serviceId: selectorStore.currentService.id,
|
||||||
|
Loading…
Reference in New Issue
Block a user