portail/scripts/getstats.py

131 lines
3.9 KiB
Python
Raw Normal View History

2019-09-01 10:03:04 +00:00
# coding: utf8
# toutes les chaines sont en unicode (même les docstrings)
from __future__ import unicode_literals
# from pprint import pprint
from rocketchat_API.rocketchat import RocketChat
import json
import os
import random
from datetime import datetime
from monthdelta import monthdelta
2019-09-01 10:50:21 +00:00
from common.rocketchathelper import getTsunamy, Tsunami, getAllChannels, Connection
2019-09-01 11:12:30 +00:00
from common.savehelper import save
2019-09-01 10:03:04 +00:00
def getColor():
r = random.randrange(255)
g = random.randrange(255)
b = random.randrange(255)
return 'rgb({:0},{:0},{:0})'.format(r,g,b)
def createElement(label, color, data) :
return {
"label": label,
"backgroundColor": color,
"data": data
}
def setTsunamyInfo(tsunamy, messagesDataTsunamy, id, length):
if tsunamy & Tsunami.GLOBAL:
messagesDataTsunamy[Tsunami.GLOBAL][id] += length
if tsunamy & Tsunami.PROJECT:
messagesDataTsunamy[Tsunami.PROJECT][id] += length
if tsunamy & Tsunami.DEMOCRACY:
messagesDataTsunamy[Tsunami.DEMOCRACY][id] += length
if tsunamy & Tsunami.ECOLOGY:
messagesDataTsunamy[Tsunami.ECOLOGY][id] += length
if tsunamy & Tsunami.TECHNOLOGY:
messagesDataTsunamy[Tsunami.TECHNOLOGY][id] += length
def main():
2019-09-01 10:50:21 +00:00
rocket = Connection()
2019-09-01 10:03:04 +00:00
labels = [None] * 12
messagesByChannel = []
usersByChannel = []
messagesDataTsunamy = {
Tsunami.GLOBAL: [0] * 12,
Tsunami.PROJECT: [0] * 12,
Tsunami.DEMOCRACY: [0] * 12,
Tsunami.ECOLOGY: [0] * 12,
Tsunami.TECHNOLOGY: [0] * 12,
}
usersGlobal = []
now = datetime.now()
date = datetime(now.year, now.month, now.day, 0,0,0)
info = {
"updated": "updated {:02}/{:02}/{:04}".format(now.day, now.month, now.year),
"labels": labels,
"messagesByChannel": messagesByChannel,
"usersByChannel": usersByChannel,
"messagesByTsunamy": [
createElement("global", getColor(), messagesDataTsunamy[Tsunami.GLOBAL]),
createElement("project", getColor(), messagesDataTsunamy[Tsunami.PROJECT]),
createElement("democratie", getColor(), messagesDataTsunamy[Tsunami.DEMOCRACY]),
createElement("ecologie", getColor(), messagesDataTsunamy[Tsunami.ECOLOGY]),
createElement("technologie", getColor(), messagesDataTsunamy[Tsunami.TECHNOLOGY])
],
"usersGlobal": usersGlobal
}
uniqueUserGlobal = [None] * 12
for channel in getAllChannels(rocket):
dataMess = []
dataUsers = []
print( channel['name'] )
begin = date - monthdelta(12)
end = begin + monthdelta(1)
tsunamy = getTsunamy(channel)
for id in range(0, 12):
if uniqueUserGlobal[id] == None:
uniqueUserGlobal[id] = []
labels[id] = begin.strftime("%b %Y")
print(f"\t{labels[id]}")
begindate = begin.isoformat()
enddate = end.isoformat()
resultMess = rocket.channels_history(channel['_id'], oldest= begindate, latest=enddate, count= 10000).json()
resultMess = list(filter(lambda mess: 't' not in mess, resultMess['messages']))
length = len(resultMess)
dataMess.append(length)
if length > 0:
setTsunamyInfo(tsunamy, messagesDataTsunamy, id, length)
users = []
for mess in resultMess:
users.append(mess['u']['_id'])
uniqueUserGlobal[id].append(mess['u']['_id'])
usersDistinct = set(users)
dataUsers.append(len(usersDistinct))
else:
dataUsers.append(0)
begin = end
end = begin + monthdelta(1)
color = getColor()
messageByChannel = createElement(channel['name'], color,dataMess)
userByChannel = createElement( channel['name'], color,dataUsers)
messagesByChannel.append(messageByChannel)
usersByChannel.append(userByChannel)
for id in range(0, 12):
uniqueUserGlobal[id] = len(set(uniqueUserGlobal[id]))
userGlobal = createElement( 'global', 'red', uniqueUserGlobal)
usersGlobal.append(userGlobal)
2019-09-01 11:12:30 +00:00
save(info, "channelsstat")
2019-09-01 10:03:04 +00:00
if __name__ == "__main__":
main()