higher level logging; sqlite db for logs
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Connections to the shared persistent SQLite state database."""
|
||||
|
||||
import os
|
||||
import sqlite3
|
||||
from typing import Optional
|
||||
|
||||
|
||||
STATE_DB_PATH = os.getenv(
|
||||
"STATE_DB_PATH",
|
||||
os.getenv("SHARE_DB_PATH", "/state/shares.db"),
|
||||
)
|
||||
|
||||
|
||||
def connect_state_db(
|
||||
path: Optional[str] = None,
|
||||
*,
|
||||
read_only: bool = False,
|
||||
) -> sqlite3.Connection:
|
||||
database_path = path or STATE_DB_PATH
|
||||
if read_only:
|
||||
conn = sqlite3.connect(
|
||||
f"file:{database_path}?mode=ro",
|
||||
uri=True,
|
||||
timeout=30,
|
||||
)
|
||||
else:
|
||||
directory = os.path.dirname(database_path)
|
||||
if directory:
|
||||
os.makedirs(directory, exist_ok=True)
|
||||
conn = sqlite3.connect(database_path, timeout=30)
|
||||
conn.row_factory = sqlite3.Row
|
||||
conn.execute("PRAGMA busy_timeout = 30000")
|
||||
conn.execute("PRAGMA foreign_keys = ON")
|
||||
if not read_only:
|
||||
conn.execute("PRAGMA journal_mode = WAL")
|
||||
conn.execute("PRAGMA synchronous = NORMAL")
|
||||
return conn
|
||||
|
||||
|
||||
def ensure_web_cache_schema(conn: sqlite3.Connection) -> None:
|
||||
conn.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS web_cache (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
)
|
||||
"""
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def drop_legacy_web_cache(directory: Optional[str] = None) -> int:
|
||||
legacy_directory = directory or os.getenv("WEB_STATE_DIR", "/state/web")
|
||||
removed = 0
|
||||
for name in ("usage.json", "usage.json.tmp"):
|
||||
path = os.path.join(legacy_directory, name)
|
||||
try:
|
||||
os.remove(path)
|
||||
removed += 1
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
try:
|
||||
os.rmdir(legacy_directory)
|
||||
except OSError:
|
||||
pass
|
||||
return removed
|
||||
|
||||
Reference in New Issue
Block a user