Fix problems fetching performance and memory issues (#724)
* request only alert message when invoking alert.get * fetch problem alerts on demand * problems panel: refactor
This commit is contained in:
@@ -271,14 +271,12 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
}));
|
||||
return Promise.all([
|
||||
this.datasources[ds].zabbix.getExtendedEventData(eventids),
|
||||
this.datasources[ds].zabbix.getEventAlerts(eventids),
|
||||
Promise.resolve(triggers)
|
||||
]);
|
||||
})
|
||||
.then(([events, alerts, triggers]) => {
|
||||
.then(([events, triggers]) => {
|
||||
this.addEventTags(events, triggers);
|
||||
this.addAcknowledges(events, triggers);
|
||||
this.addEventAlerts(alerts, triggers);
|
||||
return triggers;
|
||||
})
|
||||
.then(triggers => this.setMaintenanceStatus(triggers))
|
||||
@@ -337,18 +335,6 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
return triggers;
|
||||
}
|
||||
|
||||
addEventAlerts(alerts, triggers) {
|
||||
alerts.forEach(alert => {
|
||||
const trigger = _.find(triggers, t => {
|
||||
return t.lastEvent && alert.eventid === t.lastEvent.eventid;
|
||||
});
|
||||
if (trigger) {
|
||||
trigger.alerts = trigger.alerts ? trigger.alerts.concat(alert) : [alert];
|
||||
}
|
||||
});
|
||||
return triggers;
|
||||
}
|
||||
|
||||
filterTriggersPre(triggerList, ds) {
|
||||
// Filter triggers by description
|
||||
let triggerFilter = this.panel.targets[ds].trigger.filter;
|
||||
@@ -503,16 +489,27 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
this.refresh();
|
||||
}
|
||||
|
||||
getProblemEvents(trigger) {
|
||||
const triggerids = [trigger.triggerid];
|
||||
getProblemEvents(problem) {
|
||||
const triggerids = [problem.triggerid];
|
||||
const timeFrom = Math.ceil(dateMath.parse(this.range.from) / 1000);
|
||||
const timeTo = Math.ceil(dateMath.parse(this.range.to) / 1000);
|
||||
return this.datasourceSrv.get(trigger.datasource)
|
||||
return this.datasourceSrv.get(problem.datasource)
|
||||
.then(datasource => {
|
||||
return datasource.zabbix.getEvents(triggerids, timeFrom, timeTo, [0, 1], PROBLEM_EVENTS_LIMIT);
|
||||
});
|
||||
}
|
||||
|
||||
getProblemAlerts(problem) {
|
||||
if (!problem.lastEvent || problem.lastEvent.length === 0) {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
const eventids = [problem.lastEvent.eventid];
|
||||
return this.datasourceSrv.get(problem.datasource)
|
||||
.then(datasource => {
|
||||
return datasource.zabbix.getEventAlerts(eventids);
|
||||
});
|
||||
}
|
||||
|
||||
formatHostName(trigger) {
|
||||
let host = "";
|
||||
if (this.panel.hostField && this.panel.hostTechNameField) {
|
||||
@@ -663,6 +660,7 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
pageSize,
|
||||
fontSize: fontSizeProp,
|
||||
getProblemEvents: ctrl.getProblemEvents.bind(ctrl),
|
||||
getProblemAlerts: ctrl.getProblemAlerts.bind(ctrl),
|
||||
onPageSizeChange: ctrl.handlePageSizeChange.bind(ctrl),
|
||||
onColumnResize: ctrl.handleColumnResize.bind(ctrl),
|
||||
onProblemAck: (trigger, data) => {
|
||||
|
||||
Reference in New Issue
Block a user