diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.test.ts b/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.test.ts index 3b6f532237e..72a9c178545 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.test.ts +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.test.ts @@ -124,4 +124,43 @@ describe('createAggregationOperationWithParams', () => { }, ]); }); + it('returns correct query string using aggregation definitions with overrides and number type param', () => { + const def = createAggregationOperationWithParam( + 'test_aggregation', + { + params: [{ name: 'K-value', type: 'number' }], + defaultParams: [5], + }, + { category: 'test_category' } + ); + + const topKByDefinition = def[1]; + expect( + topKByDefinition.renderer( + { id: '__topk_by', params: ['5', 'source', 'place'] }, + def[1], + 'rate({place="luna"} |= `` [5m])' + ) + ).toBe('test_aggregation by(source, place) (5, rate({place="luna"} |= `` [5m]))'); + }); + + it('returns correct query string using aggregation definitions with overrides and string type param', () => { + const def = createAggregationOperationWithParam( + 'test_aggregation', + { + params: [{ name: 'Identifier', type: 'string' }], + defaultParams: ['count'], + }, + { category: 'test_category' } + ); + + const countValueDefinition = def[1]; + expect( + countValueDefinition.renderer( + { id: 'count_values', params: ['5', 'source', 'place'] }, + def[1], + 'rate({place="luna"} |= `` [5m])' + ) + ).toBe('test_aggregation by(source, place) ("5", rate({place="luna"} |= `` [5m]))'); + }); }); diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.ts b/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.ts index ef6689763d3..024c441bc47 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.ts +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.ts @@ -279,15 +279,13 @@ function getAggregationExplainer(aggregationName: string, mode: 'by' | 'without' function getAggregationByRendererWithParameter(aggregation: string) { return function aggregationRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) { - function mapType(p: QueryBuilderOperationParamValue) { - if (typeof p === 'string') { - return `\"${p}\"`; - } - return p; - } - const params = model.params.slice(0, -1); - const restParams = model.params.slice(1); - return `${aggregation} by(${restParams.join(', ')}) (${params.map(mapType).join(', ')}, ${innerExpr})`; + const restParamIndex = def.params.findIndex((param) => param.restParam); + const params = model.params.slice(0, restParamIndex); + const restParams = model.params.slice(restParamIndex); + + return `${aggregation} by(${restParams.join(', ')}) (${params + .map((param, idx) => (def.params[idx].type === 'string' ? `\"${param}\"` : param)) + .join(', ')}, ${innerExpr})`; }; }