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
{% for dept in depts: %}
- {{ dept[0] }} (recherché {{dept[1]}} fois)
{% endfor %}
+ {% endif %}
+ {% if favs != [] : %}
+ ⭐ Salles préférées des utilisateurices
+
+ {% for fav in favs: %}
+ - {{ fav[0] }} ({{fav[1]}}, recherchée {{fav[2]}} fois)
+ {% endfor %}
+
{% endif %}
{% include "footer.html" %}