Compare commits

...

2 Commits

Author SHA1 Message Date
ada9dcd7a3 Ajout de statistiques simples & navbar 2022-06-14 11:53:17 +02:00
f9c1ff1b85 Simple logs 2022-06-13 22:49:31 +02:00
5 changed files with 102 additions and 5 deletions

46
app.py
View File

@ -26,6 +26,12 @@ 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é
PING_WARN = 5 # Nombre d'utilisations à partir du quel un message d'avertissement est affiché
# Globales
logs = [] # Stoque les différentes requêtes faite sur la route /free_rooms/, sous la forme {"timestamp":timestamp,"depts":[]}
app = Flask(__name__)
@ -71,6 +77,37 @@ def select_dept() :
url_for("static", filename="style.css")
return render_template("dept-select.html", **content)
@app.route("/stats")
def stats():
"""
Statistiques d'utilisation de l'instance
Parameters
----------
None. (Reads from the global "logs")
Returns
-------
flask.render_template
"""
# Compte le nombre de fois que les différents départements ont été cherché
pings = 0
counts = {}
for log in logs:
for dept in log["depts"]:
pings+=1
if dept.name in counts.keys():
counts[dept.name]+=1
else:
counts[dept.name]=1
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
context = {"MAX_LOG_DAYS":MAX_LOG_DAYS,"PING_WARN":PING_WARN,"depts":sort[:MAX_LOG_DEPT],"nbping":pings}
return render_template("stats.html",**context)
@app.route("/app/free-rooms", methods=["POST", "GET"])
def free_rooms() :
@ -163,6 +200,15 @@ def free_rooms() :
i+=1
context = {"free_rooms":free_rooms, "frooms_disp":frooms_disp, "depts_str":depts_str, "dident_list":dident_list, "date_str":date_str, "change_date_str":change_date_str}
# Crée un log de la date et des départements demandés ( pour des futures statistiques )
log = {}
log["timestamp"] = dti.datetime.now().timestamp()
log["depts"] = depts
logs.append(log)
# Vide les logs vieux de MAX_LOG_DAYS
while (log["timestamp"]-logs[0]["timestamp"])/(60*60*24)>MAX_LOG_DAYS:
del(logs[0])
url_for("static", filename="style.css")
return render_template("free-rooms.html", **context)

View File

@ -17,12 +17,29 @@ body {
header {
background: var(--hl);
display: inline-block;
font-size: 250%;
font-size: 150%;
width: 100%;
font-weight: lighter;
text-align: center;
}
header a {
padding-left: 40px;
padding-right: 40px;
padding-top: 5px;
padding-bottom: 5px;
color: var(--fg);
transition: color 0.1s;
}
header a:hover {
color: var(--bg);
}
.title {
font-size: 200%
}
main {
margin: 15px;
display: flex;

View File

@ -1 +1,12 @@
<div class="flex"><header><a href="/">UniSquat</a></header></div>
<header>
<div class="flex">
<a href="/" class="title">UniSquat</a>
</div>
<strong>
<div class="flex">
<a href="/app">Start</a>
<a href="/stats">Stats</a>
<a href="https://forge.chapril.org/Wantoo/UniSquat_Python">Source</a>
</div>
</strong>
</header>

View File

@ -17,9 +17,6 @@
<div class="flex">
<button onClick="location.href='/app/date-select{{change_date_str}}'">Choisir une date</button>
</div>
<div class="flex">
<button onClick="location.href='/app'" type="button">Choisir des départements</button>
</div>
<h1>Disponibles maintenant</h1>
<div class="flex-container">
<ul>

26
templates/stats.html Normal file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<title>UniSquat</title>
<link rel="stylesheet" type="text/css" href="../static/style.css">
<meta name="viewport" content="width=300, initial-scale=1" />
</head>
<body>
{% include "base.html" %}
<main>
<h1>Statistiques d'utilisation de l'instance</h1>
<p>Ces {{MAX_LOG_DAYS}} derniers jours, cette instance a recherché des salles {{nbping}} fois !</p>
{% if nbping>PING_WARN %}
<p>⚠ L'instance commence a être <strong>surchargée</strong>, considérez le fait d'en <a href="https://forge.chapril.org/Wantoo/UniSquat_Python">créer une vous même</a></p>
{% endif %}
<h1>Départements les plus demandés</h1>
<ul>
{% for dept in depts: %}
<li><strong>{{ dept[0] }}</strong> (demandé {{dept[1]}} fois)</li>
{% endfor %}
</ul>
</main>
{% include "footer.html" %}
</body>
</html>