# 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 from common.rocketchathelper import getTsunamy, Tsunami, getAllChannels, getAllMessages, Connection from common.savehelper import save 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(): rocket = Connection() 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 = getAllMessages(rocket, channel['_id'], begindate= begindate, enddate=enddate) resultMess = list(filter(lambda mess: 't' not in mess, resultMess)) 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) save(info, "channelsstat") if __name__ == "__main__": main()