1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { cloneDeep } from 'lodash';
- import InfluxQueryModel from './influx_query_model';
- import { InfluxQuery } from './types';
- // FIXME: these functions are a beginning of a refactoring of influx_query_model.ts
- // into a simpler approach with full typescript types.
- // later we should be able to migrate the unit-tests
- // that relate to these functions here, and then perhaps even move the implementation
- // to this place
- export function buildRawQuery(query: InfluxQuery): string {
- const queryCopy = cloneDeep(query); // the query-model mutates the query
- const model = new InfluxQueryModel(queryCopy);
- return model.render(false);
- }
- export function normalizeQuery(query: InfluxQuery): InfluxQuery {
- // we return the original query if there is no need to update it
- if (
- query.policy !== undefined &&
- query.resultFormat !== undefined &&
- query.orderByTime !== undefined &&
- query.tags !== undefined &&
- query.groupBy !== undefined &&
- query.select !== undefined
- ) {
- return query;
- }
- // FIXME: we should move the whole normalizeQuery logic here,
- // and then have influxQueryModel call this function,
- // to concentrate the whole logic here
- const queryCopy = cloneDeep(query); // the query-model mutates the query
- return new InfluxQueryModel(queryCopy).target;
- }
- export function addNewSelectPart(query: InfluxQuery, type: string, index: number): InfluxQuery {
- const queryCopy = cloneDeep(query); // the query-model mutates the query
- const model = new InfluxQueryModel(queryCopy);
- model.addSelectPart(model.selectModels[index], type);
- return model.target;
- }
- export function removeSelectPart(query: InfluxQuery, partIndex: number, index: number): InfluxQuery {
- const queryCopy = cloneDeep(query); // the query-model mutates the query
- const model = new InfluxQueryModel(queryCopy);
- const selectModel = model.selectModels[index];
- model.removeSelectPart(selectModel, selectModel[partIndex]);
- return model.target;
- }
- export function changeSelectPart(
- query: InfluxQuery,
- listIndex: number,
- partIndex: number,
- newParams: string[]
- ): InfluxQuery {
- // we need to make shallow copy of `query.select` down to `query.select[listIndex][partIndex]`
- const newSel = [...(query.select ?? [])];
- newSel[listIndex] = [...newSel[listIndex]];
- newSel[listIndex][partIndex] = {
- ...newSel[listIndex][partIndex],
- params: newParams,
- };
- return { ...query, select: newSel };
- }
- export function addNewGroupByPart(query: InfluxQuery, type: string): InfluxQuery {
- const queryCopy = cloneDeep(query); // the query-model mutates the query
- const model = new InfluxQueryModel(queryCopy);
- model.addGroupBy(type);
- return model.target;
- }
- export function removeGroupByPart(query: InfluxQuery, partIndex: number): InfluxQuery {
- const queryCopy = cloneDeep(query); // the query-model mutates the query
- const model = new InfluxQueryModel(queryCopy);
- model.removeGroupByPart(model.groupByParts[partIndex], partIndex);
- return model.target;
- }
- export function changeGroupByPart(query: InfluxQuery, partIndex: number, newParams: string[]): InfluxQuery {
- // we need to make shallow copy of `query.groupBy` down to `query.groupBy[partIndex]`
- const newGroupBy = [...(query.groupBy ?? [])];
- newGroupBy[partIndex] = {
- ...newGroupBy[partIndex],
- params: newParams,
- };
- return { ...query, groupBy: newGroupBy };
- }
|