mirror of https://github.com/MISP/misp-dashboard
151 lines
3.9 KiB
JavaScript
151 lines
3.9 KiB
JavaScript
|
|
var updateInterval = 30; // 30ms
|
|
var numPoint = 10;
|
|
var emptyArray = [];
|
|
for(i=0; i<numPoint; i++) {
|
|
emptyArray.push(0);
|
|
}
|
|
var data = { 'undefined': { label: 'undefined', data: [] } };
|
|
var curMax = { 'undefined': [] };
|
|
var optionsGraph = {
|
|
series: {
|
|
shadowSize: 0 ,
|
|
lines: { fill: true, fillColor: { colors: [ { opacity: 1 }, { opacity: 0.1 } ] }}
|
|
},
|
|
yaxis: { min: 0, max: 20 },
|
|
xaxis: { ticks: [[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], [10, 10]] },
|
|
grid: {
|
|
tickColor: "#dddddd",
|
|
borderWidth: 0
|
|
},
|
|
legend: {
|
|
show: true,
|
|
position: "nw"
|
|
}
|
|
};
|
|
|
|
$(document).ready(function () {
|
|
createHead(function() {
|
|
if (!!window.EventSource) {
|
|
var source = new EventSource(urlForLogs);
|
|
|
|
source.onopen = function(){
|
|
//console.log('connection is opened. '+source.readyState);
|
|
};
|
|
|
|
source.onerror = function(){
|
|
//console.log('error: '+source.readyState);
|
|
};
|
|
|
|
source.onmessage = function(event) {
|
|
var json = jQuery.parseJSON( event.data );
|
|
updateLogTable(json.log);
|
|
//updateChartData(json.chart);
|
|
};
|
|
|
|
} else {
|
|
console.log("No event source");
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
//var plot = $.plot("#placeholder", [ [] ], optionsGraph);
|
|
//updateChart()
|
|
|
|
function updateChart() {
|
|
plot.setData(data);
|
|
plot.getOptions().yaxes[0].max = curMax[dataset];
|
|
plot.setupGrid();
|
|
plot.draw();
|
|
setTimeout(update, updateInterval);
|
|
}
|
|
|
|
function updateChartData(feed) {
|
|
if (feed.length == 0)
|
|
return;
|
|
|
|
for (feedName in feed) {
|
|
console.log(feedName.name);
|
|
if (data[feedName.name] === undefined) {
|
|
data[feedName.name] = {};
|
|
}
|
|
data[feedName.name].data = slide(data[feedName.name].data, feedName.data)
|
|
}
|
|
|
|
}
|
|
|
|
function updateLogTable(log) {
|
|
if (log.length == 0)
|
|
return;
|
|
|
|
// Create new row
|
|
tableBody = document.getElementById('table_log_body');
|
|
createRow(tableBody, log);
|
|
|
|
// Remove old row
|
|
var logSel = document.getElementById("log_select");
|
|
if (tableBody.rows.length > logSel.options[logSel.options.selectedIndex].value){
|
|
while (tableBody.rows.length != logSel.options[logSel.options.selectedIndex].value){
|
|
tableBody.deleteRow(0);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function slide(orig, newData) {
|
|
var slided = orig;
|
|
slided.slice(newData.length);
|
|
slided.concat(newData);
|
|
return slided
|
|
}
|
|
|
|
function createRow(tableBody, log) {
|
|
var tr = document.createElement('TR');
|
|
var action = document.createElement('TD');
|
|
|
|
for (var key in log) {
|
|
if (log.hasOwnProperty(key)) {
|
|
var td = document.createElement('TD');
|
|
td.appendChild(document.createTextNode(log[key]));
|
|
tr.appendChild(td);
|
|
}
|
|
}
|
|
|
|
// level
|
|
if( log.level == "INFO" ){
|
|
tr.className = "info";
|
|
}
|
|
else if ( log.level == "WARNING" ){
|
|
tr.className = "warning";
|
|
}
|
|
else if ( log.level == "CRITICAL"){
|
|
tr.className = "danger"
|
|
}
|
|
|
|
// action
|
|
action.appendChild(document.createTextNode("ACTION"));
|
|
tr.appendChild(action);
|
|
|
|
tableBody.appendChild(tr);
|
|
|
|
}
|
|
|
|
function createHead(callback) {
|
|
if (document.getElementById('table_log_head').childNodes.length > 1)
|
|
return
|
|
$.getJSON( urlForHead, function( data ) {
|
|
var tr = document.createElement('TR');
|
|
for (head of data) {
|
|
var th = document.createElement('TH');
|
|
th.appendChild(document.createTextNode(head));
|
|
tr.appendChild(th);
|
|
}
|
|
var action = document.createElement('TH');
|
|
action.appendChild(document.createTextNode("Actions"));
|
|
tr.appendChild(action);
|
|
document.getElementById('table_log_head').appendChild(tr);
|
|
callback();
|
|
});
|
|
}
|