mirror of https://github.com/MISP/misp-dashboard
Replaced loginOccurence by contribution/login
parent
66fe81b064
commit
e0d155564f
|
@ -467,7 +467,7 @@ def getTopOrglogin():
|
||||||
except:
|
except:
|
||||||
date = datetime.datetime.now()
|
date = datetime.datetime.now()
|
||||||
|
|
||||||
data = users_helper.getTopOrglogin(date)
|
data = users_helper.getTopOrglogin(date, maxNum=12)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
@app.route("/_getLoginVSCOntribution")
|
@app.route("/_getLoginVSCOntribution")
|
||||||
|
|
|
@ -128,7 +128,7 @@ small {
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div class="panel panel-default" style="">
|
<div class="panel panel-default" style="">
|
||||||
<div class="panel-heading bg-info" style="font-weight: bold;">
|
<div class="panel-heading bg-info" style="font-weight: bold;">
|
||||||
<b>Top organisation login</b>
|
<b>Top organisation contribution/login (last 31 days)</b>
|
||||||
<strong class='leftSepa textTopHeader' style="float: none; padding: 11px;">Dates:
|
<strong class='leftSepa textTopHeader' style="float: none; padding: 11px;">Dates:
|
||||||
<input type="text" id="datepickerOrgLogin" size="10" style="">
|
<input type="text" id="datepickerOrgLogin" size="10" style="">
|
||||||
</strong>
|
</strong>
|
||||||
|
@ -251,8 +251,8 @@ small {
|
||||||
var date = datePickerWidgetApi.datepicker( "getDate" );
|
var date = datePickerWidgetApi.datepicker( "getDate" );
|
||||||
$.getJSON( "{{ url_for('getLoginVSCOntribution') }}"+"?date="+date.getTime()/1000, function( data ) {
|
$.getJSON( "{{ url_for('getLoginVSCOntribution') }}"+"?date="+date.getTime()/1000, function( data ) {
|
||||||
toPlot = [
|
toPlot = [
|
||||||
{label: 'Has contributed during the day', data: data[0], color: '#4da74d' },
|
{label: 'Login with contribution during the day', data: data[0], color: '#4da74d' },
|
||||||
{label: 'Has not contributed during the day', data:data[1], color: '#cb4b4b' }
|
{label: 'Login without contribution during the day', data:data[1], color: '#cb4b4b' }
|
||||||
];
|
];
|
||||||
if (data[0] == 0 && data[1] == 0) {
|
if (data[0] == 0 && data[1] == 0) {
|
||||||
toPlot = [{ label: 'No data', data: 100 }];
|
toPlot = [{ label: 'No data', data: 100 }];
|
||||||
|
@ -314,7 +314,6 @@ small {
|
||||||
|
|
||||||
var datePickerOptions = {
|
var datePickerOptions = {
|
||||||
showOn: "button",
|
showOn: "button",
|
||||||
// minDate: -31,
|
|
||||||
maxDate: 0,
|
maxDate: 0,
|
||||||
buttonImage: urlIconCalendar,
|
buttonImage: urlIconCalendar,
|
||||||
buttonImageOnly: true,
|
buttonImageOnly: true,
|
||||||
|
|
|
@ -26,17 +26,59 @@ class Users_helper:
|
||||||
timestamps = [int(timestamp.decode('utf8')) for timestamp in timestamps]
|
timestamps = [int(timestamp.decode('utf8')) for timestamp in timestamps]
|
||||||
return timestamps
|
return timestamps
|
||||||
|
|
||||||
def getTopOrglogin(self, date, topNum=12):
|
def getOrgslogin(self, date, topNum=12):
|
||||||
keyname = "LOGIN_ORG:{}".format(util.getDateStrFormat(date))
|
keyname = "LOGIN_ORG:{}".format(util.getDateStrFormat(date))
|
||||||
data = self.serv_redis_db.zrange(keyname, 0, topNum-1, desc=True, withscores=True)
|
data = self.serv_redis_db.zrange(keyname, 0, topNum-1, desc=True, withscores=True)
|
||||||
data = [ [record[0].decode('utf8'), record[1]] for record in data ]
|
data = [ [record[0].decode('utf8'), record[1]] for record in data ]
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def getAllLoggedInOrgs(self, date, prev_days=31):
|
||||||
|
orgs = set()
|
||||||
|
for curDate in util.getXPrevDaysSpan(date, prev_days):
|
||||||
|
keyname = "LOGIN_ORG:{}".format(util.getDateStrFormat(curDate))
|
||||||
|
data = self.serv_redis_db.zrange(keyname, 0, -1, desc=True, withscores=True)
|
||||||
|
for org in data:
|
||||||
|
orgs.add(org[0].decode('utf8'))
|
||||||
|
return list(orgs)
|
||||||
|
|
||||||
|
def getOrgContribAndLogin(self, date, org, prev_days=31):
|
||||||
|
keyname_log = "LOGIN_ORG:{}"
|
||||||
|
keyname_contrib = "CONTRIB_DAY:{}"
|
||||||
|
data = []
|
||||||
|
for curDate in util.getXPrevDaysSpan(date, prev_days):
|
||||||
|
log = self.serv_redis_db.zscore(keyname_log.format(util.getDateStrFormat(curDate)), org)
|
||||||
|
log = 0 if log is None else 1
|
||||||
|
contrib = self.serv_redis_db.zscore(keyname_contrib.format(util.getDateStrFormat(curDate)), org)
|
||||||
|
contrib = 0 if contrib is None else 1
|
||||||
|
data.append([log, contrib])
|
||||||
|
return data
|
||||||
|
|
||||||
|
def getContribOverLoginScore(self, array):
|
||||||
|
totLog = 0
|
||||||
|
totContrib = 0
|
||||||
|
for log, contrib in array:
|
||||||
|
totLog += log
|
||||||
|
totContrib += contrib
|
||||||
|
if totLog == 0: # avoid div by 0
|
||||||
|
totLog = 1
|
||||||
|
return totContrib/totLog
|
||||||
|
|
||||||
|
def getTopOrglogin(self, date, maxNum=12, prev_days=31):
|
||||||
|
all_logged_in_orgs = self.getAllLoggedInOrgs(date, prev_days)
|
||||||
|
data = []
|
||||||
|
for org in all_logged_in_orgs:
|
||||||
|
orgStatus = self.getOrgContribAndLogin(date, org, prev_days)
|
||||||
|
orgScore = self.getContribOverLoginScore(orgStatus)
|
||||||
|
data.append([org, orgScore])
|
||||||
|
data.sort(key=lambda x: x[1], reverse=True)
|
||||||
|
return data[:maxNum]
|
||||||
|
|
||||||
|
|
||||||
def getLoginVSCOntribution(self, date):
|
def getLoginVSCOntribution(self, date):
|
||||||
keyname = "CONTRIB_DAY:{}".format(util.getDateStrFormat(date))
|
keyname = "CONTRIB_DAY:{}".format(util.getDateStrFormat(date))
|
||||||
orgs_contri = self.serv_redis_db.zrange(keyname, 0, -1, desc=True, withscores=False)
|
orgs_contri = self.serv_redis_db.zrange(keyname, 0, -1, desc=True, withscores=False)
|
||||||
orgs_contri = [ org.decode('utf8') for org in orgs_contri ]
|
orgs_contri = [ org.decode('utf8') for org in orgs_contri ]
|
||||||
orgs_login = [ org[0] for org in self.getTopOrglogin(date, topNum=0) ]
|
orgs_login = [ org[0] for org in self.getOrgslogin(date, topNum=0) ]
|
||||||
contributed_num = 0
|
contributed_num = 0
|
||||||
non_contributed_num = 0
|
non_contributed_num = 0
|
||||||
for org in orgs_login:
|
for org in orgs_login:
|
||||||
|
|
Loading…
Reference in New Issue