From d7335948048c1fd7f12c4c1f5502b54e3e771b69 Mon Sep 17 00:00:00 2001 From: Fine0830 Date: Sun, 27 Mar 2022 14:36:35 +0800 Subject: [PATCH] fix: set different scope for topN metrics (#40) --- src/hooks/useProcessor.ts | 31 +++++++++++++++++-- .../configuration/widget/metric/Index.vue | 11 +++++-- src/views/dashboard/controls/Widget.vue | 10 ++++-- .../related/topology/components/Metrics.vue | 3 +- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/hooks/useProcessor.ts b/src/hooks/useProcessor.ts index f91f4515..8a646336 100644 --- a/src/hooks/useProcessor.ts +++ b/src/hooks/useProcessor.ts @@ -22,6 +22,7 @@ import { useSelectorStore } from "@/store/modules/selectors"; import { useAppStoreWithOut } from "@/store/modules/app"; import { Instance, Endpoint, Service } from "@/types/selector"; import { MetricConfigOpt } from "@/types/dashboard"; +import { MetricCatalog } from "@/views/dashboard/data"; export function useQueryProcessor(config: any) { if (!(config.metrics && config.metrics[0])) { @@ -61,8 +62,10 @@ export function useQueryProcessor(config: any) { parentService: ["All"].includes(dashboardStore.entity) ? null : selectorStore.currentService.value, - normal: selectorStore.currentService.normal, - scope: dashboardStore.entity, + normal: selectorStore.currentService + ? selectorStore.currentService.normal + : true, + scope: config.catalog || dashboardStore.entity, topN: 10, order: c.sortOrder || "DES", }; @@ -340,3 +343,27 @@ export function aggregation(val: number, config: any): number | string { return data; } + +export async function useGetMetricEntity(metric: string, metricType: any) { + if (!metric || !metricType) { + return; + } + let catalog = ""; + const dashboardStore = useDashboardStore(); + if ( + [ + MetricQueryTypes.ReadSampledRecords, + MetricQueryTypes.SortMetrics, + ].includes(metricType) + ) { + const res = await dashboardStore.fetchMetricList(metric); + if (res.errors) { + ElMessage.error(res.errors); + return; + } + const c: string = res.data.metrics[0].catalog; + catalog = (MetricCatalog as any)[c]; + } + + return catalog; +} diff --git a/src/views/dashboard/configuration/widget/metric/Index.vue b/src/views/dashboard/configuration/widget/metric/Index.vue index e1182702..c0d9f5e7 100644 --- a/src/views/dashboard/configuration/widget/metric/Index.vue +++ b/src/views/dashboard/configuration/widget/metric/Index.vue @@ -111,7 +111,11 @@ import { } from "../../../data"; import { ElMessage } from "element-plus"; import Icon from "@/components/Icon.vue"; -import { useQueryProcessor, useSourceProcessor } from "@/hooks/useProcessor"; +import { + useQueryProcessor, + useSourceProcessor, + useGetMetricEntity, +} from "@/hooks/useProcessor"; import { useI18n } from "vue-i18n"; import { DashboardItem, MetricConfigOpt } from "@/types/dashboard"; import Standard from "./Standard.vue"; @@ -343,8 +347,9 @@ async function queryMetrics() { if (states.isList) { return; } - const { metricConfig } = dashboardStore.selectedGrid; - const params = useQueryProcessor({ ...states, metricConfig }); + const { metricConfig, metricTypes, metrics } = dashboardStore.selectedGrid; + const catalog = await useGetMetricEntity(metrics[0], metricTypes[0]); + const params = useQueryProcessor({ ...states, metricConfig, catalog }); if (!params) { emit("update", {}); return; diff --git a/src/views/dashboard/controls/Widget.vue b/src/views/dashboard/controls/Widget.vue index 2d71bf22..57e8f3b5 100644 --- a/src/views/dashboard/controls/Widget.vue +++ b/src/views/dashboard/controls/Widget.vue @@ -81,7 +81,11 @@ import { useAppStoreWithOut } from "@/store/modules/app"; import { useSelectorStore } from "@/store/modules/selectors"; import graphs from "../graphs"; import { useI18n } from "vue-i18n"; -import { useQueryProcessor, useSourceProcessor } from "@/hooks/useProcessor"; +import { + useQueryProcessor, + useSourceProcessor, + useGetMetricEntity, +} from "@/hooks/useProcessor"; import { EntityType, ListChartTypes } from "../data"; const props = { @@ -113,7 +117,9 @@ export default defineComponent({ } async function queryMetrics() { - const params = await useQueryProcessor(props.data); + const { metricTypes, metrics } = props.data; + const catalog = await useGetMetricEntity(metrics[0], metricTypes[0]); + const params = await useQueryProcessor({ ...props.data, catalog }); if (!params) { state.source = {}; diff --git a/src/views/dashboard/related/topology/components/Metrics.vue b/src/views/dashboard/related/topology/components/Metrics.vue index 43a4298e..7c5d1463 100644 --- a/src/views/dashboard/related/topology/components/Metrics.vue +++ b/src/views/dashboard/related/topology/components/Metrics.vue @@ -106,11 +106,12 @@ const getMetricConfig = computed(() => { }); function changeConfigs(param: { [key: string]: string }) { - const metricConfig = getMetricConfig.value; + const metricConfig = getMetricConfig.value || []; metricConfig[currentIndex.value] = { ...metricConfig[currentIndex.value], ...param, }; + currentConfig.value = metricConfig[currentIndex.value]; emit("update", { [props.type]: metricConfig }); } function changeMetric(val: string) {