Fix reloading query editor with no target's info. Some refactoring.

This commit is contained in:
Alexander Zobnin
2015-05-07 16:52:05 +03:00
parent a2e1e0dfc9
commit 78fb8fdfec
2 changed files with 82 additions and 78 deletions

View File

@@ -14,16 +14,19 @@ function (angular, _, kbn) {
function ZabbixAPIDatasource(datasource) {
this.name = datasource.name;
this.type = 'ZabbixAPIDatasource';
this.supportMetrics = true;
this.url = datasource.url;
this.username = datasource.username;
this.password = datasource.password;
// No datapoints limit by default
this.limitmetrics = datasource.limitmetrics || 0;
this.partials = datasource.partials || 'plugins/datasource/zabbix/partials';
this.editorSrc = this.partials + '/query.editor.html';
this.annotationEditorSrc = this.partials + '/annotations.editor.html';
this.supportMetrics = true;
this.supportAnnotations = true;
}
@@ -130,6 +133,38 @@ function (angular, _, kbn) {
///////////////////////////////////////////////////////////////////////
// Request data from Zabbix API
ZabbixAPIDatasource.prototype.doZabbixAPIRequest = function(request_data) {
var options = {
method: 'POST',
url: this.url,
data: request_data
};
var performedQuery;
// Check authorization first
if (!this.auth) {
var self = this;
performedQuery = this.performZabbixAPILogin().then(function (response) {
self.auth = response;
options.data.auth = response;
return $http(options);
});
} else {
performedQuery = $http(options);
}
// Handle response
return performedQuery.then(function (response) {
if (!response.data) {
return [];
}
return response.data.result;
});
};
/**
* Perform time series query to Zabbix API
*
@@ -186,6 +221,7 @@ function (angular, _, kbn) {
id: 1
},
};
return $http(options).then(function (result) {
if (!result.data) {
return null;
@@ -197,110 +233,78 @@ function (angular, _, kbn) {
// Get the list of host groups
ZabbixAPIDatasource.prototype.performHostGroupSuggestQuery = function() {
var options = {
url : this.url,
method : 'POST',
data: {
jsonrpc: '2.0',
method: 'hostgroup.get',
params: {
output: ['name'],
sortfield: 'name'
},
auth: this.auth,
id: 1
var data = {
jsonrpc: '2.0',
method: 'hostgroup.get',
params: {
output: ['name'],
sortfield: 'name'
},
auth: this.auth,
id: 1
};
return $http(options).then(function (result) {
if (!result.data) {
return [];
}
return result.data.result;
});
return this.doZabbixAPIRequest(data);
};
// Get the list of hosts
ZabbixAPIDatasource.prototype.performHostSuggestQuery = function(groupid) {
var options = {
url : this.url,
method : 'POST',
data: {
jsonrpc: '2.0',
method: 'host.get',
params: {
output: ['name'],
sortfield: 'name'
},
auth: this.auth,
id: 1
var data = {
jsonrpc: '2.0',
method: 'host.get',
params: {
output: ['name'],
sortfield: 'name'
},
auth: this.auth,
id: 1
};
if (groupid) {
options.data.params.groupids = groupid;
data.params.groupids = groupid;
}
return $http(options).then(function (result) {
if (!result.data) {
return [];
}
return result.data.result;
});
return this.doZabbixAPIRequest(data);
};
// Get the list of applications
ZabbixAPIDatasource.prototype.performAppSuggestQuery = function(hostid) {
var options = {
url : this.url,
method : 'POST',
data: {
jsonrpc: '2.0',
method: 'application.get',
params: {
output: ['name'],
sortfield: 'name',
hostids: hostid
},
auth: this.auth,
id: 1
var data = {
jsonrpc: '2.0',
method: 'application.get',
params: {
output: ['name'],
sortfield: 'name',
hostids: hostid
},
auth: this.auth,
id: 1
};
return $http(options).then(function (result) {
if (!result.data) {
return [];
}
return result.data.result;
});
return this.doZabbixAPIRequest(data);
};
// Get the list of host items
ZabbixAPIDatasource.prototype.performItemSuggestQuery = function(hostid, applicationid) {
var options = {
url : this.url,
method : 'POST',
data: {
jsonrpc: '2.0',
method: 'item.get',
params: {
output: ['name', 'key_', 'value_type', 'delay'],
sortfield: 'name',
hostids: hostid
},
auth: this.auth,
id: 1
var data = {
jsonrpc: '2.0',
method: 'item.get',
params: {
output: ['name', 'key_', 'value_type', 'delay'],
sortfield: 'name',
hostids: hostid
},
auth: this.auth,
id: 1
};
// If application selected return only relative items
if (applicationid) {
options.data.params.applicationids = applicationid;
data.params.applicationids = applicationid;
}
return $http(options).then(function (result) {
if (!result.data) {
return [];
}
return result.data.result;
});
return this.doZabbixAPIRequest(data);
};

View File

@@ -25,7 +25,7 @@ function (angular, _) {
};
// Update host group, host, application and item lists
//$scope.updateHostGroupList();
$scope.updateHostGroupList();
$scope.updateHostList();
if ($scope.target.host) {
$scope.updateAppList($scope.target.host.hostid);