diff --git a/.gitignore b/.gitignore index 570d6fc..8e8f97e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ # site/data/*.json !site/data/*.sample.json -config \ No newline at end of file +config +scripts/dev_config.py +.vscode +scripts/__pycache__ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2073add..86187e1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: alpine +image: frolvlad/alpine-python3 pages: stage: deploy diff --git a/scripts/generate.sh b/scripts/generate.sh index 12d0ccc..53493d3 100644 --- a/scripts/generate.sh +++ b/scripts/generate.sh @@ -1,9 +1,10 @@ #!/bin/sh +pip3 install -r ./scripts/requirements.txt # idees cp ./site/data/idees.sample.json ./site/data/idees.json # chat -cp ./site/data/chat.sample.json ./site/data/chat.json +python3 ./scripts/generate_chat_info.py -# wiki \ No newline at end of file +# wiki diff --git a/scripts/generate_chat_info.py b/scripts/generate_chat_info.py new file mode 100644 index 0000000..4b89bcb --- /dev/null +++ b/scripts/generate_chat_info.py @@ -0,0 +1,123 @@ +from rocketchat_API.rocketchat import RocketChat +import os +import json +from datetime import datetime +from monthdelta import monthdelta + +def main(): + print("Start chat info generation") + + crapauds_total = 0 + crapauds_recent = 0 + channels_total = 0 + channels_recent = 0 + channels_list = [] + messages_total = 0 + messages_recent = 0 + + recent_date = datetime.now() - monthdelta() + + rocket = RocketChat(None, None, auth_token= os.environ['ROCKETCHAT_AUTH'], user_id= os.environ['ROCKETCHAT_USERID'], server_url=os.environ['ROCKETCHAT_SERVER']) + + print("Check users") + users = rocket.users_list().json() + + crapauds_total = users["total"] + + print("Check channels") + channels = getAllChannels(rocket) + channels_total = len(channels) + + users = [] + for channel in channels: + messages_total += int(channel["msgs"]) + date = channel["lm"] + channel_date = datetime.strptime(date, "%Y-%m-%dT%H:%M:%S.%fZ") + if channel_date > recent_date: + channels_recent += 1 + + print("Check messages for channels {}".format(channel['name'])) + messages = rocket.channels_history(channel["_id"], oldest= recent_date, count= 10000).json() + if messages["success"]: + nbMessages = len(messages["messages"]) + messages_recent += nbMessages + channels_list.append((channel["name"], nbMessages)) + users.extend(map(lambda message: message["u"]["_id"], messages["messages"])) + else: + print("Error : {}".format(messages["error"])) + + # Get the channels with the most number of message + channels_list.sort(key=lambda channel: channel[1], reverse= True) + channels_recentlist = list(map(lambda channel: channel[0], channels_list)) + + crapauds_recent = len(set(users)) + + info = { + "crapauds": { + "total": crapauds_total, + "recent": crapauds_recent + }, + "canaux": { + "total": channels_total, + "recent": channels_recent, + # Get only the 10 first channels + "liste": channels_recentlist[0:10] + }, + "messages": { + "total": messages_total, + "recent": messages_recent + } + } + + save(info) + print("End chat info generation") + +def save(info): + # Récupération du répertoire racine du repo + rootFolder = os.path.join(os.path.dirname(__file__), '..') + # Répertoire pour stocker le fichier de sortie + dataFolder = os.path.join(rootFolder, 'site', 'data') + + statsFilePath = os.path.abspath( + os.path.join(dataFolder, 'chat.json')) + with open(statsFilePath, "w") as file_write: + json.dump(info, file_write) + +def getAllChannels(rocket): + index = 0 + allChannels = [] + while True: + channels = rocket.channels_list(offset = index).json() + + allChannels.extend([ channel for channel in channels['channels'] if 'archived' not in channel]) + if channels['count'] + channels['offset'] >= channels['total']: + break + index += channels['count'] + return allChannels + +def getAllUsers(rocket): + index = 0 + allUsers = [] + while True: + users = rocket.users_list(offset = index).json() + + allUsers.extend(users["users"]) + if users['count'] + users['offset'] >= users['total']: + break + index += users['count'] + return allUsers + +def getAllMessages(rocket, roomid, begindate): + index = 0 + allMessages = [] + while True: + messages = rocket.channels_history(roomid, offset = index, oldest= begindate).json() + + allMessages.extend(messages["m"]) + if messages['count'] + messages['offset'] >= messages['total']: + break + index += messages['count'] + return allMessages + +if __name__ == "__main__": + main() diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 0000000..b45bc34 --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1,2 @@ +rocketchat_API==0.6.34 +MonthDelta==0.9.1 \ No newline at end of file diff --git a/site/data/chat.json b/site/data/chat.json index d202bae..cb037e5 100644 --- a/site/data/chat.json +++ b/site/data/chat.json @@ -1,26 +1 @@ -{ - "crapauds": { - "total": 2300, - "recent": 200 - }, - "canaux": { - "total": 183, - "recent": 23, - "liste": [ - "general", - "semourais", - "cohorte-brest", - "accueil", - "right-to-repair", - "cohorte-34", - "cercle-neurodiversité", - "cercle-permaculture", - "no-gafam", - "Le LED" - ] - }, - "messages": { - "total": 23400, - "recent": 892 - } -} \ No newline at end of file +{"crapauds": {"total": 2365, "recent": 181}, "canaux": {"total": 177, "recent": 99, "liste": ["semourais", "accueil", "general", "right-to-repair", "wiki-crapaud-fou", "cohorte-loire", "reflexion-sur-l-argent", "le-led", "empowerment", "libre"]}, "messages": {"total": 186095, "recent": 13043}} \ No newline at end of file diff --git a/site/index.html b/site/index.html index 9d53dc0..e4e8ee4 100644 --- a/site/index.html +++ b/site/index.html @@ -143,12 +143,12 @@
0 crapauds actifs
0 canaux actifs
-
0 nouveaux messages
+
0 messages
-
Les canaux les plus actifs sur 30 jours
+
Les 10 canaux les plus actifs sur 30 jours