The hall counts its visitors: a digest, a nightly rollup, and the games it sends people to
gamehall/ops holds the traffic counter, the visitors digest and the nightly rollup, installed by gamehall/deploy.sh; the gamehall-visitors skill reads them. The hall now sends its origin as referrer, so a game can tell who came from it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
8ab1e0b794
commit
1dbf5763e1
Executable
+34
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env bash
|
||||
# The hall's visitors: who came in the last hour and today, where from, how
|
||||
# many went on into each game here, and the last week from the rollup.
|
||||
# Runs ON the shared host: gamehall-visitors.sh [YYYY-MM-DD] (default: today, UTC)
|
||||
set -u
|
||||
DAY="${1:-$(date -u +%F)}"
|
||||
python3 - "$DAY" <<'PY'
|
||||
import datetime, json, os, sys
|
||||
sys.path.insert(0, "/usr/local/lib/gamehall")
|
||||
import traffic
|
||||
|
||||
day = sys.argv[1]
|
||||
now = datetime.datetime.now(datetime.timezone.utc)
|
||||
print("as of %s UTC, day %s" % (now.strftime("%H:%M"), day))
|
||||
|
||||
if day == now.strftime("%F"):
|
||||
h = traffic.scan(day, since=now.timestamp() - 3600)
|
||||
print("last hour: %d people, %d page views" % (len(h["addresses"]), h["views"]))
|
||||
|
||||
t = traffic.scan(day)
|
||||
print("today: %d people, %d page views, %d bot addresses" % (len(t["addresses"]), t["views"], len(t["botAddresses"])))
|
||||
print("referrers: %s" % (dict(t["referrers"].most_common()) or "none"))
|
||||
print("campaigns: %s" % (dict(t["campaigns"].most_common()) or "none"))
|
||||
print("went on to: %s (Wiz-War is on its own host; its digest shows the hall as a referrer)" % (", ".join("%s %d" % kv for kv in t["sent"].items())))
|
||||
|
||||
out = "/var/lib/gamehall/rollup.jsonl"
|
||||
if os.path.exists(out):
|
||||
rows = [json.loads(l) for l in open(out) if l.strip()][-7:]
|
||||
if rows:
|
||||
print("last %d days:" % len(rows))
|
||||
for r in rows:
|
||||
sent = ", ".join("%s %d" % kv for kv in r.get("sent", {}).items())
|
||||
print(" %s %3d people %3d views refs %s on to %s" % (r["day"], r["people"], r["views"], r.get("referrers") or "-", sent or "-"))
|
||||
PY
|
||||
Reference in New Issue
Block a user