Overlord sees all
This commit is contained in:
commit
a2089efa02
7 changed files with 724 additions and 0 deletions
121
db.py
Normal file
121
db.py
Normal 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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue