mirror of https://github.com/MISP/misp-dashboard
Working top map location for now()
parent
bffca0c20c
commit
7bc42377a3
39
server.py
39
server.py
|
@ -1,11 +1,12 @@
|
|||
#!/usr/bin/env python3.5
|
||||
from flask import Flask, render_template, Response
|
||||
from flask import Flask, render_template, request, Response, jsonify
|
||||
import json
|
||||
import redis
|
||||
import random
|
||||
import configparser
|
||||
from time import gmtime as now
|
||||
from time import sleep, strftime
|
||||
import datetime
|
||||
import os
|
||||
|
||||
configfile = os.path.join(os.environ['VIRTUAL_ENV'], '../config.cfg')
|
||||
|
@ -22,6 +23,10 @@ redis_server_map = redis.StrictRedis(
|
|||
host=cfg.get('RedisMap', 'host'),
|
||||
port=cfg.getint('RedisMap', 'port'),
|
||||
db=cfg.getint('RedisMap', 'db'))
|
||||
serv_redis_db = redis.StrictRedis(
|
||||
host=cfg.get('RedisDB', 'host'),
|
||||
port=cfg.getint('RedisDB', 'port'),
|
||||
db=cfg.getint('RedisDB', 'db'))
|
||||
|
||||
subscriber_log = redis_server_log.pubsub(ignore_subscribe_messages=True)
|
||||
subscriber_log.psubscribe(cfg.get('RedisLog', 'channel'))
|
||||
|
@ -86,6 +91,15 @@ class EventMessage():
|
|||
to_ret = { 'log': self.feed, 'feedName': self.feedName, 'zmqName': self.zmqName }
|
||||
return 'data: {}\n\n'.format(json.dumps(to_ret))
|
||||
|
||||
def getZrange(keyCateg, wantedDate, topNum):
|
||||
aDateTime = datetime.datetime.now()
|
||||
|
||||
date_str = str(aDateTime.year)+str(aDateTime.month)+str(aDateTime.day)
|
||||
keyname = "{}:{}".format(keyCateg, date_str)
|
||||
data = serv_redis_db.zrange(keyname, 0, 5, desc=True, withscores=True)
|
||||
return data
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
ratioCorrection = 88
|
||||
|
@ -111,6 +125,29 @@ def index():
|
|||
def geo():
|
||||
return render_template('geo.html')
|
||||
|
||||
@app.route("/_getTopCoord")
|
||||
def getTopCoord():
|
||||
try:
|
||||
dayNum = int(request.args.get('dayNum'))
|
||||
except:
|
||||
dayNum = 1
|
||||
keyCateg = "GEO_COORD"
|
||||
topNum = 6 # default Num
|
||||
data = getZrange(keyCateg, dayNum, topNum)
|
||||
data = [ [record[0].decode('utf8'), record[1]] for record in data ]
|
||||
return jsonify(data)
|
||||
|
||||
@app.route("/_getHitMap")
|
||||
def getHitMap():
|
||||
try:
|
||||
dayNum = int(request.args.get('dayNum'))
|
||||
except:
|
||||
dayNum = 1
|
||||
keyCateg = "GEO_COUNTRY"
|
||||
topNum = -1 # default Num
|
||||
data = getZrange(keyCateg, dayNum, topNum)
|
||||
return jsonify(data)
|
||||
|
||||
@app.route("/_logs")
|
||||
def logs():
|
||||
return Response(event_stream_log(), mimetype="text/event-stream")
|
||||
|
|
|
@ -86,7 +86,7 @@ small {
|
|||
<div class="col-lg-6">
|
||||
<div class="panel panel-default" style="">
|
||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||
<b id="topMap1Header">No map </b>
|
||||
<b id="topMap1Header">1. Top location</b>
|
||||
</div>
|
||||
<div id="panelbody" class="panel-body" style="">
|
||||
<div id="topMap1" style="width:100%; height: calc(75vh / 3);"></div>
|
||||
|
@ -95,7 +95,7 @@ small {
|
|||
|
||||
<div class="panel panel-default" style="">
|
||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||
<b id="topMap3Header">No map </b>
|
||||
<b id="topMap3Header">3. Top location</b>
|
||||
</div>
|
||||
<div id="panelbody" class="panel-body" style="">
|
||||
<div id="topMap3" style="width:100%; height: calc(75vh / 3);"></div>
|
||||
|
@ -104,7 +104,7 @@ small {
|
|||
|
||||
<div class="panel panel-default" style="">
|
||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||
<b id="topMap5Header">No map </b>
|
||||
<b id="topMap5Header">5. Top location</b>
|
||||
</div>
|
||||
<div id="panelbody" class="panel-body" style="">
|
||||
<div id="topMap5" style="width:100%; height: calc(75vh / 3);"></div>
|
||||
|
@ -115,7 +115,7 @@ small {
|
|||
<div class="col-lg-6">
|
||||
<div class="panel panel-default" style="">
|
||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||
<b id="topMap2Header">No map </b>
|
||||
<b id="topMap2Header">2. Top location</b>
|
||||
</div>
|
||||
<div id="panelbody" class="panel-body" style="">
|
||||
<div id="topMap2" style="width:100%; height: calc(75vh / 3);"></div>
|
||||
|
@ -124,7 +124,7 @@ small {
|
|||
|
||||
<div class="panel panel-default" style="">
|
||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||
<b id="topMap4Header">No map </b>
|
||||
<b id="topMap4Header">4. Top location</b>
|
||||
</div>
|
||||
<div id="panelbody" class="panel-body" style="">
|
||||
<div id="topMap4" style="width:100%; height: calc(75vh / 3);"></div>
|
||||
|
@ -133,7 +133,7 @@ small {
|
|||
|
||||
<div class="panel panel-default" style="">
|
||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||
<b id="topMap6Header">No map </b>
|
||||
<b id="topMap6Header">6. Top location</b>
|
||||
</div>
|
||||
<div id="panelbody" class="panel-body" style="">
|
||||
<div id="topMap6" style="width:100%; height: calc(75vh / 3);"></div>
|
||||
|
@ -188,6 +188,7 @@ small {
|
|||
|
||||
const OSMURL='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
|
||||
const OSMATTRIB='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors';
|
||||
var ZOOMLEVEL = 17;
|
||||
var allOpenStreetMap = {};
|
||||
|
||||
for(var i=1; i<7; i++) {
|
||||
|
@ -195,7 +196,6 @@ small {
|
|||
new L.TileLayer(OSMURL, {minZoom: 0, maxZoom: 18}).addTo(allOpenStreetMap[i]);
|
||||
}
|
||||
|
||||
|
||||
var vectorMapConfig = {
|
||||
map: 'world_mill',
|
||||
markers: [],
|
||||
|
@ -217,8 +217,34 @@ small {
|
|||
},
|
||||
}
|
||||
|
||||
$('#worldMap').vectorMap(vectorMapConfig);
|
||||
worldMapObj = $("#worldMap").vectorMap('get','mapObject');
|
||||
|
||||
function updateTopMaps(dayNum) {
|
||||
$.getJSON("{{ url_for('getTopCoord') }}?dayNum="+dayNum, function(list){
|
||||
for(var i=0; i<6 && i<list.length; i++) {
|
||||
coordJson = JSON.parse(list[i][0]);
|
||||
allOpenStreetMap[i+1].flyTo([coordJson.lat, coordJson.lon], ZOOMLEVEL);
|
||||
var marker = L.marker([coordJson.lat, coordJson.lon]).addTo(allOpenStreetMap[i+1]);
|
||||
marker.bindPopup('lat: '+coordJson.lat+', lon: '+coordJson.lon+' - '+list[i][1]).openPopup();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function updateWorldMap(dateStart, dateEnd) {
|
||||
$.getJSON("{{ url_for('getHitMap') }}?dayNum="+dayNum, function(list){
|
||||
for(var i=0; i<list.length; i++) {
|
||||
coordJson = JSON.parse(list[i][0]);
|
||||
allOpenStreetMap[i+1].flyTo([coordJson.lat, coordJson.lon], ZOOMLEVEL);
|
||||
var marker = L.marker([coordJson.lat, coordJson.lon]).addTo(allOpenStreetMap[i+1]);
|
||||
marker.bindPopup('lat: '+coordJson.lat+', lon: '+coordJson.lon+' - '+list[i][1]).openPopup();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
$('#worldMap').vectorMap(vectorMapConfig);
|
||||
worldMapObj = $("#worldMap").vectorMap('get','mapObject');
|
||||
updateTopMaps(1);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
|
|
Loading…
Reference in New Issue