mirror of https://github.com/MISP/misp-dashboard
Feature: Date range replace fixed date + formatted labels
parent
a5f4306489
commit
b53f9fdf4b
26
server.py
26
server.py
|
@ -491,31 +491,39 @@ def getLoginVSCOntribution():
|
||||||
@app.route("/_getTrendingEvents")
|
@app.route("/_getTrendingEvents")
|
||||||
def getTrendingEvents():
|
def getTrendingEvents():
|
||||||
try:
|
try:
|
||||||
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
dateS = datetime.datetime.fromtimestamp(float(request.args.get('dateS')))
|
||||||
|
dateE = datetime.datetime.fromtimestamp(float(request.args.get('dateE')))
|
||||||
except:
|
except:
|
||||||
date = datetime.datetime.now()
|
dateS = datetime.datetime.now() - datetime.timedelta(days=7)
|
||||||
|
dateE = datetime.datetime.now()
|
||||||
|
|
||||||
data = trendings_helper.getTrendingEvents(date)
|
data = trendings_helper.getTrendingEvents(dateS, dateE)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
@app.route("/_getTrendingCategs")
|
@app.route("/_getTrendingCategs")
|
||||||
def getTrendingCategs():
|
def getTrendingCategs():
|
||||||
try:
|
try:
|
||||||
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
dateS = datetime.datetime.fromtimestamp(float(request.args.get('dateS')))
|
||||||
|
dateE = datetime.datetime.fromtimestamp(float(request.args.get('dateE')))
|
||||||
except:
|
except:
|
||||||
date = datetime.datetime.now()
|
dateS = datetime.datetime.now() - datetime.timedelta(days=7)
|
||||||
|
dateE = datetime.datetime.now()
|
||||||
|
|
||||||
data = trendings_helper.getTrendingCategs(date)
|
|
||||||
|
data = trendings_helper.getTrendingCategs(dateS, dateE)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
@app.route("/_getTrendingTags")
|
@app.route("/_getTrendingTags")
|
||||||
def getTrendingTags():
|
def getTrendingTags():
|
||||||
try:
|
try:
|
||||||
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
dateS = datetime.datetime.fromtimestamp(float(request.args.get('dateS')))
|
||||||
|
dateE = datetime.datetime.fromtimestamp(float(request.args.get('dateE')))
|
||||||
except:
|
except:
|
||||||
date = datetime.datetime.now()
|
dateS = datetime.datetime.now() - datetime.timedelta(days=7)
|
||||||
|
dateE = datetime.datetime.now()
|
||||||
|
|
||||||
data = trendings_helper.getTrendingTags(date)
|
|
||||||
|
data = trendings_helper.getTrendingTags(dateS, dateE)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* VARS */
|
/* VARS */
|
||||||
var date;
|
var dateStart;
|
||||||
|
var dateEnd;
|
||||||
var eventPie = ["#eventPie"];
|
var eventPie = ["#eventPie"];
|
||||||
var eventLine = ["#eventLine"];
|
var eventLine = ["#eventLine"];
|
||||||
var categPie = ["#categPie"];
|
var categPie = ["#categPie"];
|
||||||
|
@ -36,10 +37,12 @@ var lineChartOption = {
|
||||||
var pieChartOption = {
|
var pieChartOption = {
|
||||||
series: {
|
series: {
|
||||||
pie: {
|
pie: {
|
||||||
innerRadius: 0.5,
|
innerRadius: 0.2,
|
||||||
show: true,
|
show: true,
|
||||||
label: {
|
label: {
|
||||||
show: false,
|
show: true,
|
||||||
|
radius: 1,
|
||||||
|
formatter: innerPieLabelFormatter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -50,6 +53,15 @@ var pieChartOption = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FUNCTIONS */
|
/* FUNCTIONS */
|
||||||
|
function innerPieLabelFormatter(label, series) {
|
||||||
|
var count = series.data[0][1];
|
||||||
|
return '<div '
|
||||||
|
+ 'style="font-size:8pt;text-align:inherit;padding:2px;">'
|
||||||
|
+ '<a class="tagElem" style="background-color: '+ 'white' + ';'
|
||||||
|
+ 'color: ' + 'black' + ';"> ' + count + '</a>'
|
||||||
|
+ '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
function getTextColour(rgb) {
|
function getTextColour(rgb) {
|
||||||
var r = parseInt('0x'+rgb.substring(0,2));
|
var r = parseInt('0x'+rgb.substring(0,2));
|
||||||
var g = parseInt('0x'+rgb.substring(2,4));
|
var g = parseInt('0x'+rgb.substring(2,4));
|
||||||
|
@ -87,11 +99,26 @@ function updatePie(pie, data) {
|
||||||
if (data === undefined || data.length == 0 || (data[0] == 0 && data[1] == 0)) {
|
if (data === undefined || data.length == 0 || (data[0] == 0 && data[1] == 0)) {
|
||||||
toPlot = [{ label: 'No data', data: 100 }];
|
toPlot = [{ label: 'No data', data: 100 }];
|
||||||
} else {
|
} else {
|
||||||
|
toPlot_obj = {}
|
||||||
|
for (var arr of data) {
|
||||||
|
var date = arr[0];
|
||||||
|
var items = arr[1]
|
||||||
|
for(var item_arr of items) {
|
||||||
|
var item = item_arr[0];
|
||||||
|
var count = item_arr[1];
|
||||||
|
if(toPlot_obj[item] === undefined)
|
||||||
|
toPlot_obj[item] = 0;
|
||||||
|
toPlot_obj[item] += count;
|
||||||
|
}
|
||||||
|
}
|
||||||
toPlot = [];
|
toPlot = [];
|
||||||
for (var item of data) {
|
for (var item in toPlot_obj) {
|
||||||
toPlot.push({label: item[0], data: item[1]});
|
if (toPlot_obj.hasOwnProperty(item)) {
|
||||||
|
toPlot.push({label: item, data: toPlot_obj[item]})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pieWidget === undefined)) {
|
if (!(pieWidget === undefined)) {
|
||||||
pieWidget.setData(toPlot);
|
pieWidget.setData(toPlot);
|
||||||
pieWidget.setupGrid();
|
pieWidget.setupGrid();
|
||||||
|
@ -149,14 +176,15 @@ function updateLine(line, data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updatePieLine(pie, line, url) {
|
function updatePieLine(pie, line, url) {
|
||||||
$.getJSON( url+"?date="+parseInt(date.getTime()/1000), function( data ) {
|
$.getJSON( url+"?dateS="+parseInt(dateStart.getTime()/1000)+"&dateE="+parseInt(dateEnd.getTime()/1000), function( data ) {
|
||||||
updatePie(pie, data[0][1]);
|
updatePie(pie, data);
|
||||||
updateLine(line, data);
|
updateLine(line, data);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function dateChanged() {
|
function dateChanged() {
|
||||||
date = datePickerWidget.datepicker( "getDate" );
|
dateStart = datePickerWidgetStart.datepicker( "getDate" );
|
||||||
|
dateEnd = datePickerWidgetEnd.datepicker( "getDate" );
|
||||||
updatePieLine(eventPie, eventLine, url_getTrendingEvent)
|
updatePieLine(eventPie, eventLine, url_getTrendingEvent)
|
||||||
updatePieLine(categPie, categLine, url_getTrendingCateg)
|
updatePieLine(categPie, categLine, url_getTrendingCateg)
|
||||||
updatePieLine(tagPie, tagLine, url_getTrendingTag)
|
updatePieLine(tagPie, tagLine, url_getTrendingTag)
|
||||||
|
@ -164,9 +192,14 @@ function dateChanged() {
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
datePickerWidget = $( "#datepicker" ).datepicker(datePickerOptions);
|
datePickerWidgetStart = $( "#datepickerStart" ).datepicker(datePickerOptions);
|
||||||
datePickerWidget.datepicker("setDate", new Date());
|
var lastWeekDate = new Date();
|
||||||
date = datePickerWidget.datepicker( "getDate" );
|
lastWeekDate.setDate(lastWeekDate.getDate()-7);
|
||||||
|
datePickerWidgetStart.datepicker("setDate", lastWeekDate);
|
||||||
|
dateStart = datePickerWidgetStart.datepicker( "getDate" );
|
||||||
|
datePickerWidgetEnd = $( "#datepickerEnd" ).datepicker(datePickerOptions);
|
||||||
|
datePickerWidgetEnd.datepicker("setDate", new Date());
|
||||||
|
dateEnd = datePickerWidgetEnd.datepicker( "getDate" );
|
||||||
|
|
||||||
updatePieLine(eventPie, eventLine, url_getTrendingEvent)
|
updatePieLine(eventPie, eventLine, url_getTrendingEvent)
|
||||||
updatePieLine(categPie, categLine, url_getTrendingCateg)
|
updatePieLine(categPie, categLine, url_getTrendingCateg)
|
||||||
|
|
|
@ -62,6 +62,10 @@
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.panel-body {
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.col-lg-6 {
|
.col-lg-6 {
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
|
@ -112,7 +116,11 @@ small {
|
||||||
<li><a href="{{ url_for('trendings') }}">MISP Trendings</a></li>
|
<li><a href="{{ url_for('trendings') }}">MISP Trendings</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class='leftSepa textTopHeader'>
|
<div class='leftSepa textTopHeader'>
|
||||||
<strong>Date: <input type="text" id="datepicker" size="30" style="margin-bottom: 5px;"></strong>
|
<strong>Date:
|
||||||
|
<input type="text" id="datepickerStart" size="30" style="margin-bottom: 5px;">
|
||||||
|
<strong> to </strong>
|
||||||
|
<input type="text" id="datepickerEnd" size="30" style="margin-bottom: 5px;">
|
||||||
|
</strong>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.navbar-header -->
|
<!-- /.navbar-header -->
|
||||||
|
@ -133,7 +141,6 @@ small {
|
||||||
</div>
|
</div>
|
||||||
<div id="panelbody" class="panel-body" style="">
|
<div id="panelbody" class="panel-body" style="">
|
||||||
<div id="eventPie" style="width:100%; height: 15vh;"></div>
|
<div id="eventPie" style="width:100%; height: 15vh;"></div>
|
||||||
<div style="height: 10px;"></div>
|
|
||||||
<div id="eventLine" style="width:100%; height: 20vh;"></div>
|
<div id="eventLine" style="width:100%; height: 20vh;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.panel-body -->
|
</div><!-- /.panel-body -->
|
||||||
|
@ -146,7 +153,6 @@ small {
|
||||||
</div>
|
</div>
|
||||||
<div id="panelbody" class="panel-body" style="">
|
<div id="panelbody" class="panel-body" style="">
|
||||||
<div id="categPie" style="width:100%; height: 15vh;"></div>
|
<div id="categPie" style="width:100%; height: 15vh;"></div>
|
||||||
<div style="height: 10px;"></div>
|
|
||||||
<div id="categLine" style="width:100%; height: 20vh;"></div>
|
<div id="categLine" style="width:100%; height: 20vh;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.panel-body -->
|
</div><!-- /.panel-body -->
|
||||||
|
@ -159,7 +165,6 @@ small {
|
||||||
</div>
|
</div>
|
||||||
<div id="panelbody" class="panel-body" style="">
|
<div id="panelbody" class="panel-body" style="">
|
||||||
<div id="tagPie" style="width:100%; height: 15vh;"></div>
|
<div id="tagPie" style="width:100%; height: 15vh;"></div>
|
||||||
<div style="height: 10px;"></div>
|
|
||||||
<div id="tagLine" style="width:100%; height: 20vh;"></div>
|
<div id="tagLine" style="width:100%; height: 20vh;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.panel-body -->
|
</div><!-- /.panel-body -->
|
||||||
|
|
Loading…
Reference in New Issue