From bb0c787c9f878aa38a0aa70d9396e94156ac9ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Thu, 11 Feb 2021 02:06:30 +0100 Subject: [PATCH] add leaderboard --- generate.py | 18 +++++++++++++++++- templates/index.html | 7 +++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/generate.py b/generate.py index 1fb3bf0..9fa48b7 100644 --- a/generate.py +++ b/generate.py @@ -177,6 +177,21 @@ def run_forever(address: str, period: int, ssid: str, output: str): last_seen = leases log.reverse() + leaderboard_tmp = {} + mac_to_hostname = {} + for lease in _fetch_leases(db, now - timedelta(days=120)): + if _is_human(lease): + leaderboard_tmp.setdefault(lease.mac, 0) + leaderboard_tmp[lease.mac] += 1 + mac_to_hostname.setdefault(lease.mac, lease.hostname) + + leaderboard_entry = namedtuple('leaderboard_entry', ('name', 'total')) + leaderboard = [] + for mac, minutes in leaderboard_tmp.items(): + leaderboard.append(leaderboard_entry(mac_to_hostname.get(mac) or mac, timedelta(minutes=minutes))) + leaderboard.sort(key=lambda l: l.total, reverse=True) + leaderboard = leaderboard[:10] + logging.debug(f"Outputting HTML file into {output_file}...") with open(output_file, 'w') as file: out_str = jinja_env.get_template("index.html").render( @@ -184,7 +199,8 @@ def run_forever(address: str, period: int, ssid: str, output: str): leases=registered_leases, status=status, last_change=last_change, - log=log + log=log, + leaderboard=leaderboard ) file.write(out_str) diff --git a/templates/index.html b/templates/index.html index 17e7e48..1796e52 100644 --- a/templates/index.html +++ b/templates/index.html @@ -88,6 +88,13 @@ {% endfor %} +

Leaderboard

+
    + {% for entry in leaderboard %} +
  1. {{entry.name}} ({{entry.total}})
  2. + {% endfor %} +
+

Log

{% for entry in log %}