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; } } } } } };