97 lines
2.5 KiB
TypeScript
97 lines
2.5 KiB
TypeScript
import _ from 'lodash';
|
|
|
|
/**
|
|
* Query format migration.
|
|
* This module can detect query format version and make migration.
|
|
*/
|
|
|
|
export function isGrafana2target(target) {
|
|
if (!target.mode || target.mode === 0 || target.mode === 2) {
|
|
if ((target.hostFilter || target.itemFilter || target.downsampleFunction ||
|
|
(target.host && target.host.host)) &&
|
|
(target.item.filter === undefined && target.host.filter === undefined)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function migrateFrom2To3version(target) {
|
|
target.group.filter = target.group.name === "*" ? "/.*/" : target.group.name;
|
|
target.host.filter = target.host.name === "*" ? convertToRegex(target.hostFilter) : target.host.name;
|
|
target.application.filter = target.application.name === "*" ? "" : target.application.name;
|
|
target.item.filter = target.item.name === "All" ? convertToRegex(target.itemFilter) : target.item.name;
|
|
return target;
|
|
}
|
|
|
|
export function migrate(target) {
|
|
target.resultFormat = target.resultFormat || 'time_series';
|
|
target = fixTargetGroup(target);
|
|
if (isGrafana2target(target)) {
|
|
return migrateFrom2To3version(target);
|
|
}
|
|
migratePercentileAgg(target);
|
|
return target;
|
|
}
|
|
|
|
function fixTargetGroup(target) {
|
|
if (target.group && Array.isArray(target.group)) {
|
|
target.group = { 'filter': "" };
|
|
}
|
|
return target;
|
|
}
|
|
|
|
function convertToRegex(str) {
|
|
if (str) {
|
|
return '/' + str + '/';
|
|
} else {
|
|
return '/.*/';
|
|
}
|
|
}
|
|
|
|
function migratePercentileAgg(target) {
|
|
if (target.functions) {
|
|
for (const f of target.functions) {
|
|
if (f.def && f.def.name === 'percentil') {
|
|
f.def.name = 'percentile';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export const DS_CONFIG_SCHEMA = 2;
|
|
export function migrateDSConfig(jsonData) {
|
|
if (!jsonData) {
|
|
jsonData = {};
|
|
}
|
|
|
|
if (!shouldMigrateDSConfig(jsonData)) {
|
|
return jsonData;
|
|
}
|
|
|
|
const oldVersion = jsonData.schema || 1;
|
|
jsonData.schema = DS_CONFIG_SCHEMA;
|
|
|
|
if (oldVersion < 2) {
|
|
const dbConnectionOptions = jsonData.dbConnection || {};
|
|
jsonData.dbConnectionEnable = dbConnectionOptions.enable || false;
|
|
jsonData.dbConnectionDatasourceId = dbConnectionOptions.datasourceId || null;
|
|
delete jsonData.dbConnection;
|
|
}
|
|
|
|
return jsonData;
|
|
}
|
|
|
|
function shouldMigrateDSConfig(jsonData): boolean {
|
|
if (jsonData.dbConnection && !_.isEmpty(jsonData.dbConnection)) {
|
|
return true;
|
|
}
|
|
if (jsonData.schema && jsonData.schema !== DS_CONFIG_SCHEMA) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|