From 4792b0f9cf3617066643bb9cf8199486873b61cf Mon Sep 17 00:00:00 2001 From: 21in7 Date: Wed, 18 Mar 2026 10:10:15 +0900 Subject: [PATCH] fix(dashboard): clean up stale position cache on unmatched close events _handle_close was not clearing _current_positions when no matching OPEN trade was found in DB, causing all subsequent entries for the same symbol+direction to be silently skipped. Also add PYTHONUNBUFFERED=1 and python -u to make log parser crashes visible in docker logs. Co-Authored-By: Claude Opus 4.6 (1M context) --- dashboard/api/entrypoint.sh | 2 +- dashboard/api/log_parser.py | 1 + docker-compose.yml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dashboard/api/entrypoint.sh b/dashboard/api/entrypoint.sh index dea5994..f6b6257 100644 --- a/dashboard/api/entrypoint.sh +++ b/dashboard/api/entrypoint.sh @@ -6,7 +6,7 @@ echo "LOG_DIR=${LOG_DIR:-/app/logs}" echo "DB_PATH=${DB_PATH:-/app/data/dashboard.db}" # 로그 파서를 백그라운드로 실행 -python log_parser.py & +python -u log_parser.py & PARSER_PID=$! echo "Log parser started (PID: $PARSER_PID)" diff --git a/dashboard/api/log_parser.py b/dashboard/api/log_parser.py index 1ced80e..d1de25f 100644 --- a/dashboard/api/log_parser.py +++ b/dashboard/api/log_parser.py @@ -479,6 +479,7 @@ class LogParser: if not open_trades: print(f"[LogParser] 경고: {symbol} 청산 감지했으나 열린 포지션 없음") + self._current_positions.pop(symbol, None) return primary_id = open_trades[0]["id"] diff --git a/docker-compose.yml b/docker-compose.yml index 2434765..731b80e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,6 +23,7 @@ services: restart: unless-stopped environment: - TZ=Asia/Seoul + - PYTHONUNBUFFERED=1 - LOG_DIR=/app/logs - DB_PATH=/app/data/dashboard.db - POLL_INTERVAL=5