mirror of https://github.com/MISP/misp-dashboard
Moved function into section for server script
parent
0e5b03fee6
commit
2ca318b68e
204
server.py
204
server.py
|
@ -114,6 +114,12 @@ def getRemainingPoints(points):
|
||||||
prev = i
|
prev = i
|
||||||
return { 'remainingPts': 0, 'stepPts': cfg.getfloat('CONTRIB' ,'rankMultiplier')**16 }
|
return { 'remainingPts': 0, 'stepPts': cfg.getfloat('CONTRIB' ,'rankMultiplier')**16 }
|
||||||
|
|
||||||
|
###########
|
||||||
|
## ROUTE ##
|
||||||
|
###########
|
||||||
|
|
||||||
|
''' MAIN ROUTE '''
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def index():
|
def index():
|
||||||
ratioCorrection = 88
|
ratioCorrection = 88
|
||||||
|
@ -154,6 +160,108 @@ def contrib():
|
||||||
categ_list_str=categ_list_str
|
categ_list_str=categ_list_str
|
||||||
)
|
)
|
||||||
|
|
||||||
|
''' INDEX '''
|
||||||
|
|
||||||
|
@app.route("/_logs")
|
||||||
|
def logs():
|
||||||
|
return Response(event_stream_log(), mimetype="text/event-stream")
|
||||||
|
|
||||||
|
@app.route("/_maps")
|
||||||
|
def maps():
|
||||||
|
return Response(event_stream_maps(), mimetype="text/event-stream")
|
||||||
|
|
||||||
|
@app.route("/_get_log_head")
|
||||||
|
def getLogHead():
|
||||||
|
return json.dumps(LogItem('').get_head_row())
|
||||||
|
|
||||||
|
def event_stream_log():
|
||||||
|
for msg in subscriber_log.listen():
|
||||||
|
content = msg['data']
|
||||||
|
yield EventMessage(content).to_json()
|
||||||
|
|
||||||
|
def event_stream_maps():
|
||||||
|
for msg in subscriber_map.listen():
|
||||||
|
content = msg['data'].decode('utf8')
|
||||||
|
yield 'data: {}\n\n'.format(content)
|
||||||
|
|
||||||
|
''' GEO '''
|
||||||
|
|
||||||
|
@app.route("/_getTopCoord")
|
||||||
|
def getTopCoord():
|
||||||
|
try:
|
||||||
|
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
||||||
|
except:
|
||||||
|
date = datetime.datetime.now()
|
||||||
|
keyCateg = "GEO_COORD"
|
||||||
|
topNum = 6 # default Num
|
||||||
|
data = getZrange(keyCateg, date, topNum)
|
||||||
|
return jsonify(data)
|
||||||
|
|
||||||
|
@app.route("/_getHitMap")
|
||||||
|
def getHitMap():
|
||||||
|
try:
|
||||||
|
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
||||||
|
except:
|
||||||
|
date = datetime.datetime.now()
|
||||||
|
keyCateg = "GEO_COUNTRY"
|
||||||
|
topNum = -1 # default Num
|
||||||
|
data = getZrange(keyCateg, date, topNum)
|
||||||
|
return jsonify(data)
|
||||||
|
|
||||||
|
def isCloseTo(coord1, coord2):
|
||||||
|
clusterMeter = cfg.getfloat('GEO' ,'clusteringDistance')
|
||||||
|
clusterThres = math.pow(10, len(str(abs(clusterMeter)))-7) #map meter to coord threshold (~ big approx)
|
||||||
|
if abs(float(coord1[0]) - float(coord2[0])) <= clusterThres:
|
||||||
|
if abs(float(coord1[1]) - float(coord2[1])) <= clusterThres:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@app.route("/_getCoordsByRadius")
|
||||||
|
def getCoordsByRadius():
|
||||||
|
dico_coord = {}
|
||||||
|
to_return = []
|
||||||
|
try:
|
||||||
|
dateStart = datetime.datetime.fromtimestamp(float(request.args.get('dateStart')))
|
||||||
|
dateEnd = datetime.datetime.fromtimestamp(float(request.args.get('dateEnd')))
|
||||||
|
centerLat = request.args.get('centerLat')
|
||||||
|
centerLon = request.args.get('centerLon')
|
||||||
|
radius = int(math.ceil(float(request.args.get('radius'))))
|
||||||
|
except:
|
||||||
|
return jsonify(to_return)
|
||||||
|
|
||||||
|
delta = dateEnd - dateStart
|
||||||
|
for i in range(delta.days+1):
|
||||||
|
correctDatetime = dateStart + datetime.timedelta(days=i)
|
||||||
|
date_str = str(correctDatetime.year)+str(correctDatetime.month)+str(correctDatetime.day)
|
||||||
|
keyCateg = 'GEO_RAD'
|
||||||
|
keyname = "{}:{}".format(keyCateg, date_str)
|
||||||
|
res = serv_redis_db.georadius(keyname, centerLon, centerLat, radius, unit='km', withcoord=True)
|
||||||
|
|
||||||
|
#sum up really close coord
|
||||||
|
for data, coord in res:
|
||||||
|
flag_added = False
|
||||||
|
coord = [coord[0], coord[1]]
|
||||||
|
#list all coord
|
||||||
|
for dicoCoordStr in dico_coord.keys():
|
||||||
|
dicoCoord = json.loads(dicoCoordStr)
|
||||||
|
#if curCoord close to coord
|
||||||
|
if isCloseTo(dicoCoord, coord):
|
||||||
|
#add data to dico coord
|
||||||
|
dico_coord[dicoCoordStr].append(data)
|
||||||
|
flag_added = True
|
||||||
|
break
|
||||||
|
# coord not in dic
|
||||||
|
if not flag_added:
|
||||||
|
dico_coord[str(coord)] = [data]
|
||||||
|
|
||||||
|
for dicoCoord, array in dico_coord.items():
|
||||||
|
dicoCoord = json.loads(dicoCoord)
|
||||||
|
to_return.append([array, dicoCoord])
|
||||||
|
|
||||||
|
return jsonify(to_return)
|
||||||
|
|
||||||
|
''' CONTRIB '''
|
||||||
|
|
||||||
@app.route("/_getLastContributor")
|
@app.route("/_getLastContributor")
|
||||||
def getLastContributor():
|
def getLastContributor():
|
||||||
data = [
|
data = [
|
||||||
|
@ -258,101 +366,5 @@ def getOrgRank():
|
||||||
}
|
}
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
@app.route("/_getTopCoord")
|
|
||||||
def getTopCoord():
|
|
||||||
try:
|
|
||||||
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
|
||||||
except:
|
|
||||||
date = datetime.datetime.now()
|
|
||||||
keyCateg = "GEO_COORD"
|
|
||||||
topNum = 6 # default Num
|
|
||||||
data = getZrange(keyCateg, date, topNum)
|
|
||||||
return jsonify(data)
|
|
||||||
|
|
||||||
@app.route("/_getHitMap")
|
|
||||||
def getHitMap():
|
|
||||||
try:
|
|
||||||
date = datetime.datetime.fromtimestamp(float(request.args.get('date')))
|
|
||||||
except:
|
|
||||||
date = datetime.datetime.now()
|
|
||||||
keyCateg = "GEO_COUNTRY"
|
|
||||||
topNum = -1 # default Num
|
|
||||||
data = getZrange(keyCateg, date, topNum)
|
|
||||||
return jsonify(data)
|
|
||||||
|
|
||||||
def isCloseTo(coord1, coord2):
|
|
||||||
clusterMeter = cfg.getfloat('GEO' ,'clusteringDistance')
|
|
||||||
clusterThres = math.pow(10, len(str(abs(clusterMeter)))-7) #map meter to coord threshold (~ big approx)
|
|
||||||
if abs(float(coord1[0]) - float(coord2[0])) <= clusterThres:
|
|
||||||
if abs(float(coord1[1]) - float(coord2[1])) <= clusterThres:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
@app.route("/_getCoordsByRadius")
|
|
||||||
def getCoordsByRadius():
|
|
||||||
dico_coord = {}
|
|
||||||
to_return = []
|
|
||||||
try:
|
|
||||||
dateStart = datetime.datetime.fromtimestamp(float(request.args.get('dateStart')))
|
|
||||||
dateEnd = datetime.datetime.fromtimestamp(float(request.args.get('dateEnd')))
|
|
||||||
centerLat = request.args.get('centerLat')
|
|
||||||
centerLon = request.args.get('centerLon')
|
|
||||||
radius = int(math.ceil(float(request.args.get('radius'))))
|
|
||||||
except:
|
|
||||||
return jsonify(to_return)
|
|
||||||
|
|
||||||
delta = dateEnd - dateStart
|
|
||||||
for i in range(delta.days+1):
|
|
||||||
correctDatetime = dateStart + datetime.timedelta(days=i)
|
|
||||||
date_str = str(correctDatetime.year)+str(correctDatetime.month)+str(correctDatetime.day)
|
|
||||||
keyCateg = 'GEO_RAD'
|
|
||||||
keyname = "{}:{}".format(keyCateg, date_str)
|
|
||||||
res = serv_redis_db.georadius(keyname, centerLon, centerLat, radius, unit='km', withcoord=True)
|
|
||||||
|
|
||||||
#sum up really close coord
|
|
||||||
for data, coord in res:
|
|
||||||
flag_added = False
|
|
||||||
coord = [coord[0], coord[1]]
|
|
||||||
#list all coord
|
|
||||||
for dicoCoordStr in dico_coord.keys():
|
|
||||||
dicoCoord = json.loads(dicoCoordStr)
|
|
||||||
#if curCoord close to coord
|
|
||||||
if isCloseTo(dicoCoord, coord):
|
|
||||||
#add data to dico coord
|
|
||||||
dico_coord[dicoCoordStr].append(data)
|
|
||||||
flag_added = True
|
|
||||||
break
|
|
||||||
# coord not in dic
|
|
||||||
if not flag_added:
|
|
||||||
dico_coord[str(coord)] = [data]
|
|
||||||
|
|
||||||
for dicoCoord, array in dico_coord.items():
|
|
||||||
dicoCoord = json.loads(dicoCoord)
|
|
||||||
to_return.append([array, dicoCoord])
|
|
||||||
|
|
||||||
return jsonify(to_return)
|
|
||||||
|
|
||||||
@app.route("/_logs")
|
|
||||||
def logs():
|
|
||||||
return Response(event_stream_log(), mimetype="text/event-stream")
|
|
||||||
|
|
||||||
@app.route("/_maps")
|
|
||||||
def maps():
|
|
||||||
return Response(event_stream_maps(), mimetype="text/event-stream")
|
|
||||||
|
|
||||||
@app.route("/_get_log_head")
|
|
||||||
def getLogHead():
|
|
||||||
return json.dumps(LogItem('').get_head_row())
|
|
||||||
|
|
||||||
def event_stream_log():
|
|
||||||
for msg in subscriber_log.listen():
|
|
||||||
content = msg['data']
|
|
||||||
yield EventMessage(content).to_json()
|
|
||||||
|
|
||||||
def event_stream_maps():
|
|
||||||
for msg in subscriber_map.listen():
|
|
||||||
content = msg['data'].decode('utf8')
|
|
||||||
yield 'data: {}\n\n'.format(content)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(host='localhost', port=8001, threaded=True)
|
app.run(host='localhost', port=8001, threaded=True)
|
||||||
|
|
Loading…
Reference in New Issue