Overlord sees all

This commit is contained in:
erik 2025-04-29 22:23:34 +00:00
commit a2089efa02
7 changed files with 724 additions and 0 deletions

121
db.py Normal file
View file

@ -0,0 +1,121 @@
import sqlite3
from typing import Dict
DB_FILE = "dereth.db"
def init_db() -> None:
"""Create tables if they do not exist (extended with kills_per_hour and onlinetime)."""
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
# History log
c.execute("""
CREATE TABLE IF NOT EXISTS telemetry_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
character_name TEXT NOT NULL,
char_tag TEXT,
session_id TEXT NOT NULL,
timestamp TEXT NOT NULL,
ew REAL,
ns REAL,
z REAL,
kills INTEGER,
kills_per_hour TEXT,
onlinetime TEXT,
deaths INTEGER,
rares_found INTEGER,
prismatic_taper_count INTEGER,
vt_state TEXT
)
""")
# Live snapshot (upsert)
c.execute("""
CREATE TABLE IF NOT EXISTS live_state (
character_name TEXT PRIMARY KEY,
char_tag TEXT,
session_id TEXT,
timestamp TEXT,
ew REAL,
ns REAL,
z REAL,
kills INTEGER,
kills_per_hour TEXT,
onlinetime TEXT,
deaths INTEGER,
rares_found INTEGER,
prismatic_taper_count INTEGER,
vt_state TEXT
)
""")
conn.commit()
conn.close()
def save_snapshot(data: Dict) -> None:
"""Insert snapshot into history and upsert into live_state (with new fields)."""
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
# Insert full history row
c.execute("""
INSERT INTO telemetry_log (
character_name, char_tag, session_id, timestamp,
ew, ns, z,
kills, kills_per_hour, onlinetime,
deaths, rares_found, prismatic_taper_count, vt_state
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (
data["character_name"],
data.get("char_tag", ""),
data["session_id"],
data["timestamp"],
data["ew"], data["ns"], data.get("z", 0.0),
data["kills"],
data.get("kills_per_hour", ""),
data.get("onlinetime", ""),
data.get("deaths", 0),
data.get("rares_found", 0),
data.get("prismatic_taper_count", 0),
data.get("vt_state", "Unknown"),
))
# Upsert into live_state
c.execute("""
INSERT INTO live_state (
character_name, char_tag, session_id, timestamp,
ew, ns, z,
kills, kills_per_hour, onlinetime,
deaths, rares_found, prismatic_taper_count, vt_state
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON CONFLICT(character_name) DO UPDATE SET
char_tag = excluded.char_tag,
session_id = excluded.session_id,
timestamp = excluded.timestamp,
ew = excluded.ew,
ns = excluded.ns,
z = excluded.z,
kills = excluded.kills,
kills_per_hour = excluded.kills_per_hour,
onlinetime = excluded.onlinetime,
deaths = excluded.deaths,
rares_found = excluded.rares_found,
prismatic_taper_count = excluded.prismatic_taper_count,
vt_state = excluded.vt_state
""", (
data["character_name"],
data.get("char_tag", ""),
data["session_id"],
data["timestamp"],
data["ew"], data["ns"], data.get("z", 0.0),
data["kills"],
data.get("kills_per_hour", ""),
data.get("onlinetime", ""),
data.get("deaths", 0),
data.get("rares_found", 0),
data.get("prismatic_taper_count", 0),
data.get("vt_state", "Unknown"),
))
conn.commit()
conn.close()