Refactor: zabbixAPI.service
This commit is contained in:
@@ -4,7 +4,7 @@ import * as utils from './utils';
|
||||
import './zabbixAPICore.service';
|
||||
|
||||
/** @ngInject */
|
||||
function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
function ZabbixAPIServiceFactory($q, alertSrv, zabbixAPICoreService) {
|
||||
|
||||
/**
|
||||
* Zabbix API Wrapper.
|
||||
@@ -25,6 +25,8 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
};
|
||||
|
||||
this.loginPromise = null;
|
||||
this.loginErrorCount = 0;
|
||||
this.maxLoginAttempts = 3;
|
||||
|
||||
this.$q = $q;
|
||||
this.alertSrv = alertSrv;
|
||||
@@ -39,27 +41,24 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
//////////////////////////
|
||||
|
||||
request(method, params) {
|
||||
var self = this;
|
||||
|
||||
return this.zabbixAPICore
|
||||
.request(this.url, method, params, this.requestOptions, this.auth)
|
||||
.then((result) => {
|
||||
return result;
|
||||
}, (error) => {
|
||||
// Handle API errors
|
||||
if (isNotAuthorized(error.data)) {
|
||||
return self.loginOnce().then(
|
||||
function() {
|
||||
return self.request(method, params);
|
||||
},
|
||||
// Handle user.login method errors
|
||||
function(error) {
|
||||
self.alertAPIError(error.data);
|
||||
});
|
||||
return this.zabbixAPICore.request(this.url, method, params, this.requestOptions, this.auth)
|
||||
.catch(error => {
|
||||
if (isNotAuthorized(error.data)) {
|
||||
// Handle auth errors
|
||||
this.loginErrorCount++;
|
||||
if (this.loginErrorCount > this.maxLoginAttempts) {
|
||||
this.loginErrorCount = 0;
|
||||
return null;
|
||||
} else {
|
||||
this.alertSrv.set("Connection Error", error.data, 'error', 5000);
|
||||
return this.loginOnce()
|
||||
.then(() => this.request(method, params));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Handle API errors
|
||||
let message = error.data ? error.data : error.statusText;
|
||||
this.alertAPIError(message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
alertAPIError(message, timeout = 5000) {
|
||||
@@ -78,25 +77,16 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
* @return login promise
|
||||
*/
|
||||
loginOnce() {
|
||||
var self = this;
|
||||
var deferred = this.$q.defer();
|
||||
if (!self.loginPromise) {
|
||||
self.loginPromise = deferred.promise;
|
||||
self.login().then(
|
||||
function(auth) {
|
||||
self.loginPromise = null;
|
||||
self.auth = auth;
|
||||
deferred.resolve(auth);
|
||||
},
|
||||
function(error) {
|
||||
self.loginPromise = null;
|
||||
deferred.reject(error);
|
||||
}
|
||||
if (!this.loginPromise) {
|
||||
this.loginPromise = Promise.resolve(
|
||||
this.login().then(auth => {
|
||||
this.auth = auth;
|
||||
this.loginPromise = null;
|
||||
return auth;
|
||||
})
|
||||
);
|
||||
} else {
|
||||
return self.loginPromise;
|
||||
}
|
||||
return deferred.promise;
|
||||
return this.loginPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -197,13 +187,16 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
}
|
||||
|
||||
return this.request('item.get', params)
|
||||
.then(items => {
|
||||
return _.forEach(items, item => {
|
||||
item.item = item.name;
|
||||
item.name = utils.expandItemName(item.item, item.key_);
|
||||
return item;
|
||||
});
|
||||
.then(expandItems);
|
||||
|
||||
function expandItems(items) {
|
||||
items.forEach(item => {
|
||||
item.item = item.name;
|
||||
item.name = utils.expandItemName(item.item, item.key_);
|
||||
return item;
|
||||
});
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
||||
getLastValue(itemid) {
|
||||
@@ -211,48 +204,42 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
output: ['lastvalue'],
|
||||
itemids: itemid
|
||||
};
|
||||
return this.request('item.get', params).then(function(items) {
|
||||
if (items.length) {
|
||||
return items[0].lastvalue;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
return this.request('item.get', params)
|
||||
.then(items => items.length ? items[0].lastvalue : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform history query from Zabbix API
|
||||
*
|
||||
* @param {Array} items Array of Zabbix item objects
|
||||
* @param {Number} time_from Time in seconds
|
||||
* @param {Number} time_till Time in seconds
|
||||
* @param {Number} timeFrom Time in seconds
|
||||
* @param {Number} timeTill Time in seconds
|
||||
* @return {Array} Array of Zabbix history objects
|
||||
*/
|
||||
getHistory(items, time_from, time_till) {
|
||||
var self = this;
|
||||
getHistory(items, timeFrom, timeTill) {
|
||||
|
||||
// Group items by value type
|
||||
var grouped_items = _.groupBy(items, 'value_type');
|
||||
|
||||
// Perform request for each value type
|
||||
return this.$q.all(_.map(grouped_items, function (items, value_type) {
|
||||
var itemids = _.map(items, 'itemid');
|
||||
var params = {
|
||||
// Group items by value type and perform request for each value type
|
||||
let grouped_items = _.groupBy(items, 'value_type');
|
||||
let promises = _.map(grouped_items, (items, value_type) => {
|
||||
let itemids = _.map(items, 'itemid');
|
||||
let params = {
|
||||
output: 'extend',
|
||||
history: value_type,
|
||||
itemids: itemids,
|
||||
sortfield: 'clock',
|
||||
sortorder: 'ASC',
|
||||
time_from: time_from
|
||||
time_from: timeFrom
|
||||
};
|
||||
|
||||
// Relative queries (e.g. last hour) don't include an end time
|
||||
if (time_till) {
|
||||
params.time_till = time_till;
|
||||
if (timeTill) {
|
||||
params.time_till = timeTill;
|
||||
}
|
||||
|
||||
return self.request('history.get', params);
|
||||
})).then(_.flatten);
|
||||
return this.request('history.get', params);
|
||||
});
|
||||
|
||||
return Promise.all(promises).then(_.flatten);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -264,31 +251,30 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
* @param {Number} time_till Time in seconds
|
||||
* @return {Array} Array of Zabbix trend objects
|
||||
*/
|
||||
getTrend_ZBXNEXT1193(items, time_from, time_till) {
|
||||
var self = this;
|
||||
getTrend_ZBXNEXT1193(items, timeFrom, timeTill) {
|
||||
|
||||
// Group items by value type
|
||||
var grouped_items = _.groupBy(items, 'value_type');
|
||||
|
||||
// Perform request for each value type
|
||||
return this.$q.all(_.map(grouped_items, function (items, value_type) {
|
||||
var itemids = _.map(items, 'itemid');
|
||||
var params = {
|
||||
// Group items by value type and perform request for each value type
|
||||
let grouped_items = _.groupBy(items, 'value_type');
|
||||
let promises = _.map(grouped_items, (items, value_type) => {
|
||||
let itemids = _.map(items, 'itemid');
|
||||
let params = {
|
||||
output: 'extend',
|
||||
trend: value_type,
|
||||
itemids: itemids,
|
||||
sortfield: 'clock',
|
||||
sortorder: 'ASC',
|
||||
time_from: time_from
|
||||
time_from: timeFrom
|
||||
};
|
||||
|
||||
// Relative queries (e.g. last hour) don't include an end time
|
||||
if (time_till) {
|
||||
params.time_till = time_till;
|
||||
if (timeTill) {
|
||||
params.time_till = timeTill;
|
||||
}
|
||||
|
||||
return self.request('trend.get', params);
|
||||
})).then(_.flatten);
|
||||
return this.request('trend.get', params);
|
||||
});
|
||||
|
||||
return Promise.all(promises).then(_.flatten);
|
||||
}
|
||||
|
||||
getTrend_30(items, time_from, time_till, value_type) {
|
||||
@@ -312,7 +298,7 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
return self.request('trend.get', params);
|
||||
}
|
||||
|
||||
getITService(/* optional */ serviceids) {
|
||||
getITService(serviceids) {
|
||||
var params = {
|
||||
output: 'extend',
|
||||
serviceids: serviceids
|
||||
@@ -320,12 +306,12 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
return this.request('service.get', params);
|
||||
}
|
||||
|
||||
getSLA(serviceids, from, to) {
|
||||
getSLA(serviceids, timeFrom, timeTo) {
|
||||
var params = {
|
||||
serviceids: serviceids,
|
||||
intervals: [{
|
||||
from: from,
|
||||
to: to
|
||||
from: timeFrom,
|
||||
to: timeTo
|
||||
}]
|
||||
};
|
||||
return this.request('service.getsla', params);
|
||||
@@ -364,11 +350,11 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
return this.request('trigger.get', params);
|
||||
}
|
||||
|
||||
getEvents(objectids, from, to, showEvents) {
|
||||
getEvents(objectids, timeFrom, timeTo, showEvents) {
|
||||
var params = {
|
||||
output: 'extend',
|
||||
time_from: from,
|
||||
time_till: to,
|
||||
time_from: timeFrom,
|
||||
time_till: timeTo,
|
||||
objectids: objectids,
|
||||
select_acknowledges: 'extend',
|
||||
selectHosts: 'extend',
|
||||
@@ -389,11 +375,9 @@ function ZabbixAPIService($q, alertSrv, zabbixAPICoreService) {
|
||||
};
|
||||
|
||||
return this.request('event.get', params)
|
||||
.then(function (events) {
|
||||
return _.filter(events, function(event) {
|
||||
return event.acknowledges.length;
|
||||
});
|
||||
});
|
||||
.then(events => {
|
||||
return _.filter(events, (event) => event.acknowledges.length);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -411,4 +395,4 @@ function isNotAuthorized(message) {
|
||||
|
||||
angular
|
||||
.module('grafana.services')
|
||||
.factory('zabbixAPIService', ZabbixAPIService);
|
||||
.factory('zabbixAPIService', ZabbixAPIServiceFactory);
|
||||
|
||||
Reference in New Issue
Block a user