From 2d733a4d77188b0017f037ded80e8d8f17ed4763 Mon Sep 17 00:00:00 2001 From: Brendan O'Handley Date: Fri, 19 Apr 2024 08:32:26 -0500 Subject: [PATCH] Prometheus: Do not throw error for label_join function (#86465) --- .../src/querybuilder/operations.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/grafana-prometheus/src/querybuilder/operations.ts b/packages/grafana-prometheus/src/querybuilder/operations.ts index afecda0ab31..cb83b0a44d6 100644 --- a/packages/grafana-prometheus/src/querybuilder/operations.ts +++ b/packages/grafana-prometheus/src/querybuilder/operations.ts @@ -219,6 +219,7 @@ export function getOperationDefinitions(): QueryBuilderOperationDef[] { ], defaultParams: ['', ',', ''], renderer: labelJoinRenderer, + explainHandler: labelJoinExplainHandler, addOperationHandler: labelJoinAddOperationHandler, }), createFunction({ id: PromOperationId.Log10 }), @@ -374,11 +375,21 @@ function addNestedQueryHandler(def: QueryBuilderOperationDef, query: PromVisualQ } function labelJoinRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) { - if (typeof model.params[1] !== 'string') { - throw 'The separator must be a string'; + const paramZero = model.params[0] ?? ''; + const paramOne = model.params[1] ?? ''; + + const separator = `"${paramOne}"`; + return `${model.id}(${innerExpr}, "${paramZero}", ${separator}, "${model.params.slice(2).join(separator)}")`; +} + +function labelJoinExplainHandler(op: QueryBuilderOperation, def?: QueryBuilderOperationDef): string { + let explainMessage = def?.documentation ?? 'no docs'; + + if (typeof op.params[1] !== 'string') { + explainMessage += ' 🚨🚨🚨 The `separator` must be a string.'; } - const separator = `"${model.params[1]}"`; - return `${model.id}(${innerExpr}, "${model.params[0]}", ${separator}, "${model.params.slice(2).join(separator)}")`; + + return explainMessage; } function labelJoinAddOperationHandler(def: QueryBuilderOperationDef, query: T) {