Skip to content

Instantly share code, notes, and snippets.

@jasonpgignac
Created March 31, 2011 19:15
Show Gist options
  • Save jasonpgignac/897023 to your computer and use it in GitHub Desktop.
Save jasonpgignac/897023 to your computer and use it in GitHub Desktop.
function pullUpdates() {
jQuery.ajax({
url: url,
dataType: 'json',
data: [],
success: function(data) {
groupedData = groupData(data);
groupedFilteredData = applyFilters(groupedData);
renderAlerts(groupedFilteredData);
setTimeout(pullUpdates, 30000);
},
failure: function(data) {
alert("Screw up!");
setTimeout(pullUpdates, 30000);
}
})
}
function manualRefresh() {
jQuery.ajax({
url: url,
dataType: 'json',
data: [],
success: function(data) {
groupedData = groupData(data);
groupedFilteredData = applyFilters(groupedData);
renderAlerts(groupedFilteredData);
},
failure: function(data) {
alert("Screw up!");
}
})
}
function groupData(data) {
var unassigned = [];
var assigned = [];
var assigned_to_user = [];
jQuery.each(data, function(i, alarm){
if (alarm.assigned_to === current_user) {
assigned.push(alarm);
assigned_to_user.push(alarm);
} else if (alarm.assigned_to === null) {
unassigned.push(alarm);
} else {
assigned.push(alarm);
}
})
var groupedData = [];
groupedData[0] = ["unassigned", unassigned];
groupedData[1] = ["assigned", assigned];
groupedData[2] = ["assigned_to_user", assigned_to_user];
return groupedData;
}
function renderAlerts(grouped_alerts) {
var formatted_alerts = [];
jQuery.each(grouped_alerts, function(i, alerts_with_group){
var group = alerts_with_group[0];
var alerts = alerts_with_group[1];
var alerts_html = "";
jQuery.each(alerts, function(i, alert) {
alerts_html = alerts_html + renderAlert(alert) + "\n";
});
formatted_alerts.push([group, alerts_html]);
});
jQuery.each(formatted_alerts, function(i, formatted_alert_list) {
group = formatted_alert_list[0];
html = formatted_alert_list[1];
jQuery("#" + group + " ul.event_list").html(html);
jQuery("#" + group + " div.messages").hide();
});
}
function renderAlert(the_alert) {
alertLi = '<li data-severity="' + the_alert.severity + '">' + "\n";
alertLi = alertLi + " <div>\n";
alertLi = alertLi + ' <h1 class="severity_' + the_alert.severity + '">' + the_alert.severity + "</h1>\n";
alertLi = alertLi + " " + the_alert.entity.name + " (" + the_alert.entity.ip_address + ")\n";
alertLi = alertLi + " <p>" + the_alert.message + "</p>\n";
alertLi = alertLi + " " + the_alert.time + ', Count: ' + the_alert.count + "<br />\n";
alertLi = alertLi + " Assigned to: " + the_alert.assigned_to + "<br />\n";
alertLi = alertLi + " Source: " + the_alert.source + "\n";
alertLi = alertLi + " </div>\n";
alertLi = alertLi + "</li>\n";
return alertLi
}
function applyFilters(data) {
var filteredData = [];
jQuery.each(data, function(i, dataset) {
var group = dataset[0];
var alerts = dataset[1];
var minimum_severity = jQuery("#" + group + "_severity option:selected").val();
var filtered_alerts = [];
jQuery.each(alerts, function(i,alert) {
if(severityNumberOf(alert) >= minimum_severity) {
filtered_alerts.push(alert)
}
});
filteredData.push([group, filtered_alerts]);
});
return filteredData;
}
function severityNumberOf(alert) {
switch(alert.severity) {
case "Informational": return 0;break;
case "Warning": return 1;break;
case "Minor": return 2;break;
case "Major": return 3;break;
case "Critical": return 4;break;
default: return null;break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment