Loki: Add missing functions to query builder (#47333)

This commit is contained in:
Ivana Huckova
2022-04-05 19:15:22 +02:00
committed by GitHub
parent 901e8a74f9
commit 82aa31df36
2 changed files with 49 additions and 3 deletions

View File

@@ -18,6 +18,9 @@ export function getOperationDefinitions(): QueryBuilderOperationDef[] {
LokiOperationId.Avg,
LokiOperationId.TopK,
LokiOperationId.BottomK,
LokiOperationId.Stddev,
LokiOperationId.Stdvar,
LokiOperationId.Count,
].flatMap((opId) =>
createAggregationOperation(opId, {
addOperationHandler: addLokiOperation,
@@ -32,6 +35,14 @@ export function getOperationDefinitions(): QueryBuilderOperationDef[] {
createRangeOperation(LokiOperationId.BytesRate),
createRangeOperation(LokiOperationId.BytesOverTime),
createRangeOperation(LokiOperationId.AbsentOverTime),
createRangeOperation(LokiOperationId.AvgOverTime),
createRangeOperation(LokiOperationId.MaxOverTime),
createRangeOperation(LokiOperationId.MinOverTime),
createRangeOperation(LokiOperationId.FirstOverTime),
createRangeOperation(LokiOperationId.LastOverTime),
createRangeOperation(LokiOperationId.StdvarOverTime),
createRangeOperation(LokiOperationId.StddevOverTime),
createRangeOperation(LokiOperationId.QuantileOverTime),
...aggregations,
{
id: LokiOperationId.Json,
@@ -303,15 +314,28 @@ export function getOperationDefinitions(): QueryBuilderOperationDef[] {
}
function createRangeOperation(name: string): QueryBuilderOperationDef {
const params = [getRangeVectorParamDef()];
const defaultParams = ['$__interval'];
let renderer = operationWithRangeVectorRenderer;
if (name === LokiOperationId.QuantileOverTime) {
defaultParams.push('0.95');
params.push({
name: 'Quantile',
type: 'number',
});
renderer = operationWithRangeVectorRendererAndParam;
}
return {
id: name,
name: getPromAndLokiOperationDisplayName(name),
params: [getRangeVectorParamDef()],
defaultParams: ['$__interval'],
params,
defaultParams,
alternativesKey: 'range function',
category: LokiVisualQueryOperationCategory.RangeFunctions,
orderRank: LokiOperationOrder.RangeVectorFunction,
renderer: operationWithRangeVectorRenderer,
renderer,
addOperationHandler: addLokiOperation,
explainHandler: (op, def) => {
let opDocs = FUNCTIONS.find((x) => x.insertText === op.id)?.documentation ?? '';
@@ -342,6 +366,17 @@ function operationWithRangeVectorRenderer(
return `${def.id}(${innerExpr} [${rangeVector}])`;
}
function operationWithRangeVectorRendererAndParam(
model: QueryBuilderOperation,
def: QueryBuilderOperationDef,
innerExpr: string
) {
const params = model.params ?? [];
const rangeVector = params[0] ?? '$__interval';
const param = params[1];
return `${def.id}(${param}, ${innerExpr} [${rangeVector}])`;
}
function getLineFilterRenderer(operation: string) {
return function lineFilterRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) {
if (model.params[0] === '') {

View File

@@ -38,6 +38,14 @@ export enum LokiOperationId {
Rate = 'rate',
CountOverTime = 'count_over_time',
SumOverTime = 'sum_over_time',
AvgOverTime = 'avg_over_time',
MaxOverTime = 'max_over_time',
MinOverTime = 'min_over_time',
FirstOverTime = 'first_over_time',
LastOverTime = 'last_over_time',
StdvarOverTime = 'stdvar_over_time',
StddevOverTime = 'stddev_over_time',
QuantileOverTime = 'quantile_over_time',
BytesRate = 'bytes_rate',
BytesOverTime = 'bytes_over_time',
AbsentOverTime = 'absent_over_time',
@@ -45,6 +53,9 @@ export enum LokiOperationId {
Avg = 'avg',
Min = 'min',
Max = 'max',
Stddev = 'stddev',
Stdvar = 'stdvar',
Count = 'count',
TopK = 'topk',
BottomK = 'bottomk',
LineContains = '__line_contains',