From b30a0c0bf72561f143aeeef9fc56b0dcbe5b6e51 Mon Sep 17 00:00:00 2001 From: Fine Date: Wed, 9 Nov 2022 21:29:00 +0800 Subject: [PATCH] topN --- src/hooks/useLegendProcessor.ts | 21 ++++++++++-- src/views/dashboard/graphs/Line.vue | 2 +- .../dashboard/graphs/components/Legend.vue | 32 +++++++++++-------- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/hooks/useLegendProcessor.ts b/src/hooks/useLegendProcessor.ts index 177b7e66..95cfd436 100644 --- a/src/hooks/useLegendProcessor.ts +++ b/src/hooks/useLegendProcessor.ts @@ -37,7 +37,10 @@ export default function useLegendProcess(legend?: LegendOptions) { } return true; } - function aggregations(data: { [key: string]: number[] }) { + function aggregations( + data: { [key: string]: number[] }, + intervalTime: string[] + ) { const source: { [key: string]: unknown }[] = []; const keys = Object.keys(data || {}).filter( (i: any) => Array.isArray(data[i]) && data[i].length @@ -45,9 +48,23 @@ export default function useLegendProcess(legend?: LegendOptions) { const headers = []; for (const [key, value] of keys.entries()) { + const arr = JSON.parse(JSON.stringify(data[value])); const item: { [key: string]: unknown } = { name: value, - topN: data[value], + topN: arr + .map((d: number, index: number) => { + return { + key: intervalTime[index], + value: d, + }; + }) + .sort( + ( + a: { key: string; value: number }, + b: { key: string; value: number } + ) => b.value - a.value + ) + .filter((_: unknown, index: number) => index < 10), }; if (legend) { if (legend.min) { diff --git a/src/views/dashboard/graphs/Line.vue b/src/views/dashboard/graphs/Line.vue index 8b5a9b8a..34b878d4 100644 --- a/src/views/dashboard/graphs/Line.vue +++ b/src/views/dashboard/graphs/Line.vue @@ -20,7 +20,7 @@ limitations under the License. --> :filters="config.filters" :relatedTrace="config.relatedTrace" /> - +