我在Linux Server中安装了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会提供正确的输出。
如何解决此问题?
答案 0 :(得分:1)
我尝试使用我自己的 Nagios XI 5.4.11 安装(您没有引用任何特定版本),但我没有发现获得的可用性报告之间存在任何差异,直接来自UI ,使用JS脚本在浏览器中调用API 或 。
所以我无法重现您的问题,但仅供参考和帮助调试,下面是我成功使用从Nagios API archivejson.cgi?query=availability
获取正确JSON答案的代码段。
该脚本使用两种身份验证方式,第一种方式,凭证直接在网址中传递,真的不安全:
var time = new Date();
var end = Math.floor((new Date).getTime() / 1000);
var start = Math.floor(time.setDate(time.getDate() - 1) / 1000);
var user = "admin";
var pwd = "admin";
var baseurl = "mynagioshost:443/nagios";
var url1 = "https://"+user+":"+pwd+"@"+baseurl+"/cgi-bin/archivejson.cgi?query=availability&availabilityobjecttype=hostgroups&hostgroup=application-servers&assumedinitialhoststate=up&assumedinitialservicestate=ok&starttime=" + start + "&endtime=" + end;
var url2 = "https://"+baseurl+"/cgi-bin/archivejson.cgi?query=availability&availabilityobjecttype=hostgroups&hostgroup=application-servers&assumedinitialhoststate=up&assumedinitialservicestate=ok&starttime=" + start + "&endtime=" + end;
function go1() {
$.support.cors = true;
$.ajax({
url: url1,
timeout: 30000,
crossDomain: true,
dataType: 'json', //data format
success: function(data) {
console.log("success: ", data);
$("#resp1").html(JSON.stringify(data, null, 2));
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error: ", errorThrown);
}
});
}
function go2() {
$.support.cors = true;
$.ajax({
url: url2,
timeout: 30000,
crossDomain: true,
xhrFields: {
withCredentials: true
},
beforeSend: function(xhr) {
var auth = make_base_auth(user, pwd);
console.log("beforeSend: ", auth);
xhr.setRequestHeader('Authorization', auth);
},
dataType: 'json',
success: function(data) {
console.log("success: ", data);
$("#resp2").html(JSON.stringify(data, null, 2));
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("error: ", errorThrown);
}
});
}
function make_base_auth(user, password) {
var tok = user + ':' + password;
// Base64 encoding for basic auth encoding username:password
var hash = btoa(tok);
// return the auth header
return "Basic " + hash;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn1" onclick="go1()">get report - mode1</button>
<br>
<button id="btn2" onclick="go2()">get report - mode2</button>
<br>
<table>
<tr>
<td style="width: 45%">
<pre id="resp1"></pre>
</td>
<td style="width: 45%">
<pre id="resp2"></pre>
</td>
</tr>
</table>
&#13;
如前所述,从API收到的数据无论如何都是相同的(显然除了时间)并且是这样的:
{
"format_version": 0,
"result": {
"query_time": 1515654147000,
"cgi": "archivejson.cgi",
"user": "nagiosadmin",
"query": "availability",
"query_status": "released",
"program_start": 1512375100000,
"last_data_update": 1515651099000,
"type_code": 0,
"type_text": "Success",
"message": ""
},
"data": {
"selectors": {
"availabilityobjecttype": 4,
"starttime": 1515567802000,
"endtime": 1515654202000,
"hostgroup": "application-servers",
...OMISSIS...
},
"hostgroup": {
"name": "application-servers",
"hosts": [
{
"name": "192.168.2.20",
"time_up": 86345,
"time_down": 22,
"time_unreachable": 0,
"scheduled_time_up": 0,
"scheduled_time_down": 0,
"scheduled_time_unreachable": 0,
"time_indeterminate_nodata": 0,
"time_indeterminate_notrunning": 0
},
...OMISSIS...
]
}
}
}