312 lines
7.5 KiB
JavaScript
312 lines
7.5 KiB
JavaScript
var refreshTimer = null;
|
|
var isFetching = null;
|
|
var storedEvents = new Array();
|
|
var notVisited = {};
|
|
|
|
$(window).on('load', function() {
|
|
initilise();
|
|
// Wait some ms to throw main function
|
|
var delay = setTimeout(main, 100);
|
|
resetInterval();
|
|
});
|
|
|
|
function fetchEvents() {
|
|
return storedEvents;
|
|
}
|
|
|
|
function fetchNotVisited() {
|
|
return notVisited;
|
|
}
|
|
|
|
function removeNotVisited(eventId) {
|
|
if (notVisited[eventId] === true) delete notVisited[eventId];
|
|
}
|
|
|
|
function main() {
|
|
|
|
chrome.runtime.sendMessage({text: "FETCH_EVENTS"});
|
|
// Do not fetch if is fetching now
|
|
if (isFetching) return;
|
|
isFetching = true;
|
|
|
|
var feedUrl = localStorage["ip_address"]+'/include/api.php?op=get&op2=events&return_type=json&apipass='+localStorage["api_pass"]+'&user='+localStorage["user_name"]+'&pass='+localStorage["pass"];
|
|
|
|
req = new XMLHttpRequest();
|
|
req.onload = handleResponse;
|
|
req.onerror = handleError;
|
|
req.open("GET", feedUrl, true);
|
|
req.withCredentials = true
|
|
req.send(null);
|
|
}
|
|
|
|
function handleError() {
|
|
chrome.runtime.sendMessage({text: "FETCH_EVENTS_URL_ERROR"});
|
|
isFetching = false;
|
|
}
|
|
|
|
function handleResponse() {
|
|
var doc = req.responseText;
|
|
if (doc=="auth error") {
|
|
chrome.runtime.sendMessage({text: "FETCH_EVENTS_URL_ERROR"});
|
|
} else {
|
|
var n = doc.search("404 Not Found");
|
|
if (n>0) {
|
|
chrome.runtime.sendMessage({text: "FETCH_EVENTS_DATA_ERROR"});
|
|
} else {
|
|
getEvents(doc);
|
|
chrome.runtime.sendMessage({text: "FETCH_EVENTS_SUCCESS"});
|
|
}
|
|
}
|
|
isFetching = false;
|
|
}
|
|
|
|
function getEvents(reply){
|
|
var fetchedEvents = parseReplyEvents(reply);
|
|
|
|
// If there is no events requested, mark all as visited
|
|
if (storedEvents.length == 0) {
|
|
notVisited = {};
|
|
storedEvents = fetchedEvents;
|
|
return;
|
|
}
|
|
|
|
// Discriminate the new events
|
|
newEvents=fetchNewEvents(fetchedEvents,storedEvents);
|
|
var newNotVisited = {};
|
|
var notVisitedCount = 0;
|
|
|
|
// Check if popup is displayed to make some actions
|
|
var views = chrome.extension.getViews({ type: "popup" });
|
|
for(var k=0;k<newEvents.length;k++){
|
|
newNotVisited[newEvents[k]['id']] = true;
|
|
if (views.length == 0) {
|
|
notVisitedCount++;
|
|
displayNotification (newEvents[k])
|
|
alertsSound(newEvents[k]);
|
|
}
|
|
}
|
|
|
|
// Make that the old events marked as not visited remains with the
|
|
// same status
|
|
for(var k=0;k<fetchedEvents.length;k++){
|
|
if (notVisited[fetchedEvents[k]['id']] === true) {
|
|
newNotVisited[fetchedEvents[k]['id']] = true;
|
|
notVisitedCount++;
|
|
}
|
|
}
|
|
notVisited = newNotVisited;
|
|
|
|
// Update the number
|
|
localStorage["new_events"] = (views.length == 0) ? notVisitedCount : 0;
|
|
updateBadge();
|
|
|
|
// Store the requested events
|
|
storedEvents = fetchedEvents;
|
|
}
|
|
|
|
function updateBadge() {
|
|
if (localStorage["new_events"] != 0) {
|
|
chrome.browserAction.setBadgeBackgroundColor({color:[0,200,0,255]});
|
|
chrome.browserAction.setBadgeText({ text: localStorage["new_events"] });
|
|
} else {
|
|
chrome.browserAction.setBadgeText({ text: "" });
|
|
}
|
|
}
|
|
|
|
function fetchNewEvents(A,B){
|
|
var arrDiff = new Array();
|
|
for(var i = 0; i < A.length; i++) {
|
|
var id = false;
|
|
for(var j = 0; j < B.length; j++) {
|
|
if(A[i]['id'] == B[j]['id']) {
|
|
id = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!id) {
|
|
arrDiff.push(A[i]);
|
|
}
|
|
}
|
|
return arrDiff;
|
|
}
|
|
|
|
|
|
function parseReplyEvents (reply) {
|
|
|
|
// Split the API response
|
|
var data = JSON.parse(reply)
|
|
var e_array = JSON.parse(reply).data;
|
|
|
|
// Form a properly object
|
|
var fetchedEvents=new Array();
|
|
for(var i=0;i<e_array.length;i++){
|
|
var event=e_array[i];
|
|
fetchedEvents.push({
|
|
'id' : event.id_evento,
|
|
'agent_name' : event.agent_name,
|
|
'agent' : event.id_agente,
|
|
'date' : event.timestamp,
|
|
'title' : event.evento,
|
|
'module' : event.id_agentmodule,
|
|
'type' : event.event_type,
|
|
'source' : event.source,
|
|
'severity' : event.criticity_name,
|
|
'visited' : false
|
|
});
|
|
}
|
|
// Return the events
|
|
return fetchedEvents;
|
|
}
|
|
|
|
function alertsSound(pEvent){
|
|
if(localStorage["sound_alert"]!="on"){
|
|
return;
|
|
}
|
|
|
|
switch (pEvent['severity']) {
|
|
case "Critical":
|
|
playSound(localStorage["critical"]);
|
|
break;
|
|
case "Informational":
|
|
playSound(localStorage["informational"]);
|
|
break;
|
|
case "Maintenance":
|
|
playSound(localStorage["maintenance"]);
|
|
break;
|
|
case "Normal":
|
|
playSound(localStorage["normal"]);
|
|
break;
|
|
case "Warning":
|
|
playSound(localStorage["warning"]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function displayNotification (pEvent) {
|
|
|
|
// Check if the user is okay to get some notification
|
|
if (Notification.permission === "granted") {
|
|
// If it's okay create a notification
|
|
getNotification(pEvent);
|
|
}
|
|
|
|
// Otherwise, we need to ask the user for permission
|
|
// Note, Chrome does not implement the permission static property
|
|
// So we have to check for NOT 'denied' instead of 'default'
|
|
else if (Notification.permission !== 'denied') {
|
|
Notification.requestPermission(function (permission) {
|
|
// Whatever the user answers, we make sure we store the information
|
|
if(!('permission' in Notification)) {
|
|
Notification.permission = permission;
|
|
}
|
|
|
|
// If the user is okay, let's create a notification
|
|
if (permission === "granted") getNotification(pEvent);
|
|
});
|
|
}
|
|
}
|
|
|
|
function getNotification(pEvent){
|
|
|
|
// Build the event text
|
|
var even = pEvent['type'];
|
|
if (pEvent['source'] != '') even += " : " + pEvent['source'];
|
|
even += ". Event occured at " + pEvent['date'];
|
|
if(pEvent['module'] != 0) even += " in the module with Id "+ pEvent['module'];
|
|
even += ".";
|
|
|
|
var url = (pEvent['agent'] == 0)
|
|
? localStorage["ip_address"]+"/index.php?sec=eventos&sec2=operation/events/events"
|
|
: localStorage["ip_address"]+"/index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=" + pEvent['agent'];
|
|
|
|
var notification = new Notification(
|
|
pEvent['title'],
|
|
{
|
|
body: even,
|
|
icon: "images/icon.png"
|
|
}
|
|
);
|
|
|
|
// Add the link
|
|
notification.onclick = function (event) {
|
|
event.preventDefault();
|
|
window.open(url, '_blank');
|
|
}
|
|
|
|
// Close notification after 10 secs
|
|
setTimeout(function() {notification.close()}, 10000);
|
|
}
|
|
|
|
function resetInterval () {
|
|
if (refreshTimer) clearInterval(refreshTimer);
|
|
refreshTimer = setInterval(main, localStorage["refresh"]*1000);
|
|
}
|
|
|
|
function initilise(){
|
|
|
|
if (isFetching == null) isFetching = false;
|
|
if(localStorage["ip_address"]==undefined){
|
|
localStorage["ip_address"]="http://firefly.artica.es/pandora_demo";
|
|
}
|
|
|
|
if(localStorage["api_pass"]==undefined){
|
|
localStorage["api_pass"]="doreik0";
|
|
}
|
|
|
|
if(localStorage["user_name"]==undefined){
|
|
localStorage["user_name"]="demo";
|
|
}
|
|
|
|
if(localStorage["pass"]==undefined){
|
|
localStorage["pass"]="demo";
|
|
}
|
|
if(localStorage["critical"]==null){
|
|
localStorage["critical"]="11";
|
|
}
|
|
if(localStorage["informational"]==null){
|
|
localStorage["informational"]="1";
|
|
}
|
|
if(localStorage["maintenance"]==null){
|
|
localStorage["maintenance"]="10";
|
|
}
|
|
if(localStorage["normal"]==null){
|
|
localStorage["normal"]="6";
|
|
}
|
|
if(localStorage["warning"]==null){
|
|
localStorage["warning"]="2";
|
|
}
|
|
if(localStorage["events"]==null){
|
|
localStorage["events"]=20;
|
|
}
|
|
if(localStorage["refresh"]==null){
|
|
localStorage["refresh"]="10";
|
|
}
|
|
if(localStorage["ip_address"]==null){
|
|
localStorage["ip_address"]="http://firefly.artica.es/pandora_demo";
|
|
}
|
|
|
|
if(localStorage["api_pass"]==null){
|
|
localStorage["api_pass"]="doreik0";
|
|
}
|
|
|
|
if(localStorage["user_name"]==null){
|
|
localStorage["user_name"]="demo";
|
|
}
|
|
|
|
if(localStorage["pass"]==null){
|
|
localStorage["pass"]="demo";
|
|
}
|
|
if(localStorage["sound_alert"]==null){
|
|
localStorage["sound_alert"]="on";
|
|
}
|
|
if(localStorage["changed"]==null){
|
|
localStorage["changed"]="false";
|
|
}
|
|
if(localStorage["new_events"]==null){
|
|
localStorage["new_events"]=parseInt(localStorage["events"]);
|
|
}
|
|
if(localStorage["error"]==null) {
|
|
localStorage["error"] = true;
|
|
}
|
|
}
|