182 lines
4.7 KiB
TypeScript
182 lines
4.7 KiB
TypeScript
import _ from 'lodash';
|
|
import { getNextRefIdChar } from './utils';
|
|
import { ShowProblemTypes } from '../datasource-zabbix/types';
|
|
|
|
// Actual schema version
|
|
export const CURRENT_SCHEMA_VERSION = 8;
|
|
|
|
export const getDefaultTarget = (targets?) => {
|
|
return {
|
|
group: {filter: ""},
|
|
host: {filter: ""},
|
|
application: {filter: ""},
|
|
trigger: {filter: ""},
|
|
tags: {filter: ""},
|
|
proxy: {filter: ""},
|
|
refId: getNextRefIdChar(targets),
|
|
};
|
|
};
|
|
|
|
export function getDefaultTargetOptions() {
|
|
return {
|
|
hostsInMaintenance: true,
|
|
};
|
|
}
|
|
|
|
export function migratePanelSchema(panel) {
|
|
if (isDefaultPanel(panel)) {
|
|
return panel;
|
|
}
|
|
|
|
if (isEmptyPanel(panel)) {
|
|
delete panel.targets;
|
|
return panel;
|
|
}
|
|
|
|
const schemaVersion = getSchemaVersion(panel);
|
|
// panel.schemaVersion = CURRENT_SCHEMA_VERSION;
|
|
|
|
if (schemaVersion < 2) {
|
|
panel.datasources = [panel.datasource];
|
|
panel.targets = {};
|
|
panel.targets[panel.datasources[0]] = panel.triggers;
|
|
|
|
// delete old props
|
|
delete panel.triggers;
|
|
delete panel.datasource;
|
|
}
|
|
|
|
if (schemaVersion < 3) {
|
|
// delete old props
|
|
delete panel.lastChangeField;
|
|
delete panel.infoField;
|
|
delete panel.scroll;
|
|
delete panel.hideHostsInMaintenance;
|
|
}
|
|
|
|
if (schemaVersion < 5) {
|
|
if (panel.targets && !_.isEmpty(panel.targets)) {
|
|
_.each(panel.targets, (target) => {
|
|
_.defaultsDeep(target, getDefaultTarget());
|
|
});
|
|
}
|
|
}
|
|
|
|
if (schemaVersion < 6) {
|
|
if (panel.showEvents && panel.showEvents.value === '1') {
|
|
panel.showEvents.value = 1;
|
|
}
|
|
}
|
|
|
|
if (schemaVersion < 7) {
|
|
const updatedTargets = [];
|
|
for (const targetKey in panel.targets) {
|
|
const target = panel.targets[targetKey];
|
|
if (!isEmptyTarget(target) && !isInvalidTarget(target, targetKey)) {
|
|
updatedTargets.push({
|
|
...target,
|
|
datasource: targetKey,
|
|
});
|
|
}
|
|
}
|
|
for (const target of updatedTargets) {
|
|
if (!target.refId) {
|
|
target.refId = getNextRefIdChar(updatedTargets);
|
|
}
|
|
}
|
|
panel.targets = updatedTargets;
|
|
delete panel.datasources;
|
|
}
|
|
|
|
if (schemaVersion < 8) {
|
|
if (panel.targets.length === 1) {
|
|
if (panel.targets[0].datasource) {
|
|
panel.datasource = panel.targets[0].datasource;
|
|
delete panel.targets[0].datasource;
|
|
}
|
|
} else if (panel.targets.length > 1) {
|
|
// Mixed data sources
|
|
panel.datasource = '-- Mixed --';
|
|
}
|
|
for (const target of panel.targets) {
|
|
// set queryType to PROBLEMS
|
|
target.queryType = 5;
|
|
target.showProblems = migrateShowEvents(panel);
|
|
target.options = migrateOptions(panel);
|
|
|
|
_.defaults(target.options, getDefaultTargetOptions());
|
|
_.defaults(target, { tags: { filter: "" } });
|
|
}
|
|
|
|
panel.sortProblems = panel.sortTriggersBy?.value === 'priority' ? 'priority' : 'lastchange';
|
|
|
|
delete panel.showEvents;
|
|
delete panel.showTriggers;
|
|
delete panel.hostsInMaintenance;
|
|
delete panel.sortTriggersBy;
|
|
}
|
|
|
|
return panel;
|
|
}
|
|
|
|
function migrateOptions(panel) {
|
|
let acknowledged = 2;
|
|
if (panel.showTriggers === 'acknowledged') {
|
|
acknowledged = 1;
|
|
} else if (panel.showTriggers === 'unacknowledged') {
|
|
acknowledged = 0;
|
|
}
|
|
|
|
// Default limit in Zabbix
|
|
let limit = 1001;
|
|
if (panel.limit && panel.limit !== 100) {
|
|
limit = panel.limit;
|
|
}
|
|
|
|
return {
|
|
hostsInMaintenance: panel.hostsInMaintenance,
|
|
sortProblems: panel.sortTriggersBy?.value === 'priority' ? 'priority' : 'default',
|
|
minSeverity: 0,
|
|
acknowledged: acknowledged,
|
|
limit: limit,
|
|
};
|
|
}
|
|
|
|
function migrateShowEvents(panel) {
|
|
if (panel.showEvents?.value === 1) {
|
|
return ShowProblemTypes.Problems;
|
|
} else if (panel.showEvents?.value === 0 || panel.showEvents?.value?.length > 1) {
|
|
return ShowProblemTypes.History;
|
|
} else {
|
|
return ShowProblemTypes.Problems;
|
|
}
|
|
}
|
|
|
|
function getSchemaVersion(panel) {
|
|
return panel.schemaVersion || 1;
|
|
}
|
|
|
|
function isEmptyPanel(panel) {
|
|
return !panel.datasource && !panel.datasources && !panel.triggers && isEmptyTargets(panel.targets);
|
|
}
|
|
|
|
function isEmptyTargets(targets) {
|
|
return !targets || (_.isArray(targets) && (targets.length === 0 || targets.length === 1 && _.isEmpty(targets[0])));
|
|
}
|
|
|
|
function isDefaultPanel(panel) {
|
|
return panel.targets && panel.targets.length === 1 && isDefaultTarget(panel.targets[0]);
|
|
}
|
|
|
|
function isDefaultTarget(target) {
|
|
return !target.group?.filter && !target.host?.filter && !target.application?.filter && !target.trigger?.filter && !target.queryType;
|
|
}
|
|
|
|
function isEmptyTarget(target) {
|
|
return !target || !(target.group && target.host && target.application && target.trigger);
|
|
}
|
|
|
|
function isInvalidTarget(target, targetKey) {
|
|
return target && target.refId === 'A' && targetKey === '0';
|
|
}
|