Problems: sorting option
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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] },
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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([
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user