From cdde1795db724321c9af93d2ec8024332d0d69b3 Mon Sep 17 00:00:00 2001 From: 21in7 Date: Mon, 9 Mar 2026 22:55:04 +0900 Subject: [PATCH] fix(dashboard): preserve DB data across log parser restarts Changed _init_db() from DROP+CREATE to CREATE IF NOT EXISTS so that trade history, candle data, and daily PnL survive container restarts. Previously all tables were dropped on every parser start, losing historical data if log files had been rotated. Co-Authored-By: Claude Opus 4.6 --- dashboard/api/log_parser.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/dashboard/api/log_parser.py b/dashboard/api/log_parser.py index 7fbfdb3..486ebbb 100644 --- a/dashboard/api/log_parser.py +++ b/dashboard/api/log_parser.py @@ -106,13 +106,7 @@ class LogParser: def _init_db(self): self.conn.executescript(""" - DROP TABLE IF EXISTS trades; - DROP TABLE IF EXISTS candles; - DROP TABLE IF EXISTS daily_pnl; - DROP TABLE IF EXISTS bot_status; - DROP TABLE IF EXISTS parse_state; - - CREATE TABLE trades ( + CREATE TABLE IF NOT EXISTS trades ( id INTEGER PRIMARY KEY AUTOINCREMENT, symbol TEXT NOT NULL, direction TEXT NOT NULL, @@ -137,7 +131,7 @@ class LogParser: extra TEXT ); - CREATE TABLE candles ( + CREATE TABLE IF NOT EXISTS candles ( id INTEGER PRIMARY KEY AUTOINCREMENT, symbol TEXT NOT NULL, ts TEXT NOT NULL, @@ -150,7 +144,7 @@ class LogParser: UNIQUE(symbol, ts) ); - CREATE TABLE daily_pnl ( + CREATE TABLE IF NOT EXISTS daily_pnl ( symbol TEXT NOT NULL, date TEXT NOT NULL, cumulative_pnl REAL DEFAULT 0, @@ -161,20 +155,20 @@ class LogParser: PRIMARY KEY(symbol, date) ); - CREATE TABLE bot_status ( + CREATE TABLE IF NOT EXISTS bot_status ( key TEXT PRIMARY KEY, value TEXT, updated_at TEXT ); - CREATE TABLE parse_state ( + CREATE TABLE IF NOT EXISTS parse_state ( filepath TEXT PRIMARY KEY, position INTEGER DEFAULT 0 ); - CREATE INDEX idx_candles_symbol_ts ON candles(symbol, ts); - CREATE INDEX idx_trades_status ON trades(status); - CREATE INDEX idx_trades_symbol ON trades(symbol); + CREATE INDEX IF NOT EXISTS idx_candles_symbol_ts ON candles(symbol, ts); + CREATE INDEX IF NOT EXISTS idx_trades_status ON trades(status); + CREATE INDEX IF NOT EXISTS idx_trades_symbol ON trades(symbol); """) self.conn.commit() self._load_state()