From 1c2a27a026a8a85c70768abc26a4df879935c1ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Thu, 11 Feb 2021 01:55:15 +0100 Subject: [PATCH] add log --- generate.py | 22 ++++++++++++++++++++-- templates/index.html | 26 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/generate.py b/generate.py index f118058..1fb3bf0 100644 --- a/generate.py +++ b/generate.py @@ -3,6 +3,7 @@ import logging import os import re import sqlite3 +from collections import namedtuple from dataclasses import dataclass from datetime import datetime, timedelta from itertools import groupby @@ -57,13 +58,15 @@ def _get_db(filepath: str): def _fetch_leases(db, from_ts: datetime): + output = [] c = db.cursor() query = c.execute( 'SELECT ts, mac, hostname, ip FROM spottings WHERE ts > ? ORDER BY ts DESC', (int(from_ts.timestamp()),) ) for row in query: - yield Lease(datetime.fromtimestamp(row[0]), row[1], row[2], row[3]) + output.append(Lease(datetime.fromtimestamp(row[0]), row[1], row[2], row[3])) + return output def _is_human(lease: Lease): @@ -160,13 +163,28 @@ def run_forever(address: str, period: int, ssid: str, output: str): last_change = {'ts': ts, 'leases': humans_present} break + log_entry = namedtuple('log_entry', ('ts', 'state', 'lease')) + log = [] + last_seen = [] + for ts, leases in groupby(reversed(_fetch_leases(db, now - timedelta(days=1))), key=attrgetter('ts')): + leases = list(leases) + for lease in leases: + if lease.mac not in (l.mac for l in last_seen): + log.append(log_entry(ts, True, lease)) + for lease in last_seen: + if lease.mac not in (l.mac for l in leases): + log.append(log_entry(ts, False, lease)) + last_seen = leases + log.reverse() + 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( now=now, leases=registered_leases, status=status, - last_change=last_change + last_change=last_change, + log=log ) file.write(out_str) diff --git a/templates/index.html b/templates/index.html index c2eea44..17e7e48 100644 --- a/templates/index.html +++ b/templates/index.html @@ -38,6 +38,14 @@ border-color: green; } + .log-out { + color: red; + } + + .log-in { + color: green; + } + .datetime { font-weight: bold; margin: 1em 0; @@ -80,5 +88,23 @@ {% endfor %} +

Log

+ + {% for entry in log %} + + + + + + {% endfor %} +
{{entry.ts.strftime("%c")}} + {% if entry.state %} + + {% else %} + OUT + {% endif %} + + {{entry.lease.display}} +
\ No newline at end of file