【发布时间】:2017-12-27 15:04:21
【问题描述】:
我已经在 Linux 服务器中安装了 Nagios(Nagios® Core™ 版本 4.2.2)。我一直在使用 JSON 查询生成器来生成 JSON 格式的可用性报告。它将提供一个 API。我创建了一个 Javascript,它将将此 URL 传递给 Ajax 调用,并根据成功结果在我们自己的仪表板中打印百分比。
JSON URL : http://xx.xx.xx.xx/nagios/cgi-bin/archivejson.cgi?query=availability&availabilityobjecttype=hostgroups&hostgroup=ALM&assumedinitialhoststate=up&assumedinitialservicestate=ok&starttime=1514297016&endtime=1514383416
开始和结束时间包含 EPOCH 格式的时间。
在 Javascript 中,我创建了一个函数,它将开始和结束时间作为变量传递给 URL。
var time = new Date();
var end = Math.floor((new Date).getTime() / 1000);
//var end = ~~(Date.now() /1000) ;
var start = Math.floor(time.setDate(time.getDate() - 1) / 1000);
Availreport = "http://xx.xx.xx.xx/nagios/cgi-bin/archivejson.cgi?query=availability&availabilityobjecttype=hostgroups&hostgroup=ALM&assumedinitialhoststate=up&assumedinitialservicestate=ok&starttime=" + start + "&endtime=" + end;
$.ajax({
url: Availreport,
timeout: 30000,
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization',
make_base_auth("nagiosadmin", "nagiosadmin"));
},
dataType: 'json', //data format
success: onOutboundReceived //on receive of reply
});
在浏览器中,当我检查仪表板时,time_up json 键给出的值不正确(值为 0)。相同的 URL,当直接在浏览器中执行时,会给出正确的输出。
我该如何解决这个问题?
【问题讨论】:
-
你所说的有些东西没有加起来。 “当我们直接在浏览器中执行相同的 URL 时,我们得到了正确的输出。”我严重怀疑。如果该 URL 需要授权标头,那么您无法“直接在浏览器中”执行它
-
它弹出进行身份验证,一旦提供凭据,将显示包含正确值的 JSON 输出
-
您的代码似乎正确。由于资料不足,无法回答。你能用小提琴之类的东西重现它吗?
-
您从 API 得到什么响应?如果您使用的是 Chrome,您可以检查网络选项卡(在开发者工具中),了解发送的请求和收到的响应。
-
我将尝试从 Nagios 获取具有给定开始和结束时间的主机组的可用性报告。 API 返回一个 JSON,其中包含 HostGroup 中每个服务器的 time_up、time_down 和 time_unreachable。我得到 0 作为 time_up 和 time_down 的值,并在 time_unreachable 中更正了值。当我直接在 Chrome 中执行相同的 URL(通过提供我的 Nagios 凭据),我得到了正确的响应(Time_up 包含正确的值)
标签: javascript jquery json ajax nagios