Problems: sorting option

This commit is contained in:
Alexander Zobnin
2020-05-13 18:37:41 +03:00
parent 2588fd5c50
commit 413bf583d6
8 changed files with 36 additions and 21 deletions

View File

@@ -301,8 +301,8 @@
<label class="gf-form-label width-9">Sort by</label> <label class="gf-form-label width-9">Sort by</label>
<div class="gf-form-select-wrapper width-12"> <div class="gf-form-select-wrapper width-12">
<select class="gf-form-input" <select class="gf-form-input"
ng-model="ctrl.target.options.sortTriggersBy" ng-model="ctrl.target.options.sortProblems"
ng-options="f.text for f in ctrl.sortByFields track by f.value" ng-options="f.value as f.text for f in ctrl.sortByFields"
ng-change="ctrl.onQueryOptionChange()"> ng-change="ctrl.onQueryOptionChange()">
</select> </select>
</div> </div>

View File

@@ -25,10 +25,6 @@ function getTargetDefaults() {
options: { options: {
showDisabledItems: false, showDisabledItems: false,
skipEmptyValues: false, skipEmptyValues: false,
// Problems
hostsInMaintenance: false,
hostProxy: false,
sortTriggersBy: { text: 'last change', value: 'lastchange' },
}, },
table: { table: {
'skipEmptyValues': false 'skipEmptyValues': false
@@ -46,7 +42,10 @@ function getProblemsTargetDefaults() {
return { return {
showProblems: ShowProblemTypes.Problems, showProblems: ShowProblemTypes.Problems,
options: { options: {
sortTriggersBy: 'default',
acknowledged: 2, acknowledged: 2,
hostsInMaintenance: false,
hostProxy: false,
}, },
}; };
} }
@@ -101,8 +100,9 @@ export class ZabbixQueryController extends QueryCtrl {
]; ];
this.sortByFields = [ this.sortByFields = [
{ text: 'last change', value: 'lastchange' }, { text: 'Default', value: 'default' },
{ text: 'severity', value: 'priority' } { text: 'Last change', value: 'lastchange' },
{ text: 'Severity', value: 'priority' },
]; ];
this.showEventsFields = [ this.showEventsFields = [

View File

@@ -20,7 +20,6 @@ export const getDefaultTarget = (targets?) => {
export function getDefaultTargetOptions() { export function getDefaultTargetOptions() {
return { return {
hostsInMaintenance: true, hostsInMaintenance: true,
sortTriggersBy: { text: 'last change', value: 'lastchange' },
}; };
} }
@@ -100,13 +99,17 @@ export function migratePanelSchema(panel) {
target.queryType = 5; target.queryType = 5;
target.showProblems = migrateShowEvents(panel); target.showProblems = migrateShowEvents(panel);
target.options = migrateOptions(panel); target.options = migrateOptions(panel);
_.defaults(target.options, getDefaultTargetOptions()); _.defaults(target.options, getDefaultTargetOptions());
_.defaults(target, { tags: { filter: "" } }); _.defaults(target, { tags: { filter: "" } });
} }
panel.sortProblems = panel.sortTriggersBy?.value === 'priority' ? 'priority' : 'lastchange';
delete panel.showEvents; delete panel.showEvents;
delete panel.showTriggers; delete panel.showTriggers;
delete panel.hostsInMaintenance; delete panel.hostsInMaintenance;
delete panel.sortTriggersBy;
} }
return panel; return panel;
@@ -122,7 +125,7 @@ function migrateOptions(panel) {
return { return {
hostsInMaintenance: panel.hostsInMaintenance, hostsInMaintenance: panel.hostsInMaintenance,
sortTriggersBy: panel.sortTriggersBy, sortProblems: panel.sortTriggersBy?.value === 'priority' ? 'priority' : 'default',
acknowledged: acknowledged, acknowledged: acknowledged,
}; };
} }

View File

