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>
<div class="gf-form-select-wrapper width-12">
<select class="gf-form-input"
ng-model="ctrl.target.options.sortTriggersBy"
ng-options="f.text for f in ctrl.sortByFields track by f.value"
ng-model="ctrl.target.options.sortProblems"
ng-options="f.value as f.text for f in ctrl.sortByFields"
ng-change="ctrl.onQueryOptionChange()">
</select>
</div>

View File

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

View File

@@ -20,7 +20,6 @@ export const getDefaultTarget = (targets?) => {
export function getDefaultTargetOptions() {
return {
hostsInMaintenance: true,
sortTriggersBy: { text: 'last change', value: 'lastchange' },
};
}
@@ -100,13 +99,17 @@ export function migratePanelSchema(panel) {
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;
@@ -122,7 +125,7 @@ function migrateOptions(panel) {
return {
hostsInMaintenance: panel.hostsInMaintenance,
sortTriggersBy: panel.sortTriggersBy,
sortProblems: panel.sortTriggersBy?.value === 'priority' ? 'priority' : 'default',
acknowledged: acknowledged,
};
}

View File

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

View File

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

View File

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

View File

@@ -15,7 +15,12 @@ describe('TriggerPanelCtrl', () => {
let createPanelCtrl: () => any;
beforeEach(() => {
ctx = { scope: { panel: PANEL_DEFAULTS } };
ctx = { scope: {
panel: {
...PANEL_DEFAULTS,
sortProblems: 'lastchange',
}
}};
ctx.scope.panel.targets = [{
...DEFAULT_TARGET,
datasource: 'zabbix_default',
@@ -84,7 +89,7 @@ describe('TriggerPanelCtrl', () => {
});
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(() => {
const trigger_ids = _.map(ctx.panelCtrl.renderData, 'triggerid');
expect(trigger_ids).toEqual([

View File

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