/* NTNU IT-tjenester 
 *
 * NAGIOS - Henter ut status på servere og services
 * CHANGECALENDAR - Henter ut dagens, og de to forrige, endringer
 * NAV - Henter ut status fra NAV
 *
 */

// NAGIOS
// Henter ut status på host og services fra Nagios
// Bør være en måte å få dette som JSON-objekt fra Nagios på,
// nå parses rå HTML fra Nagios med BeautifulSoup i Python
var nagios_t;
var glob;
function updateNagios()
{
	$.ajax({
		url: '/ajax/nagios/',
		dataType: 'json',
		success: function(data) {
			var nagios_hosts;
			for (host in data['hosts_down']) {
				var state;
				switch(data['hosts_down'][host]['current_state']) {
					case "0":
						state = 'up';
						break;
					case "1":
						state = "down";
						break;
					default:
						state = 'unknown';
						break;
				}
				nagios_hosts += '<tr class="' + state + '"><td>' + 
					data['hosts_down'][host]['host_name'] + '</td><td>' + 
					//data['hosts_down'][host]['current_state_soft'] + '</td><td>' +
					data['hosts_down'][host]['last_check'] + '</td><td>' +
					data['hosts_down'][host]['duration'] + '</td><td>' +
					data['hosts_down'][host]['current_attempt'] + '/4</td><td>' +
					data['hosts_down'][host]['plugin_output'] + '</td>' +
					'</tr>';
			}
			$('#nagios table#hosts tbody#hostsdown').html(nagios_hosts);
					
			var nagios_service;
			for (service in data['services_down']) {
				var state;
				if (data['services_down'][service]['problem_has_been_acknowledged'] == "1") {
					state = 'acknowledged';
				}
				else {
					switch(data['services_down'][service]['current_state']) {
						case "0":
							state = 'ok';
							break;
						case "1":
							state = "warning";
							break;
						case "2":
							state = 'critical';
							break;
						case "3":
							state = 'unknown';
							break;
						default:
							state = 'unknown';
							break;
					}
				}
				nagios_service += '<tr class="' + state + '"><td>' + 
					data['services_down'][service]['host_name'] + '</td><td>' + 
					data['services_down'][service]['service_description'] + '</td><td class="tright">' +
					//data['services_down'][service]['last_check'] + '</td><td class="tright">' +
					data['services_down'][service]['duration'] + '</td><td>' +
					//data['services_down'][service]['current_attempt'] + '/4</td><td>' +
					//data['services_down'][service]['current_state_soft'] + '</td><td>' +
					data['services_down'][service]['plugin_output'].substring(0, 50) + '</td>' +
					'</tr>';
			}
			$('#nagios table#services tbody#servicesdown').html(nagios_service);
			nagios_t=setTimeout('updateNagios()',10*1000);
		}
	});
}

// CHANGECALENDAR
// Endringskalenderen, viser kun i dag og de siste to dagene
// med endringer. TODO: Undersøke muligheter for mer fornuftig
// format å hente ut, enn å parse rå HTML. Parses her direkte i JS
var change_t;
function updateChangeCalendar()
{
	$.ajax({
		url: '/ajax/calendar/',
		dataType: 'json',
		success: function(data) {
			var changes;
			changes = '<tr>';
			for (day in data) {
				changes += '<td class="single">';
				changes += '<table class="single">';
				changes += '<tr class="title"><th colspan="3">' + data[day]['date'] + '</th></tr>';
				changes += '<tr class="tr_header"><th>Change</th><th>Beskrivelse</th></tr>'; 
					for (change in data[day]['changes']) {
						changes += '<tr class="change ' + data[day]['changes'][change]['level'] +'">';
						changes += '<td>' + data[day]['changes'][change]['sid'] + '</td>';
						changes += '<td><i>' + data[day]['changes'][change]['start'] + ' - ';
						changes += '' + data[day]['changes'][change]['stop'] + '</i><br />';
						changes += '' + data[day]['changes'][change]['desc'] + '</td>';
						changes += '</tr>';
					}
				changes += '</table>';
				changes += '</td>';
			}
			changes += '</tr>';
			
			$('#changeCalendar table#change tbody#change').html(changes);
			change_t = setTimeout('updateChangeCalendar()', 60 * 60 * 1000);
		}
	});
}

// NAV
// Henter ut fra status-siden til NAV
function updateNAV()
{
	$.ajax({
		url: '/ajax/nav/',
		success: function(data) {
			var netbox0 = $("table #netbox_0",data).html();
			var netbox1 = $("table #netbox_1",data).html();
			var module = $("table #module_0",data).html();
			var service = $("table #service_0",data).html();

			$('.nav p').remove();			
			
			// IP devices down
			$('.nav #netbox_0').remove();
			$('.nav').append("<table id='netbox_0'>" + netbox0 + "</table>");
			$('.nav #netbox_0 tr').each(function(){
				$('th:eq(4), td:eq(4)',this).remove();
				});
			
			// IP devices in shadow
			$('.nav #netbox_1').remove();
			$('.nav').append("<table id='netbox_1'>" + netbox1 + "</table>");
			$('.nav #netbox_1 tr').each(function(){
				$('th:eq(4), td:eq(4)',this).remove();
				});
			
			// Modules down
			$('.nav #module_0').remove();
			$('.nav').append("<table id='module_0'>" + module + "</table>");
			$('.nav #module_0 tr').each(function(){
					$('th:eq(5), td:eq(5)',this).remove();
					$('th:eq(2), td:eq(2)',this).remove();
					});
			
			// Services down
			$('.nav #service_0').remove();
			$('.nav').append("<table id='service_0'>" + service + "</table>");
			$('.nav #service_0 tr').each(function(){
					$('td:eq(4)',this).remove();
					});
			
			$('.nav span.subtitle').remove();
			
			nav_t=setTimeout('updateNAV()',30*1000);
		}
	});
}


