Files
grafana-zabbix/src/datasource-zabbix/migrations.ts
2019-04-19 13:14:41 +03:00

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;
}