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

@@ -3,22 +3,31 @@
System.register([], function (_export, _context) {
"use strict";
var CURRENT_SCHEMA_VERSION;
function migratePanelSchema(panel) {
if (isEmptyPanel(panel)) {
return panel;
}
var 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;
@@ -35,7 +44,9 @@ System.register([], function (_export, _context) {
}
return {
setters: [],
execute: function () {}
execute: function () {
CURRENT_SCHEMA_VERSION = 3;
}
};
});
//# sourceMappingURL=migrations.js.map

View File

@@ -1 +1 @@
{"version":3,"sources":["../../src/panel-triggers/migrations.js"],"names":["migratePanelSchema","panel","isEmptyPanel","schemaVersion","getSchemaVersion","datasources","datasource","targets","triggers"],"mappings":";;;;;AAAO,WAASA,kBAAT,CAA4BC,KAA5B,EAAmC;AACxC,QAAIC,aAAaD,KAAb,CAAJ,EAAyB;AACvB,aAAOA,KAAP;AACD;;AAED,QAAME,gBAAgBC,iBAAiBH,KAAjB,CAAtB;AACA,YAAQE,aAAR;AACE,WAAK,CAAL;AACEF,cAAMI,WAAN,GAAoB,CAACJ,MAAMK,UAAP,CAApB;AACAL,cAAMM,OAAN,GAAgB,EAAhB;AACAN,cAAMM,OAAN,CAAcN,MAAMI,WAAN,CAAkB,CAAlB,CAAd,IAAsCJ,MAAMO,QAA5C;;AAEA;AACA,eAAOP,MAAMO,QAAb;AACA,eAAOP,MAAMK,UAAb;AACA;AATJ;;AAYA,WAAOL,KAAP;AACD;;gCAnBeD,kB;;AAqBhB,WAASI,gBAAT,CAA0BH,KAA1B,EAAiC;AAC/B,WAAOA,MAAME,aAAN,IAAuB,CAA9B;AACD;;AAED,WAASD,YAAT,CAAsBD,KAAtB,EAA6B;AAC3B,WAAO,CAACA,MAAMK,UAAP,IAAqB,CAACL,MAAMI,WAA5B,IAA2C,CAACJ,MAAMO,QAAlD,IAA8D,CAACP,MAAMM,OAA5E;AACD","file":"migrations.js","sourcesContent":["export function migratePanelSchema(panel) {\n if (isEmptyPanel(panel)) {\n return panel;\n }\n\n const schemaVersion = getSchemaVersion(panel);\n switch (schemaVersion) {\n case 1:\n panel.datasources = [panel.datasource];\n panel.targets = {};\n panel.targets[panel.datasources[0]] = panel.triggers;\n\n // delete old props\n delete panel.triggers;\n delete panel.datasource;\n break;\n }\n\n return panel;\n}\n\nfunction getSchemaVersion(panel) {\n return panel.schemaVersion || 1;\n}\n\nfunction isEmptyPanel(panel) {\n return !panel.datasource && !panel.datasources && !panel.triggers && !panel.targets;\n}\n"]}
{"version":3,"sources":["../../src/panel-triggers/migrations.js"],"names":["migratePanelSchema","panel","isEmptyPanel","schemaVersion","getSchemaVersion","CURRENT_SCHEMA_VERSION","datasources","datasource","targets","triggers","lastChangeField","ageField","infoField","scroll"],"mappings":";;;;;;AAGO,WAASA,kBAAT,CAA4BC,KAA5B,EAAmC;AACxC,QAAIC,aAAaD,KAAb,CAAJ,EAAyB;AACvB,aAAOA,KAAP;AACD;;AAED,QAAME,gBAAgBC,iBAAiBH,KAAjB,CAAtB;AACAA,UAAME,aAAN,GAAsBE,sBAAtB;;AAEA,QAAIF,gBAAgB,CAApB,EAAuB;AACrBF,YAAMK,WAAN,GAAoB,CAACL,MAAMM,UAAP,CAApB;AACAN,YAAMO,OAAN,GAAgB,EAAhB;AACAP,YAAMO,OAAN,CAAcP,MAAMK,WAAN,CAAkB,CAAlB,CAAd,IAAsCL,MAAMQ,QAA5C;;AAEA;AACA,aAAOR,MAAMQ,QAAb;AACA,aAAOR,MAAMM,UAAb;AACD;;AAED,QAAIJ,gBAAgB,CAApB,EAAuB;AACrB;AACA,aAAOF,MAAMS,eAAb;AACA,aAAOT,MAAMU,QAAb;AACA,aAAOV,MAAMW,SAAb;AACA,aAAOX,MAAMY,MAAb;AACD;;AAED,WAAOZ,KAAP;AACD;;gCA3BeD,kB;;AA6BhB,WAASI,gBAAT,CAA0BH,KAA1B,EAAiC;AAC/B,WAAOA,MAAME,aAAN,IAAuB,CAA9B;AACD;;AAED,WAASD,YAAT,CAAsBD,KAAtB,EAA6B;AAC3B,WAAO,CAACA,MAAMM,UAAP,IAAqB,CAACN,MAAMK,WAA5B,IAA2C,CAACL,MAAMQ,QAAlD,IAA8D,CAACR,MAAMO,OAA5E;AACD;;;;AArCKH,4B,GAAyB,C","file":"migrations.js","sourcesContent":["// Actual schema version\nconst CURRENT_SCHEMA_VERSION = 3;\n\nexport function migratePanelSchema(panel) {\n if (isEmptyPanel(panel)) {\n return panel;\n }\n\n const schemaVersion = getSchemaVersion(panel);\n panel.schemaVersion = CURRENT_SCHEMA_VERSION;\n\n if (schemaVersion < 2) {\n panel.datasources = [panel.datasource];\n panel.targets = {};\n panel.targets[panel.datasources[0]] = panel.triggers;\n\n // delete old props\n delete panel.triggers;\n delete panel.datasource;\n }\n\n if (schemaVersion < 3) {\n // delete old props\n delete panel.lastChangeField;\n delete panel.ageField;\n delete panel.infoField;\n delete panel.scroll;\n }\n\n return panel;\n}\n\nfunction getSchemaVersion(panel) {\n return panel.schemaVersion || 1;\n}\n\nfunction isEmptyPanel(panel) {\n return !panel.datasource && !panel.datasources && !panel.triggers && !panel.targets;\n}\n"]}

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

@@ -162,7 +162,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
_inherits(TriggerPanelCtrl, _PanelCtrl);
/** @ngInject */
function TriggerPanelCtrl($scope, $injector, $element, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {
function TriggerPanelCtrl($scope, $injector, $timeout, datasourceSrv, templateSrv, contextSrv, dashboardSrv) {
_classCallCheck(this, TriggerPanelCtrl);
var _this = _possibleConstructorReturn(this, (TriggerPanelCtrl.__proto__ || Object.getPrototypeOf(TriggerPanelCtrl)).call(this, $scope, $injector));

File diff suppressed because one or more lines are too long

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;