mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 08:35:43 -06:00
* Add and configure eslint-plugin-import * Fix the lint:ts npm command * Autofix + prettier all the files * Manually fix remaining files * Move jquery code in jest-setup to external file to safely reorder imports * Resolve issue caused by circular dependencies within Prometheus * Update .betterer.results * Fix missing // @ts-ignore * ignore iconBundle.ts * Fix missing // @ts-ignore
117 lines
2.8 KiB
TypeScript
117 lines
2.8 KiB
TypeScript
import { defaultAddOperationHandler } from '../../prometheus/querybuilder/shared/operationUtils';
|
|
import {
|
|
QueryBuilderOperation,
|
|
QueryBuilderOperationDef,
|
|
QueryBuilderOperationParamDef,
|
|
} from '../../prometheus/querybuilder/shared/types';
|
|
|
|
import { LokiOperationId, LokiVisualQueryOperationCategory } from './types';
|
|
|
|
export const binaryScalarDefs = [
|
|
{
|
|
id: LokiOperationId.Addition,
|
|
name: 'Add scalar',
|
|
sign: '+',
|
|
},
|
|
{
|
|
id: LokiOperationId.Subtraction,
|
|
name: 'Subtract scalar',
|
|
sign: '-',
|
|
},
|
|
{
|
|
id: LokiOperationId.MultiplyBy,
|
|
name: 'Multiply by scalar',
|
|
sign: '*',
|
|
},
|
|
{
|
|
id: LokiOperationId.DivideBy,
|
|
name: 'Divide by scalar',
|
|
sign: '/',
|
|
},
|
|
{
|
|
id: LokiOperationId.Modulo,
|
|
name: 'Modulo by scalar',
|
|
sign: '%',
|
|
},
|
|
{
|
|
id: LokiOperationId.Exponent,
|
|
name: 'Exponent',
|
|
sign: '^',
|
|
},
|
|
{
|
|
id: LokiOperationId.EqualTo,
|
|
name: 'Equal to',
|
|
sign: '==',
|
|
comparison: true,
|
|
},
|
|
{
|
|
id: LokiOperationId.NotEqualTo,
|
|
name: 'Not equal to',
|
|
sign: '!=',
|
|
comparison: true,
|
|
},
|
|
{
|
|
id: LokiOperationId.GreaterThan,
|
|
name: 'Greater than',
|
|
sign: '>',
|
|
comparison: true,
|
|
},
|
|
{
|
|
id: LokiOperationId.LessThan,
|
|
name: 'Less than',
|
|
sign: '<',
|
|
comparison: true,
|
|
},
|
|
{
|
|
id: LokiOperationId.GreaterOrEqual,
|
|
name: 'Greater or equal to',
|
|
sign: '>=',
|
|
comparison: true,
|
|
},
|
|
{
|
|
id: LokiOperationId.LessOrEqual,
|
|
name: 'Less or equal to',
|
|
sign: '<=',
|
|
comparison: true,
|
|
},
|
|
];
|
|
|
|
// Not sure about this one. It could also be a more generic 'Simple math operation' where user specifies
|
|
// both the operator and the operand in a single input
|
|
export const binaryScalarOperations: QueryBuilderOperationDef[] = binaryScalarDefs.map((opDef) => {
|
|
const params: QueryBuilderOperationParamDef[] = [{ name: 'Value', type: 'number' }];
|
|
const defaultParams: any[] = [2];
|
|
if (opDef.comparison) {
|
|
params.unshift({
|
|
name: 'Bool',
|
|
type: 'boolean',
|
|
description: 'If checked comparison will return 0 or 1 for the value rather than filtering.',
|
|
});
|
|
defaultParams.unshift(false);
|
|
}
|
|
|
|
return {
|
|
id: opDef.id,
|
|
name: opDef.name,
|
|
params,
|
|
defaultParams,
|
|
alternativesKey: 'binary scalar operations',
|
|
category: LokiVisualQueryOperationCategory.BinaryOps,
|
|
renderer: getSimpleBinaryRenderer(opDef.sign),
|
|
addOperationHandler: defaultAddOperationHandler,
|
|
};
|
|
});
|
|
|
|
function getSimpleBinaryRenderer(operator: string) {
|
|
return function binaryRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) {
|
|
let param = model.params[0];
|
|
let bool = '';
|
|
if (model.params.length === 2) {
|
|
param = model.params[1];
|
|
bool = model.params[0] ? ' bool' : '';
|
|
}
|
|
|
|
return `${innerExpr} ${operator}${bool} ${param}`;
|
|
};
|
|
}
|