triggers panel: update migrations

This commit is contained in:
Alexander Zobnin
2017-12-11 11:00:50 +03:00
parent 8aeb1f2259
commit 5e7a3d7a5d
10 changed files with 79 additions and 61 deletions

View File

@@ -1,19 +1,30 @@
// Actual schema version
const CURRENT_SCHEMA_VERSION = 3;
export function migratePanelSchema(panel) {
if (isEmptyPanel(panel)) {
return panel;
}
const schemaVersion = getSchemaVersion(panel);
switch (schemaVersion) {
case 1:
panel.datasources = [panel.datasource];
panel.targets = {};
panel.targets[panel.datasources[0]] = panel.triggers;
panel.schemaVersion = CURRENT_SCHEMA_VERSION;
// delete old props
delete panel.triggers;
delete panel.datasource;
break;
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.ageField;
delete panel.infoField;
delete panel.scroll;
}
return panel;

View File

@@ -10,6 +10,8 @@ describe('Triggers Panel schema migration', () => {
get: () => Promise.resolve({})
};
let timeoutMock = () => {};
beforeEach(() => {
ctx = {
scope: {
@@ -39,29 +41,25 @@ describe('Triggers Panel schema migration', () => {
});
it('should update old panel schema', () => {
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, timeoutMock, datasourceSrvMock, {}, {}, {});
let expected = {
schemaVersion: 2,
schemaVersion: 3,
datasources: ['zabbix'],
targets: {
'zabbix': DEFAULT_TARGET
},
hostField: true,
hostTechNameField: false,
statusField: false,
severityField: false,
lastChangeField: true,
ageField: true,
infoField: true,
hideHostsInMaintenance: false,
showTriggers: 'all triggers',
sortTriggersBy: { text: 'last change', value: 'lastchange' },
showEvents: { text: 'Problems', value: '1' },
limit: 10,
fontSize: '100%',
fontColor: null,
pageSize: 10,
scroll: true,
customLastChangeFormat: false,
lastChangeFormat: "",
triggerSeverity: DEFAULT_SEVERITY,
@@ -77,26 +75,22 @@ describe('Triggers Panel schema migration', () => {
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
let expected = {
schemaVersion: 2,
schemaVersion: 3,
datasources: ['zabbix_default'],
targets: {
'zabbix_default': DEFAULT_TARGET
},
hostField: true,
statusField: false,
severityField: false,
lastChangeField: true,
ageField: true,
infoField: true,
hostTechNameField: false,
statusField: true,
severityField: true,
hideHostsInMaintenance: false,
showTriggers: 'all triggers',
sortTriggersBy: { text: 'last change', value: 'lastchange' },
showEvents: { text: 'Problems', value: '1' },
limit: 10,
limit: 100,
fontSize: '100%',
fontColor: null,
pageSize: 10,
scroll: true,
customLastChangeFormat: false,
lastChangeFormat: "",
triggerSeverity: DEFAULT_SEVERITY,

View File

@@ -1,10 +1,13 @@
import _ from 'lodash';
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
import {PANEL_DEFAULTS, DEFAULT_TARGET} from '../triggers_panel_ctrl';
// import { create } from 'domain';
describe('TriggerPanelCtrl', () => {
let ctx = {};
let datasourceSrvMock, zabbixDSMock;
let timeoutMock = () => {};
let createPanelCtrl;
beforeEach(() => {
ctx = {scope: {panel: PANEL_DEFAULTS}};
@@ -26,12 +29,13 @@ describe('TriggerPanelCtrl', () => {
},
get: () => Promise.resolve(zabbixDSMock)
};
createPanelCtrl = () => new TriggerPanelCtrl(ctx.scope, {}, timeoutMock, datasourceSrvMock, {}, {}, {});
});
describe('When adding new panel', () => {
it('should suggest all zabbix data sources', () => {
ctx.scope.panel = {};
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
let panelCtrl = createPanelCtrl();
expect(panelCtrl.available_datasources).toEqual([
'zabbix_default', 'zabbix'
]);
@@ -39,7 +43,7 @@ describe('TriggerPanelCtrl', () => {
it('should load first zabbix data source as default', () => {
ctx.scope.panel = {};
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
let panelCtrl = createPanelCtrl();
expect(panelCtrl.panel.datasources).toEqual([
'zabbix_default'
]);
@@ -63,7 +67,7 @@ describe('TriggerPanelCtrl', () => {
});
it('should sort triggers', (done) => {
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
let panelCtrl = createPanelCtrl();
panelCtrl.onRefresh().then(() => {
let trigger_ids = _.map(panelCtrl.triggerList, 'triggerid');
expect(trigger_ids).toEqual([

View File

@@ -61,7 +61,7 @@ const triggerStatusMap = {
export class TriggerPanelCtrl extends PanelCtrl {
/** @ngInject */
constructor($scope, $injector, $element, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {
constructor($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {
super($scope, $injector);
this.datasourceSrv = datasourceSrv;
this.templateSrv = templateSrv;