From f563ba59b86127e957e8c6a83d66bd245bc2927a Mon Sep 17 00:00:00 2001 From: Fine Date: Tue, 22 Aug 2023 22:36:01 +0800 Subject: [PATCH] feat: update legend --- src/locales/lang/en.ts | 1 + src/locales/lang/es.ts | 1 + src/locales/lang/zh.ts | 1 + .../related/topology/components/Graph.vue | 32 +++--- .../related/topology/components/Settings.vue | 108 ++++++++++-------- 5 files changed, 84 insertions(+), 59 deletions(-) diff --git a/src/locales/lang/en.ts b/src/locales/lang/en.ts index 9d9801c0..1d983f65 100644 --- a/src/locales/lang/en.ts +++ b/src/locales/lang/en.ts @@ -381,5 +381,6 @@ const msg = { metricMode: "Metric Mode", addExpressions: "Add Expressions", expressions: "Expression", + unhealthyExpression: "Unhealthy Expression", }; export default msg; diff --git a/src/locales/lang/es.ts b/src/locales/lang/es.ts index 336c93e7..b92ba40b 100644 --- a/src/locales/lang/es.ts +++ b/src/locales/lang/es.ts @@ -381,5 +381,6 @@ const msg = { metricMode: "Metric Mode", addExpressions: "Add Expressions", expressions: "Expression", + unhealthyExpression: "Unhealthy Expression", }; export default msg; diff --git a/src/locales/lang/zh.ts b/src/locales/lang/zh.ts index 8ad38a2e..edc9a665 100644 --- a/src/locales/lang/zh.ts +++ b/src/locales/lang/zh.ts @@ -379,5 +379,6 @@ const msg = { metricMode: "指标模式", addExpressions: "添加表达式", expressions: "表达式", + unhealthyExpression: "非健康表达式", }; export default msg; diff --git a/src/views/dashboard/related/topology/components/Graph.vue b/src/views/dashboard/related/topology/components/Graph.vue index 2ca64cf0..14df6465 100644 --- a/src/views/dashboard/related/topology/components/Graph.vue +++ b/src/views/dashboard/related/topology/components/Graph.vue @@ -361,23 +361,27 @@ limitations under the License. --> } async function initLegendMetrics() { - const names = props.config.legend.map((d: any) => d.name); - if (!names.length) { + if (!topologyStore.nodes.length) { return; } if (settings.value.metricMode === MetricModes.Expression) { - if (!topologyStore.nodes.length) { + const expression = props.config.legendMQE && props.config.legendMQE.expression; + if (!expression) { return; } - const { getExpressionQuery } = useQueryTopologyExpressionsProcessor(names, topologyStore.nodes); + const { getExpressionQuery } = useQueryTopologyExpressionsProcessor([expression], topologyStore.nodes); const param = getExpressionQuery(); const res = await topologyStore.getNodeExpressionValue(param); if (res.errors) { ElMessage.error(res.errors); } else { - topologyStore.setLegendValues(names, res.data); + topologyStore.setLegendValues([expression], res.data); } } else { + const names = props.config.legend.map((d: any) => d.name); + if (!names.length) { + return; + } const ids = topologyStore.nodes.map((d: Node) => d.id); if (ids.length) { const param = await useQueryTopologyMetrics(names, ids); @@ -390,20 +394,22 @@ limitations under the License. --> } function getNodeStatus(d: any) { - const legend = settings.value.legend; + const { legend, legendMQE } = settings.value; + if (settings.value.metricMode === MetricModes.Expression) { + if (!legendMQE) { + return icons.CUBE; + } + if (!legendMQE.expression) { + return icons.CUBE; + } + return Number(d[legendMQE.expression]) && d.isReal ? icons.CUBEERROR : icons.CUBE; + } if (!legend) { return icons.CUBE; } if (!legend.length) { return icons.CUBE; } - if (settings.value.metricMode === MetricModes.Expression) { - let c = true; - for (const l of legend) { - c = c && !!Number(d[l.name]); - } - return c && d.isReal ? icons.CUBEERROR : icons.CUBE; - } let c = true; for (const l of legend) { if (l.condition === "<") { diff --git a/src/views/dashboard/related/topology/components/Settings.vue b/src/views/dashboard/related/topology/components/Settings.vue index fdd0f366..d2074f36 100644 --- a/src/views/dashboard/related/topology/components/Settings.vue +++ b/src/views/dashboard/related/topology/components/Settings.vue @@ -13,11 +13,11 @@ 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. -->