diff --git a/app.py b/app.py index 21ef74a..92a987a 100644 --- a/app.py +++ b/app.py @@ -30,7 +30,8 @@ import rooms_get as ro # Constantes : MAX_DEPT = 5 # Le maximum de départements qu'il est possible de sélectionner MAX_LOG_DAYS = 30 # Le nombre de jours pendant lesquels les logs sont conservés -MAX_LOG_DEPT = 3 # Le nombre maximum affiché de départements qui ont été le plus cherché +MAX_LOG_DEPT = 5 # Le nombre maximum affiché de départements qui ont été le plus cherché +MAX_LOG_FAVS = 10 # Le nombre maximum affiché de salles qui ont été le plus mises en favoris PING_WARN = 500 # Nombre d'utilisations à partir du quel un message d'avertissement est affiché LOG_FILE = "log.json" # Contient des stats sur les salles les plus mises en favoris, et les départements GLOBAL_CONTEXT = {} # Contexte constant pour les templates Jinja @@ -48,7 +49,6 @@ logs = [] # Stoque les différentes requêtes faite sur la route /free_rooms/, s if os.path.isfile(LOG_FILE): with open(LOG_FILE,"r") as f: logs = json.loads(f.read()) -print(logs) # Fonctions : def save_logs(logs): @@ -111,18 +111,32 @@ def stats(): # Compte le nombre de fois que les différents départements ont été cherchés pings = 0 counts = {} + counts_favs = {} + def fmap(fav): + return fav[0]+";"+fav[1] for log in logs: - for dept in log["depts"]: - pings+=1 - if dept in counts.keys(): - counts[dept]+=1 - else: - counts[dept]=1 + if log["type"]=="deptcount": + for dept in log["depts"]: + pings+=1 + if dept in counts.keys(): + counts[dept]+=1 + else: + counts[dept]=1 + elif log["type"]=="favs": + for fav in log["favs"]: + if fmap(fav) in counts_favs.keys(): + counts_favs[fmap(fav)][2] += 1 + else: + fav.append(1) + counts_favs[fmap(fav)]=fav sort = [ [x,counts[x]] for x in counts.keys() ] sort.sort(key = lambda x: x[1],reverse = True ) # Trie selon la valeur du deuxieme élément de la liste + + sort_favs = [ counts_favs[x] for x in counts_favs.keys() ] + sort_favs.sort(key = lambda x: x[2],reverse = True ) - context = {"MAX_LOG_DAYS":MAX_LOG_DAYS,"PING_WARN":PING_WARN,"depts":sort[:MAX_LOG_DEPT],"nbping":pings} + context = {"MAX_LOG_DAYS":MAX_LOG_DAYS,"PING_WARN":PING_WARN,"depts":sort[:MAX_LOG_DEPT],"favs":sort_favs[:MAX_LOG_FAVS],"nbping":pings} return render_template("stats.html",**context, **GLOBAL_CONTEXT) @@ -284,14 +298,23 @@ def free_rooms() : "favs":len(favs_ids)>0,"nofavslink":nofavslink} # Création d'un log de la date et des départements demandés (pour les stats du site) : + ctimestamp = dti.datetime.now().timestamp() log = {} - log["timestamp"] = dti.datetime.now().timestamp() + log["timestamp"] = ctimestamp log["depts"] = [ x.name for x in depts ] # Liste les noms de départements log["type"] = "deptcount" # Type du log logs.append(log) + # Création d'un log de la date et des salles favorites + favs = favs_soon_rooms+favs_free_rooms + if len(favs)>0: + log = {} + log["timestamp"] = ctimestamp + log["favs"] = [ [x.name,x.dept_name] for x in favs] # Liste les noms des salles favorites + log["type"] = "favs" # Type du log + logs.append(log) # Suppression des logs vieux de MAX_LOG_DAYS : - while (log["timestamp"] - logs[0]["timestamp"]) / (60*60*24) > MAX_LOG_DAYS : + while (ctimestamp - logs[0]["timestamp"]) / (60*60*24) > MAX_LOG_DAYS : del(logs[0]) # Sauvegarde les logs dans un fichier cache diff --git a/objects.py b/objects.py index 86442a7..690ad6f 100644 --- a/objects.py +++ b/objects.py @@ -49,13 +49,17 @@ class Room : id : string Identifiant 'unique' (avec un très faible risque de conflit) de la salle (généré à partir de son nom) + + dept_name : string + Le nom du département auquel la salle appartient """ - def __init__(self, name, start, end, is_free) : + def __init__(self, name, start, end, is_free, dept_name="DEFAULT DEPT") : self.name = name self.start = start self.end = end self.is_free = is_free self.id = self.getId(name) + self.dept_name = dept_name def getId(self,name): random.seed(name) diff --git a/rooms_get.py b/rooms_get.py index d11588c..4f9984a 100644 --- a/rooms_get.py +++ b/rooms_get.py @@ -241,6 +241,7 @@ def get_tot_rooms(datet, depts, ignore_list) : roomnames = [] # Contient le nom de toutes les salles indiquées dans la section "LOCATION" # Parcours de ces calendriers, pour faire la liste de toutes les salles : + dept_index = 0 for cal in cals : for comp in cal.walk() : # Événements if comp.name == "VEVENT" : @@ -268,8 +269,9 @@ def get_tot_rooms(datet, depts, ignore_list) : start = start.astimezone(pytz.timezone('Europe/Paris')) end = end.astimezone(pytz.timezone('Europe/Paris')) - total_rooms.append(Room(rname, start, end, is_free)) - + total_rooms.append(Room(rname, start, end, is_free, depts[dept_index].name)) + dept_index += 1 + return total_rooms diff --git a/templates/stats.html b/templates/stats.html index 94c31a0..f732a24 100644 --- a/templates/stats.html +++ b/templates/stats.html @@ -9,18 +9,26 @@ {% include "base.html" %}
-

Statistiques d'utilisation du site

+

Statistiques d'utilisation du site

Ces {{MAX_LOG_DAYS}} derniers jours, des salles ont été recherchées {{nbping}} fois.

{% if nbping>PING_WARN %}

⚠ Ce site commence a être surchargé ! N'hésitez pas à héberger votre propre instance d'UniSquat :) En savoir plus

{% endif %} {% if depts != [] : %} -

Départements les plus recherchés

+

Départements les plus recherchés

+ {% endif %} + {% if favs != [] : %} +

Salles préférées des utilisateurices

+ {% endif %}
{% include "footer.html" %}