mirror of
https://github.com/apache/skywalking-booster-ui.git
synced 2025-05-13 00:08:56 +00:00
feat: add flame graph
This commit is contained in:
parent
62044bc2d4
commit
1568772aed
@ -22,9 +22,11 @@ import type { AxiosResponse } from "axios";
|
|||||||
import { useAppStoreWithOut } from "@/store/modules/app";
|
import { useAppStoreWithOut } from "@/store/modules/app";
|
||||||
import type { EBPFTaskList } from "@/types/ebpf";
|
import type { EBPFTaskList } from "@/types/ebpf";
|
||||||
import { useNetworkProfilingStore } from "@/store/modules/network-profiling";
|
import { useNetworkProfilingStore } from "@/store/modules/network-profiling";
|
||||||
|
import { useContinousProfilingStore } from "@/store/modules/continous-profiling";
|
||||||
|
import { useEbpfStore } from "@/store/modules/ebpf";
|
||||||
import dateFormatStep from "@/utils/dateFormat";
|
import dateFormatStep from "@/utils/dateFormat";
|
||||||
import getLocalTime from "@/utils/localtime";
|
import getLocalTime from "@/utils/localtime";
|
||||||
|
import { TargetTypes } from "@/views/dashboard/related/continuous-profiling/data";
|
||||||
interface taskTimelineState {
|
interface taskTimelineState {
|
||||||
loading: boolean;
|
loading: boolean;
|
||||||
taskList: EBPFTaskList[];
|
taskList: EBPFTaskList[];
|
||||||
@ -74,6 +76,23 @@ export const taskTimelineStore = defineStore({
|
|||||||
// await this.getGraphData();
|
// await this.getGraphData();
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
|
async getGraphData() {
|
||||||
|
let res: any = {};
|
||||||
|
const continousProfilingStore = useContinousProfilingStore();
|
||||||
|
|
||||||
|
if (continousProfilingStore.selectedStrategy.type === TargetTypes[2].value) {
|
||||||
|
res = await this.getTopology();
|
||||||
|
} else {
|
||||||
|
const ebpfStore = useEbpfStore();
|
||||||
|
res = await ebpfStore.getEBPFSchedules({
|
||||||
|
taskId: this.selectedTask.taskId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res.errors) {
|
||||||
|
ElMessage.error(res.errors);
|
||||||
|
}
|
||||||
|
},
|
||||||
async getTopology() {
|
async getTopology() {
|
||||||
const networkProfilingStore = useNetworkProfilingStore();
|
const networkProfilingStore = useNetworkProfilingStore();
|
||||||
const appStore = useAppStoreWithOut();
|
const appStore = useAppStoreWithOut();
|
||||||
|
@ -19,7 +19,14 @@ limitations under the License. -->
|
|||||||
{{ t("noData") }}
|
{{ t("noData") }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="content" v-else>flame</div>
|
<div class="content" v-else>
|
||||||
|
<div class="schedules">
|
||||||
|
<EBPFSchedules />
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<EBPFStack />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { PropType } from "vue";
|
import type { PropType } from "vue";
|
||||||
@ -28,6 +35,8 @@ limitations under the License. -->
|
|||||||
import { useNetworkProfilingStore } from "@/store/modules/network-profiling";
|
import { useNetworkProfilingStore } from "@/store/modules/network-profiling";
|
||||||
import { TargetTypes } from "../../continuous-profiling/data";
|
import { TargetTypes } from "../../continuous-profiling/data";
|
||||||
import ProcessTopology from "@/views/dashboard/related/network-profiling/components/ProcessTopology.vue";
|
import ProcessTopology from "@/views/dashboard/related/network-profiling/components/ProcessTopology.vue";
|
||||||
|
import EBPFSchedules from "@/views/dashboard/related/ebpf/components/EBPFSchedules.vue";
|
||||||
|
import EBPFStack from "@/views/dashboard/related/ebpf/components/EBPFStack.vue";
|
||||||
|
|
||||||
/*global defineProps */
|
/*global defineProps */
|
||||||
defineProps({
|
defineProps({
|
||||||
@ -55,4 +64,17 @@ limitations under the License. -->
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
height: calc(100% - 100px);
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.schedules {
|
||||||
|
height: 90px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -117,11 +117,12 @@ limitations under the License. -->
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
visGraph.value = new Timeline(timeline.value, items, options);
|
visGraph.value = new Timeline(timeline.value, items, options);
|
||||||
visGraph.value.on("select", (properties: { items: number[] }) => {
|
visGraph.value.on("select", async (properties: { items: number[] }) => {
|
||||||
dashboardStore.selectWidget(props.data);
|
dashboardStore.selectWidget(props.data);
|
||||||
const index = items[0];
|
const index = properties.items[0];
|
||||||
taskTimelineStore.setSelectedTask(taskList[index]);
|
const task = taskList[index];
|
||||||
taskTimelineStore.getTopology();
|
await taskTimelineStore.setSelectedTask(task);
|
||||||
|
await taskTimelineStore.getGraphData();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user