Loki: Fix incorrect TopK value type in query builder (#52226)

* Loki: Fix incorrect TopK value type in query builder

* Simplify code

* Remove bracket

* Brackets are back
This commit is contained in:
Ivana Huckova 2022-07-15 13:03:14 +02:00 committed by GitHub
parent 91fd0223a4
commit 8fc51932f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 9 deletions

View File

@ -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]))');
});
});

View File

@ -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})`;
};
}