From 3b98b200c07098f97259d877fc7abecfdbc33485 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 22 Jan 2016 00:18:49 +0300 Subject: [PATCH] Move ZabbixAPI core functions to own service. --- plugins/datasource-zabbix/zabbixAPI.js | 99 ++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 plugins/datasource-zabbix/zabbixAPI.js diff --git a/plugins/datasource-zabbix/zabbixAPI.js b/plugins/datasource-zabbix/zabbixAPI.js new file mode 100644 index 0000000..5e041f2 --- /dev/null +++ b/plugins/datasource-zabbix/zabbixAPI.js @@ -0,0 +1,99 @@ +define([ + 'angular', +], +function (angular) { + 'use strict'; + + var module = angular.module('grafana.services'); + + module.service('ZabbixAPI', function($q, backendSrv) { + + this.init = function () {}; + + /** + * Request data from Zabbix API + * @return {object} response.result + */ + this._request = function(url, method, params, auth) { + var options = { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + url: url, + data: { + jsonrpc: '2.0', + method: method, + params: params, + auth: auth, + id: 1 + } + }; + + if (this.basicAuth || this.withCredentials) { + options.withCredentials = true; + } + if (this.basicAuth) { + options.headers.Authorization = this.basicAuth; + } + + var self = this; + return backendSrv.datasourceRequest(options).then(function (response) { + if (!response.data) { + return []; + } + // Handle Zabbix API errors + else if (response.data.error) { + + // Handle auth errors + if (response.data.error.data === "Session terminated, re-login, please." || + response.data.error.data === "Not authorised." || + response.data.error.data === "Not authorized") { + return self.performZabbixAPILogin().then(function (response) { + self.auth = response; + return self.performZabbixAPIRequest(method, params); + }); + } + } + return response.data.result; + }); + }; + + /** + * Get authentication token. + * @return {string} auth token + */ + this.login = function(url, username, password) { + var options = { + url : this.url, + method : 'POST', + data: { + jsonrpc: '2.0', + method: 'user.login', + params: { + user: this.username, + password: this.password + }, + auth: null, + id: 1 + } + }; + + if (this.basicAuth || this.withCredentials) { + options.withCredentials = true; + } + if (this.basicAuth) { + options.headers = options.headers || {}; + options.headers.Authorization = this.basicAuth; + } + + return backendSrv.datasourceRequest(options).then(function (result) { + if (!result.data) { + return null; + } + return result.data.result; + }); + }; + + }); +}); \ No newline at end of file