add leaderboard
This commit is contained in:
parent
1c2a27a026
commit
bb0c787c9f
2 changed files with 24 additions and 1 deletions
18
generate.py
18
generate.py
|
@ -177,6 +177,21 @@ def run_forever(address: str, period: int, ssid: str, output: str):
|
||||||
last_seen = leases
|
last_seen = leases
|
||||||
log.reverse()
|
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}...")
|
logging.debug(f"Outputting HTML file into {output_file}...")
|
||||||
with open(output_file, 'w') as file:
|
with open(output_file, 'w') as file:
|
||||||
out_str = jinja_env.get_template("index.html").render(
|
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,
|
leases=registered_leases,
|
||||||
status=status,
|
status=status,
|
||||||
last_change=last_change,
|
last_change=last_change,
|
||||||
log=log
|
log=log,
|
||||||
|
leaderboard=leaderboard
|
||||||
)
|
)
|
||||||
file.write(out_str)
|
file.write(out_str)
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,13 @@
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
<h2>Leaderboard</h2>
|
||||||
|
<ol>
|
||||||
|
{% for entry in leaderboard %}
|
||||||
|
<li>{{entry.name}} ({{entry.total}})</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ol>
|
||||||
|
|
||||||
<h2>Log</h2>
|
<h2>Log</h2>
|
||||||
<table>
|
<table>
|
||||||
{% for entry in log %}
|
{% for entry in log %}
|
||||||
|
|
Loading…
Reference in a new issue