Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
74420f8f34 | |||
9ec739a9b4 |
2 changed files with 41 additions and 8 deletions
26
generate.py
26
generate.py
|
@ -229,15 +229,19 @@ def run_forever(
|
||||||
writer.writerow((lease.ip, lease.mac, lease.hostname or "???"))
|
writer.writerow((lease.ip, lease.mac, lease.hostname or "???"))
|
||||||
elif output_file.endswith(".html"):
|
elif output_file.endswith(".html"):
|
||||||
last_change = None
|
last_change = None
|
||||||
|
last_change_natural = None
|
||||||
for ts, leases in groupby(
|
for ts, leases in groupby(
|
||||||
_fetch_leases(db, now - timedelta(days=7)), key=attrgetter("ts")
|
_fetch_leases(db, now - timedelta(days=7)), key=attrgetter("ts")
|
||||||
):
|
):
|
||||||
humans_present = [lease for lease in leases if lease.is_human]
|
humans_present = [lease for lease in leases if lease.is_human]
|
||||||
if (len(humans_present) > 0) != (status.level > 0):
|
if (len(humans_present) > 0) != (status.level > 0):
|
||||||
last_change = {"ts": ts, "leases": humans_present}
|
last_change = {"ts": ts, "leases": humans_present}
|
||||||
|
last_change_natural = humanize.naturaltime(datetime.now() - ts)
|
||||||
break
|
break
|
||||||
|
|
||||||
log_entry = namedtuple("log_entry", ("ts", "state", "lease"))
|
log_entry = namedtuple(
|
||||||
|
"log_entry", ("ts", "ts_natural", "state", "lease")
|
||||||
|
)
|
||||||
log = []
|
log = []
|
||||||
last_seen = []
|
last_seen = []
|
||||||
for ts, leases in groupby(
|
for ts, leases in groupby(
|
||||||
|
@ -247,10 +251,24 @@ def run_forever(
|
||||||
leases = list(leases)
|
leases = list(leases)
|
||||||
for lease in leases:
|
for lease in leases:
|
||||||
if lease.mac not in (l.mac for l in last_seen):
|
if lease.mac not in (l.mac for l in last_seen):
|
||||||
log.append(log_entry(ts, True, lease))
|
log.append(
|
||||||
|
log_entry(
|
||||||
|
ts,
|
||||||
|
humanize.naturaltime(datetime.now() - ts),
|
||||||
|
True,
|
||||||
|
lease,
|
||||||
|
)
|
||||||
|
)
|
||||||
for lease in last_seen:
|
for lease in last_seen:
|
||||||
if lease.mac not in (l.mac for l in leases):
|
if lease.mac not in (l.mac for l in leases):
|
||||||
log.append(log_entry(ts, False, lease))
|
log.append(
|
||||||
|
log_entry(
|
||||||
|
ts,
|
||||||
|
humanize.naturaltime(datetime.now() - ts),
|
||||||
|
False,
|
||||||
|
lease,
|
||||||
|
)
|
||||||
|
)
|
||||||
last_seen = leases
|
last_seen = leases
|
||||||
|
|
||||||
collapse_thresh = timedelta(minutes=10)
|
collapse_thresh = timedelta(minutes=10)
|
||||||
|
@ -301,6 +319,7 @@ def run_forever(
|
||||||
leases=registered_leases,
|
leases=registered_leases,
|
||||||
status=status,
|
status=status,
|
||||||
last_change=last_change,
|
last_change=last_change,
|
||||||
|
last_change_natural=last_change_natural,
|
||||||
log=log,
|
log=log,
|
||||||
leaderboard=leaderboard,
|
leaderboard=leaderboard,
|
||||||
internal=False,
|
internal=False,
|
||||||
|
@ -314,6 +333,7 @@ def run_forever(
|
||||||
leases=registered_leases,
|
leases=registered_leases,
|
||||||
status=status,
|
status=status,
|
||||||
last_change=last_change,
|
last_change=last_change,
|
||||||
|
last_change_natural=last_change_natural,
|
||||||
log=log,
|
log=log,
|
||||||
leaderboard=leaderboard,
|
leaderboard=leaderboard,
|
||||||
internal=True,
|
internal=True,
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.nonhuman {
|
.nonhuman {
|
||||||
opacity: .66;
|
opacity: 0.66;
|
||||||
}
|
}
|
||||||
|
|
||||||
.log {
|
.log {
|
||||||
|
@ -73,6 +73,10 @@
|
||||||
color: green;
|
color: green;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ago {
|
||||||
|
opacity: 0.66;
|
||||||
|
}
|
||||||
|
|
||||||
.datetime {
|
.datetime {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
|
@ -103,9 +107,15 @@
|
||||||
<div class="status-explanation">{{status.text}}</div>
|
<div class="status-explanation">{{status.text}}</div>
|
||||||
<div class="level">{{status.level}}</div>
|
<div class="level">{{status.level}}</div>
|
||||||
<div>
|
<div>
|
||||||
<strong>Since:</strong> {% if last_change %} {{last_change['ts'].strftime("%c")}} {% if
|
<strong>Since:</strong>
|
||||||
status.level == 0 %}({{last_change.leases | map(attribute='display') |
|
{% if last_change %}
|
||||||
join(', ')}}){% endif %} {% else %} forever? {% endif %}
|
{{ last_change['ts'].strftime("%c") }} - {{ last_change_natural}}
|
||||||
|
{% if status.level == 0 %}
|
||||||
|
({{last_change.leases | map(attribute='display') | join(', ')}})
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
as far as I can tell?
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h2>Current clients</h2>
|
<h2>Current clients</h2>
|
||||||
|
@ -129,7 +139,10 @@
|
||||||
<table class="log">
|
<table class="log">
|
||||||
{% for entry in log %}
|
{% for entry in log %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{entry.ts.strftime("%c")}}</td>
|
<td>
|
||||||
|
{{entry.ts.strftime("%c")}}
|
||||||
|
<span class="ago">({{entry.ts_natural}})</span>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if entry.state %}
|
{% if entry.state %}
|
||||||
<span class="log-in">IN</span>
|
<span class="log-in">IN</span>
|
||||||
|
|
Loading…
Reference in a new issue