2023-04-10 15:02:45 +03:00
|
|
|
// ** Helpers
|
2023-04-19 07:25:18 +03:00
|
|
|
import { createNewBuilderItemName } from 'lib/newQueryBuilder/createNewBuilderItemName';
|
2023-04-10 15:02:45 +03:00
|
|
|
import { LocalDataType } from 'types/api/queryBuilder/queryAutocompleteResponse';
|
2023-04-19 07:25:18 +03:00
|
|
|
import {
|
|
|
|
|
Having,
|
|
|
|
|
IBuilderFormula,
|
|
|
|
|
IBuilderQueryForm,
|
|
|
|
|
} from 'types/api/queryBuilder/queryBuilderData';
|
2023-04-10 15:02:45 +03:00
|
|
|
import {
|
|
|
|
|
BoolOperators,
|
|
|
|
|
DataSource,
|
|
|
|
|
LogsAggregatorOperator,
|
|
|
|
|
MetricAggregateOperator,
|
|
|
|
|
NumberOperators,
|
|
|
|
|
StringOperators,
|
|
|
|
|
TracesAggregatorOperator,
|
|
|
|
|
} from 'types/common/queryBuilder';
|
|
|
|
|
|
2023-04-19 07:25:18 +03:00
|
|
|
export const MAX_FORMULAS = 20;
|
|
|
|
|
export const MAX_QUERIES = 26;
|
|
|
|
|
|
|
|
|
|
export const formulasNames: string[] = Array.from(
|
|
|
|
|
Array(MAX_FORMULAS),
|
|
|
|
|
(_, i) => `F${i + 1}`,
|
|
|
|
|
);
|
|
|
|
|
const alpha: number[] = Array.from(Array(MAX_QUERIES), (_, i) => i + 65);
|
|
|
|
|
export const alphabet: string[] = alpha.map((str) => String.fromCharCode(str));
|
|
|
|
|
|
2023-04-10 15:02:45 +03:00
|
|
|
export enum QueryBuilderKeys {
|
|
|
|
|
GET_AGGREGATE_ATTRIBUTE = 'GET_AGGREGATE_ATTRIBUTE',
|
|
|
|
|
GET_AGGREGATE_KEYS = 'GET_AGGREGATE_KEYS',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const mapOfOperators: Record<DataSource, string[]> = {
|
|
|
|
|
metrics: Object.values(MetricAggregateOperator),
|
|
|
|
|
logs: Object.values(LogsAggregatorOperator),
|
|
|
|
|
traces: Object.values(TracesAggregatorOperator),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const mapOfFilters: Record<DataSource, string[]> = {
|
|
|
|
|
// eslint-disable-next-line sonarjs/no-duplicate-string
|
2023-04-19 07:25:18 +03:00
|
|
|
metrics: ['Aggregation interval', 'Having'],
|
|
|
|
|
logs: ['Order by', 'Limit', 'Having', 'Aggregation interval'],
|
|
|
|
|
traces: ['Order by', 'Limit', 'Having', 'Aggregation interval'],
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const initialHavingValues: Having = {
|
|
|
|
|
columnName: '',
|
|
|
|
|
op: '',
|
|
|
|
|
value: [],
|
2023-04-10 15:02:45 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const initialAggregateAttribute: IBuilderQueryForm['aggregateAttribute'] = {
|
|
|
|
|
dataType: null,
|
|
|
|
|
key: '',
|
|
|
|
|
isColumn: null,
|
|
|
|
|
type: null,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const initialQueryBuilderFormValues: IBuilderQueryForm = {
|
|
|
|
|
dataSource: DataSource.METRICS,
|
2023-04-19 07:25:18 +03:00
|
|
|
queryName: createNewBuilderItemName({ existNames: [], sourceNames: alphabet }),
|
2023-04-10 15:02:45 +03:00
|
|
|
aggregateOperator: Object.values(MetricAggregateOperator)[0],
|
|
|
|
|
aggregateAttribute: initialAggregateAttribute,
|
2023-04-18 17:17:06 +05:30
|
|
|
tagFilters: { items: [], op: 'AND' },
|
2023-04-10 15:02:45 +03:00
|
|
|
expression: '',
|
|
|
|
|
disabled: false,
|
|
|
|
|
having: [],
|
|
|
|
|
stepInterval: 30,
|
|
|
|
|
limit: 10,
|
|
|
|
|
orderBy: [],
|
|
|
|
|
groupBy: [],
|
|
|
|
|
legend: '',
|
|
|
|
|
reduceTo: '',
|
|
|
|
|
};
|
|
|
|
|
|
2023-04-19 07:25:18 +03:00
|
|
|
export const initialFormulaBuilderFormValues: IBuilderFormula = {
|
|
|
|
|
label: createNewBuilderItemName({
|
|
|
|
|
existNames: [],
|
|
|
|
|
sourceNames: formulasNames,
|
|
|
|
|
}),
|
|
|
|
|
expression: '',
|
|
|
|
|
disabled: false,
|
|
|
|
|
legend: '',
|
|
|
|
|
};
|
|
|
|
|
|
2023-04-10 15:02:45 +03:00
|
|
|
export const operatorsByTypes: Record<LocalDataType, string[]> = {
|
|
|
|
|
string: Object.values(StringOperators),
|
|
|
|
|
number: Object.values(NumberOperators),
|
|
|
|
|
bool: Object.values(BoolOperators),
|
|
|
|
|
};
|
2023-04-15 16:08:17 +05:30
|
|
|
|
|
|
|
|
export type IQueryBuilderState = 'search';
|
|
|
|
|
|
|
|
|
|
export const QUERY_BUILDER_SEARCH_VALUES = {
|
|
|
|
|
MULTIPLY: 'MULTIPLY_VALUE',
|
|
|
|
|
SINGLE: 'SINGLE_VALUE',
|
|
|
|
|
NON: 'NON_VALUE',
|
|
|
|
|
NOT_VALID: 'NOT_VALID',
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const OPERATORS = {
|
|
|
|
|
IN: 'IN',
|
|
|
|
|
NIN: 'NOT_IN',
|
|
|
|
|
LIKE: 'LIKE',
|
|
|
|
|
NLIKE: 'NOT_LIKE',
|
|
|
|
|
EQUALS: '=',
|
|
|
|
|
NOT_EQUALS: '!=',
|
|
|
|
|
EXISTS: 'EXISTS',
|
|
|
|
|
NOT_EXISTS: 'NOT_EXISTS',
|
|
|
|
|
CONTAINS: 'CONTAINS',
|
|
|
|
|
NOT_CONTAINS: 'NOT_CONTAINS',
|
|
|
|
|
GTE: '>=',
|
|
|
|
|
GT: '>',
|
|
|
|
|
LTE: '<=',
|
|
|
|
|
LT: '<',
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const QUERY_BUILDER_OPERATORS_BY_TYPES = {
|
|
|
|
|
string: [
|
|
|
|
|
OPERATORS.EQUALS,
|
|
|
|
|
OPERATORS.NOT_EQUALS,
|
|
|
|
|
OPERATORS.IN,
|
|
|
|
|
OPERATORS.NIN,
|
|
|
|
|
OPERATORS.LIKE,
|
|
|
|
|
OPERATORS.NLIKE,
|
|
|
|
|
OPERATORS.CONTAINS,
|
|
|
|
|
OPERATORS.NOT_CONTAINS,
|
|
|
|
|
OPERATORS.EXISTS,
|
|
|
|
|
OPERATORS.NOT_EXISTS,
|
|
|
|
|
],
|
|
|
|
|
number: [
|
|
|
|
|
OPERATORS.EQUALS,
|
|
|
|
|
OPERATORS.NOT_EQUALS,
|
|
|
|
|
OPERATORS.IN,
|
|
|
|
|
OPERATORS.NIN,
|
|
|
|
|
OPERATORS.EXISTS,
|
|
|
|
|
OPERATORS.NOT_EXISTS,
|
|
|
|
|
OPERATORS.GTE,
|
|
|
|
|
OPERATORS.GT,
|
|
|
|
|
OPERATORS.LTE,
|
|
|
|
|
OPERATORS.LT,
|
|
|
|
|
],
|
|
|
|
|
boolean: [
|
|
|
|
|
OPERATORS.EQUALS,
|
|
|
|
|
OPERATORS.NOT_EQUALS,
|
|
|
|
|
OPERATORS.EXISTS,
|
|
|
|
|
OPERATORS.NOT_EXISTS,
|
|
|
|
|
],
|
|
|
|
|
universal: [
|
|
|
|
|
OPERATORS.EQUALS,
|
|
|
|
|
OPERATORS.NOT_EQUALS,
|
|
|
|
|
OPERATORS.IN,
|
|
|
|
|
OPERATORS.NIN,
|
|
|
|
|
OPERATORS.EXISTS,
|
|
|
|
|
OPERATORS.NOT_EXISTS,
|
|
|
|
|
OPERATORS.LIKE,
|
|
|
|
|
OPERATORS.NLIKE,
|
|
|
|
|
OPERATORS.GTE,
|
|
|
|
|
OPERATORS.GT,
|
|
|
|
|
OPERATORS.LTE,
|
|
|
|
|
OPERATORS.LT,
|
|
|
|
|
OPERATORS.CONTAINS,
|
|
|
|
|
OPERATORS.NOT_CONTAINS,
|
|
|
|
|
],
|
|
|
|
|
};
|
2023-04-19 07:25:18 +03:00
|
|
|
|
|
|
|
|
export const HAVING_OPERATORS: string[] = [
|
|
|
|
|
OPERATORS.EQUALS,
|
|
|
|
|
OPERATORS.NOT_EQUALS,
|
|
|
|
|
OPERATORS.IN,
|
|
|
|
|
OPERATORS.NIN,
|
|
|
|
|
OPERATORS.GTE,
|
|
|
|
|
OPERATORS.GT,
|
|
|
|
|
OPERATORS.LTE,
|
|
|
|
|
OPERATORS.LT,
|
|
|
|
|
];
|