Files
grafana-zabbix/src/datasource-zabbix/zabbixAPICore.service.js
2017-03-05 10:09:47 +03:00

111 lines
2.5 KiB
JavaScript

/**
* General Zabbix API methods
*/
import angular from 'angular';
class ZabbixAPICoreService {
/** @ngInject */
constructor(backendSrv) {
this.backendSrv = backendSrv;
}
/**
* Request data from Zabbix API
* @return {object} response.result
*/
request(api_url, method, params, options, auth) {
let requestData = {
jsonrpc: '2.0',
method: method,
params: params,
id: 1
};
if (auth === "") {
// Reject immediately if not authenticated
return Promise.reject(new ZabbixAPIError({data: "Not authorised."}));
} else if (auth) {
// Set auth parameter only if it needed
requestData.auth = auth;
}
let requestOptions = {
method: 'POST',
url: api_url,
data: requestData,
headers: {
'Content-Type': 'application/json'
}
};
// Set request options for basic auth
if (options.basicAuth || options.withCredentials) {
requestOptions.withCredentials = true;
}
if (options.basicAuth) {
requestOptions.headers.Authorization = options.basicAuth;
}
return this.datasourceRequest(requestOptions);
}
datasourceRequest(requestOptions) {
return this.backendSrv.datasourceRequest(requestOptions)
.then(response => {
if (!response.data) {
return Promise.reject(new ZabbixAPIError({data: "General Error, no data"}));
} else if (response.data.error) {
// Handle Zabbix API errors
return Promise.reject(new ZabbixAPIError(response.data.error));
}
// Success
return response.data.result;
})
.catch(() => {
return Promise.reject(new ZabbixAPIError({data: "Connection Error"}));
});
}
/**
* Get authentication token.
* @return {string} auth token
*/
login(api_url, username, password, options) {
let params = {
user: username,
password: password
};
return this.request(api_url, 'user.login', params, options, null);
}
/**
* Get Zabbix API version
* Matches the version of Zabbix starting from Zabbix 2.0.4
*/
getVersion(api_url, options) {
return this.request(api_url, 'apiinfo.version', [], options);
}
}
// Define zabbix API exception type
export class ZabbixAPIError {
constructor(error) {
this.code = error.code;
this.name = error.data;
this.message = error.data;
this.data = error.data;
}
toString() {
return this.name + ": " + this.message;
}
}
angular
.module('grafana.services')
.service('zabbixAPICoreService', ZabbixAPICoreService);