@@ -29,10 +29,13 @@ class TriggerPanelOptionsCtrl {
'unacknowledged', 'unacknowledged',
'acknowledged' 'acknowledged'
]; ];
this.sortByFields = [
{ text: 'last change', value: 'lastchange' }, this.sortingOptions = [
{ text: 'severity', value: 'priority' } { text: 'Default', value: 'default' },
{ text: 'Last change', value: 'lastchange' },
{ text: 'Severity', value: 'priority' },
]; ];
this.showEventsFields = [ this.showEventsFields = [
{ text: 'All', value: [0,1] }, { text: 'All', value: [0,1] },
{ text: 'OK', value: [0] }, { text: 'OK', value: [0] },

View File

@@ -87,8 +87,8 @@
<label class="gf-form-label width-10">Sort by</label> <label class="gf-form-label width-10">Sort by</label>
<div class="gf-form-select-wrapper max-width-8"> <div class="gf-form-select-wrapper max-width-8">
<select class="gf-form-input" <select class="gf-form-input"
ng-model="ctrl.panel.sortTriggersBy" ng-model="ctrl.panel.sortProblems"
ng-options="f.text for f in editor.sortByFields track by f.value" ng-options="f.value as f.text for f in editor.sortingOptions"
ng-change="ctrl.render()"> ng-change="ctrl.render()">
</select> </select>
</div> </div>

View File

@@ -66,10 +66,11 @@ describe('Triggers Panel schema migration', () => {
options: { options: {
hostsInMaintenance: false, hostsInMaintenance: false,
acknowledged: 0, acknowledged: 0,
sortTriggersBy: { text: 'last change', value: 'lastchange' }, sortProblems: 'default',
}, },
} }
], ],
sortProblems: 'lastchange',
ageField: true, ageField: true,
statusField: false, statusField: false,
severityField: false, severityField: false,

View File

@@ -15,7 +15,12 @@ describe('TriggerPanelCtrl', () => {
let createPanelCtrl: () => any; let createPanelCtrl: () => any;
beforeEach(() => { beforeEach(() => {
ctx = { scope: { panel: PANEL_DEFAULTS } }; ctx = { scope: {
panel: {
...PANEL_DEFAULTS,
sortProblems: 'lastchange',
}
}};
ctx.scope.panel.targets = [{ ctx.scope.panel.targets = [{
...DEFAULT_TARGET, ...DEFAULT_TARGET,
datasource: 'zabbix_default', datasource: 'zabbix_default',
@@ -84,7 +89,7 @@ describe('TriggerPanelCtrl', () => {
}); });
it('should sort triggers by severity', (done) => { it('should sort triggers by severity', (done) => {
ctx.panelCtrl.panel.sortTriggersBy = { text: 'severity', value: 'priority' }; ctx.panelCtrl.panel.sortProblems = 'priority';
ctx.panelCtrl.onDataFramesReceived(ctx.dataFramesReceived).then(() => { ctx.panelCtrl.onDataFramesReceived(ctx.dataFramesReceived).then(() => {
const trigger_ids = _.map(ctx.panelCtrl.renderData, 'triggerid'); const trigger_ids = _.map(ctx.panelCtrl.renderData, 'triggerid');
expect(trigger_ids).toEqual([ expect(trigger_ids).toEqual([

View File

@@ -50,7 +50,7 @@ export const PANEL_DEFAULTS = {
descriptionField: true, descriptionField: true,
descriptionAtNewLine: false, descriptionAtNewLine: false,
// Options // Options
sortTriggersBy: { text: 'last change', value: 'lastchange' }, sortProblems: 'lastchange',
limit: null, limit: null,
// View options // View options
layout: 'table', layout: 'table',
@@ -146,6 +146,9 @@ export class TriggerPanelCtrl extends MetricsPanelCtrl {
onRender() { onRender() {
this.range = this.timeSrv.timeRange(); this.range = this.timeSrv.timeRange();
if (this.renderData) {
this.renderProblems(this.renderData);
}
} }
setPanelError(err, defaultError = "Request Error") { setPanelError(err, defaultError = "Request Error") {
@@ -210,9 +213,9 @@ export class TriggerPanelCtrl extends MetricsPanelCtrl {
} }
sortTriggers(triggerList) { sortTriggers(triggerList) {
if (this.panel.sortTriggersBy.value === 'priority') { if (this.panel.sortProblems === 'priority') {
triggerList = _.orderBy(triggerList, ['priority', 'lastchangeUnix', 'triggerid'], ['desc', 'desc', 'desc']); triggerList = _.orderBy(triggerList, ['priority', 'lastchangeUnix', 'triggerid'], ['desc', 'desc', 'desc']);
} else { } else if (this.panel.sortProblems === 'lastchange') {
triggerList = _.orderBy(triggerList, ['lastchangeUnix', 'priority', 'triggerid'], ['desc', 'desc', 'desc']); triggerList = _.orderBy(triggerList, ['lastchangeUnix', 'priority', 'triggerid'], ['desc', 'desc', 'desc']);
} }
return triggerList; return triggerList;