Пишу небольшую приблуду для управления Zabbix'ом через WebAPI.
Вывел код в отдельный модуль:
const axios = require("axios");
const zabbix_api = "http://localhost/zabbix/api_jsonrpc.php";
exports.zapi = {
token: "",
id: 1,
auth: function() {
axios
.post(zabbix_api, {
jsonrpc: "2.0",
method: "user.login",
id: this.id,
auth: null,
params: {
user: "Admin",
password: "zabbix"
}
})
.then(function(response) {
this.token = response.data.result;
this.id++;
console.log(response.data);
})
.catch(function(error) {
console.log(error);
})
},
hosts: function() {
if (!this.token) {
this.auth()
}
axios
.post(zabbix_api, {
jsonrpc: "2.0",
method: "hostgroup.get",
params: {
output: "extend",
filter: {
name: ["Zabbix servers", "Linux servers"]
}
},
id: this.id,
auth: this.token
})
.then(function(response) {
this.id++;
console.log(response.data);
})
.catch(function(error) {
console.log(error);
});
}
};
И
да, я понимаю что проблема в асинхронности -
hosts и
auth начинают выполнятся параллельно и естественно
hosts получается
unauthorized ...
Мне интересно как это нужно оформить "по феншую", что б кровь из глаз не текла ...