Files
grafana/packages/grafana-prometheus/src/querybuilder/aggregations.ts
Brendan O'Handley f85470d652 Prometheus: Use the frontend package in Prometheus and remove feature toggle (#86080)
* add history links for monaco completion provider folder

* add history links for monaco query field folder

* add history links for components folder

* add history links for configuration folder

* add history links for dashboard json folder

* add history links for gcopypaste folder

* add history link for variableMigration

* add history link for querybuilder/components/metrics-modal folder

* add history link for querybuilder/components/promqail folder

* add history links for querybuilder/components folder

* add history links for querybuilder/hooks folder

* add history links for querybuilder/shared folder

* add history links for querybuilder folder

* add history links for querycache folder

* add history links for src folder

* use frontend package and custom auth in module.ts

* remove files and fix import issues

* remove usePrometheusFrontendPackage

* remove extra files

* update betterer

* remove extra files after rebase

* fix betterer for rebase

* fix e2e flakiness
2024-04-15 16:45:23 -05:00

64 lines
2.6 KiB
TypeScript

// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/aggregations.ts
import {
createAggregationOperation,
createAggregationOperationWithParam,
getPromOperationDisplayName,
getRangeVectorParamDef,
} from './operationUtils';
import { addOperationWithRangeVector } from './operations';
import { QueryBuilderOperation, QueryBuilderOperationDef } from './shared/types';
import { PromOperationId, PromVisualQueryOperationCategory } from './types';
export function getAggregationOperations(): QueryBuilderOperationDef[] {
return [
...createAggregationOperation(PromOperationId.Sum),
...createAggregationOperation(PromOperationId.Avg),
...createAggregationOperation(PromOperationId.Min),
...createAggregationOperation(PromOperationId.Max),
...createAggregationOperation(PromOperationId.Count),
...createAggregationOperationWithParam(PromOperationId.TopK, {
params: [{ name: 'K-value', type: 'number' }],
defaultParams: [5],
}),
...createAggregationOperationWithParam(PromOperationId.BottomK, {
params: [{ name: 'K-value', type: 'number' }],
defaultParams: [5],
}),
...createAggregationOperationWithParam(PromOperationId.CountValues, {
params: [{ name: 'Identifier', type: 'string' }],
defaultParams: ['count'],
}),
createAggregationOverTime(PromOperationId.SumOverTime),
createAggregationOverTime(PromOperationId.AvgOverTime),
createAggregationOverTime(PromOperationId.MinOverTime),
createAggregationOverTime(PromOperationId.MaxOverTime),
createAggregationOverTime(PromOperationId.CountOverTime),
createAggregationOverTime(PromOperationId.LastOverTime),
createAggregationOverTime(PromOperationId.PresentOverTime),
createAggregationOverTime(PromOperationId.AbsentOverTime),
createAggregationOverTime(PromOperationId.StddevOverTime),
];
}
function createAggregationOverTime(name: string): QueryBuilderOperationDef {
return {
id: name,
name: getPromOperationDisplayName(name),
params: [getRangeVectorParamDef()],
defaultParams: ['$__interval'],
alternativesKey: 'overtime function',
category: PromVisualQueryOperationCategory.RangeFunctions,
renderer: operationWithRangeVectorRenderer,
addOperationHandler: addOperationWithRangeVector,
};
}
function operationWithRangeVectorRenderer(
model: QueryBuilderOperation,
def: QueryBuilderOperationDef,
innerExpr: string
) {
let rangeVector = (model.params ?? [])[0] ?? '$__interval';
return `${def.id}(${innerExpr}[${rangeVector}])`;
}