mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-01 02:52:00 +08:00
147 lines
2.9 KiB
TypeScript
147 lines
2.9 KiB
TypeScript
import { Time } from 'container/TopNav/DateTimeSelection/config';
|
|
import {
|
|
IBuilderQueries,
|
|
IChQueries,
|
|
IChQuery,
|
|
IFormulaQueries,
|
|
IFormulaQuery,
|
|
IMetricQueries,
|
|
IMetricQuery,
|
|
IPromQueries,
|
|
IPromQuery,
|
|
} from 'types/api/alerts/compositeQuery';
|
|
import {
|
|
IMetricsBuilderQuery,
|
|
Query as IStagedQuery,
|
|
} from 'types/api/dashboard/getAll';
|
|
import { EQueryType } from 'types/common/dashboard';
|
|
|
|
export const toFormulaQueries = (b: IBuilderQueries): IFormulaQueries => {
|
|
const f: IFormulaQueries = {};
|
|
if (!b) return f;
|
|
Object.keys(b).forEach((key) => {
|
|
if (key === 'F1') {
|
|
f[key] = b[key] as IFormulaQuery;
|
|
}
|
|
});
|
|
|
|
return f;
|
|
};
|
|
|
|
export const toMetricQueries = (b: IBuilderQueries): IMetricQueries => {
|
|
const m: IMetricQueries = {};
|
|
if (!b) return m;
|
|
Object.keys(b).forEach((key) => {
|
|
if (key !== 'F1') {
|
|
m[key] = b[key] as IMetricQuery;
|
|
}
|
|
});
|
|
|
|
return m;
|
|
};
|
|
|
|
export const toIMetricsBuilderQuery = (
|
|
q: IMetricQuery,
|
|
): IMetricsBuilderQuery => {
|
|
return {
|
|
name: q.name,
|
|
metricName: q.metricName,
|
|
tagFilters: q.tagFilters,
|
|
groupBy: q.groupBy,
|
|
aggregateOperator: q.aggregateOperator,
|
|
disabled: q.disabled,
|
|
legend: q.legend,
|
|
};
|
|
};
|
|
|
|
export const prepareBuilderQueries = (
|
|
m: IMetricQueries,
|
|
f: IFormulaQueries,
|
|
): IBuilderQueries => {
|
|
if (!m) return {};
|
|
const b: IBuilderQueries = {
|
|
...m,
|
|
};
|
|
|
|
Object.keys(f).forEach((key) => {
|
|
b[key] = {
|
|
...f[key],
|
|
aggregateOperator: undefined,
|
|
metricName: '',
|
|
};
|
|
});
|
|
return b;
|
|
};
|
|
|
|
export const prepareStagedQuery = (
|
|
t: EQueryType,
|
|
m: IMetricQueries,
|
|
f: IFormulaQueries,
|
|
p: IPromQueries,
|
|
c: IChQueries,
|
|
): IStagedQuery => {
|
|
const qbList: IMetricQuery[] = [];
|
|
const formulaList: IFormulaQuery[] = [];
|
|
const promList: IPromQuery[] = [];
|
|
const chQueryList: IChQuery[] = [];
|
|
|
|
// convert map[string]IMetricQuery to IMetricQuery[]
|
|
if (m) {
|
|
Object.keys(m).forEach((key) => {
|
|
qbList.push(m[key]);
|
|
});
|
|
}
|
|
|
|
// convert map[string]IFormulaQuery to IFormulaQuery[]
|
|
if (f) {
|
|
Object.keys(f).forEach((key) => {
|
|
formulaList.push(f[key]);
|
|
});
|
|
}
|
|
|
|
// convert map[string]IPromQuery to IPromQuery[]
|
|
if (p) {
|
|
Object.keys(p).forEach((key) => {
|
|
promList.push({ ...p[key], name: key });
|
|
});
|
|
}
|
|
// convert map[string]IChQuery to IChQuery[]
|
|
if (c) {
|
|
Object.keys(c).forEach((key) => {
|
|
chQueryList.push({ ...c[key], name: key, rawQuery: c[key].query });
|
|
});
|
|
}
|
|
|
|
return {
|
|
queryType: t,
|
|
promQL: promList,
|
|
metricsBuilder: {
|
|
formulas: formulaList,
|
|
queryBuilder: qbList,
|
|
},
|
|
clickHouse: chQueryList,
|
|
};
|
|
};
|
|
|
|
// toChartInterval converts eval window to chart selection time interval
|
|
export const toChartInterval = (evalWindow: string | undefined): Time => {
|
|
switch (evalWindow) {
|
|
case '5m0s':
|
|
return '5min';
|
|
case '10m0s':
|
|
return '10min';
|
|
case '15m0s':
|
|
return '15min';
|
|
case '30m0s':
|
|
return '30min';
|
|
case '60m0s':
|
|
return '30min';
|
|
case '4h0m0s':
|
|
return '4hr';
|
|
case '24h0m0s':
|
|
return '1day';
|
|
default:
|
|
return '5min';
|
|
}
|
|
};
|