Skip to content
Snippets Groups Projects
Commit d57e76b6 authored by Jan Grewe's avatar Jan Grewe
Browse files

initial commit

parents
Branches
No related tags found
No related merge requests found
if(window.location.hostname == 'localhost') {
var jsonSource = 'test.json';
} else {
var jsonSource = '/cgi-bin/icinga/status.cgi?hosts=all&style=hostservicedetail&hoststatustypes=12&hostprops=2097162&servicestatustypes=28&serviceprops=2097162&nostatusheader&jsonoutput'
}
$(document).ready(function() {
getAlerts();
setInterval(function() {
getAlerts();
}, 10000);
});
function getAlerts() {
$('#alerts').spin({lines: 13, length: 20, width: 10, radius: 30});
$.getJSON(jsonSource, function(data) {
hosts = data.status.host_status;
services = data.status.service_status;
alerts = hosts.concat(services);
alerts.sort(durationSorter);
alerts.sort(statusSorter);
$("span.label-danger").trigger('stopRumble');
$('#alerts').spin(false).empty();
$.each(alerts, function(i, e) {
var rowClass = '';
switch(e.status) {
case 'DOWN':
var rowClass = 'danger';
break;
case 'CRITICAL':
var rowClass = 'danger';
break;
case 'WARNING':
var rowClass = 'warning';
break;
case 'UNKNOWN':
var rowClass = 'info';
break;
}
if(typeof e.service == 'undefined') {
e.service = 'Host Down';
}
e.host = e.host.replace(/\.magic-technik\.de|\.srv\.mediaways\.net/g, '');
var row = '<tr class="'+rowClass+' status_main">'
+'<td class="rowLabel text-center" valign="middle" rowspan="2"><span class="label label-'+rowClass+'">'+e.status+'</span></td>'
+'<td>'+e.host+'</td>'
+'<td>'+e.service+'</td>'
+'</tr>';
row_info = '<tr class="'+rowClass+' status_info"><td>'+e.duration+'</td><td>'+e.status_information+'</td></tr>';
$('#alerts').append(row).append(row_info);
});
highlight("tr.danger.status_main td");
$("span.label-danger").jrumble({x: 5, y: 5, rotation: 10, speed: 75}).trigger('startRumble');
});
}
function highlight(selector) {
$(selector).each(function() {
$(this).animate( { color: "#f00" }, 200 ).animate( { color: "#000" }, 700, 'linear', function() {
highlight(selector);
});
});
}
function getSeconds(str) {
var sum = 0;
var days = str.match(/(\d+)d/);
var hours = str.match(/(\d+)h/);
var minutes = str.match(/(\d+)m/);
var seconds = str.match(/(\d+)s/);
if (days) { sum += parseInt(days[1])*86400; }
if (hours) { sum += parseInt(hours[1])*3600; }
if (minutes) { sum += parseInt(minutes[1])*60; }
return sum;
}
var durationSorter = function(a, b) {
var aDur = getSeconds(a.duration);
var bDur = getSeconds(b.duration);
if(aDur > bDur) {
return 1;
}else{
return -1;
}
};
var statusSorter = function(a, b) {
if(a.status == 'DOWN') {
return -1;
} else {
if(b.status == 'DOWN') {
return 1;
} else {
if(a.status == 'CRITICAL') {
return -1;
} else {
if(b.status == 'CRITICAL') {
return 1;
}
if(a.status == 'UNKNOWN') {
return -1;
} else {
if(b.status == 'UNKNOWN') {
return 1;
}
}
}
}
}
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Icinga Dashboard</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<style>
tr {
font-size: 250%;
}
tr.danger {
font-size: 400%;
}
tr.status_info {
font-size: 150%;
}
td {
font-weight: bold;
overflow:hidden;
white-space:nowrap;
}
#alerts td {
border: 0;
}
#alerts tr.status_info {
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
color: rgba(0, 0, 0, 0.6);
}
td.rowLabel.text-center {
vertical-align: middle;
}
</style>
</head>
<body>
<table class="table" id="alerts"></table>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/spin.js/2.0.1/spin.min.js"></script>
<script src="//fgnass.github.io/spin.js/jquery.spin.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-color/2.1.2/jquery.color.min.js"></script>
<script src="//cdn.rawgit.com/jackrugile/jrumble/master/jquery.jrumble.min.js"></script>
<script src="icidash.js"></script>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment