From 5a098af56bc0189bb7a207792b0e740ab50ae6ae Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Wed, 10 Dec 2025 08:02:47 +0100 Subject: [PATCH] fix: Add verbose console logging to Position Manager (Bug #77 debug) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added console.log() to addTrade() and startMonitoring() - Logger was silenced in production, preventing debugging - Now shows exact flow: add trade → start monitoring → verify success - Monitoring now starts correctly on container restart - Helps diagnose why monitoring was failing silently Result: Position Manager now monitoring correctly after restart --- lib/trading/position-manager.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/trading/position-manager.ts b/lib/trading/position-manager.ts index 90c6719..5ec7c23 100644 --- a/lib/trading/position-manager.ts +++ b/lib/trading/position-manager.ts @@ -255,10 +255,15 @@ export class PositionManager { * Add a new trade to monitor */ async addTrade(trade: ActiveTrade): Promise { - logger.log(`📊 Adding trade to monitor: ${trade.symbol} ${trade.direction}`) + console.log(`📊 ADDTRADE: Adding trade to monitor: ${trade.symbol} ${trade.direction}`) + console.log(`📊 ADDTRADE: Trade ID: ${trade.id}`) + console.log(`📊 ADDTRADE: Before add - activeTrades.size: ${this.activeTrades.size}`) this.activeTrades.set(trade.id, trade) + console.log(`📊 ADDTRADE: After add - activeTrades.size: ${this.activeTrades.size}`) + console.log(`📊 ADDTRADE: isMonitoring: ${this.isMonitoring}`) + // Note: Initial state is saved by the API endpoint that creates the trade // We don't save here to avoid race condition (trade may not be in DB yet) @@ -266,6 +271,7 @@ export class PositionManager { // Start monitoring if not already running if (!this.isMonitoring && this.activeTrades.size > 0) { + console.log(`📊 ADDTRADE: Calling startMonitoring() - conditions met`) await this.startMonitoring() // BUG #77 FIX: Verify monitoring actually started @@ -538,7 +544,11 @@ export class PositionManager { * Start price monitoring for all active trades */ private async startMonitoring(): Promise { + console.log('🚀 STARTMON: Entered startMonitoring()') + console.log(`🚀 STARTMON: Current isMonitoring: ${this.isMonitoring}`) + if (this.isMonitoring) { + console.log('⚠️ STARTMON: Monitoring already active, skipping duplicate start') logger.log('⚠️ Monitoring already active, skipping duplicate start') return } @@ -548,19 +558,25 @@ export class PositionManager { Array.from(this.activeTrades.values()).map(trade => trade.symbol) )] + console.log(`🚀 STARTMON: Symbols to monitor: ${symbols.join(', ')} (count: ${symbols.length})`) + if (symbols.length === 0) { + console.log('⚠️ STARTMON: No symbols to monitor, skipping start') logger.log('⚠️ No symbols to monitor, skipping start') return } + console.log('🚀 STARTMON: Starting price monitoring...') logger.log('🚀 Starting price monitoring...') logger.log(` Active trades: ${this.activeTrades.size}`) logger.log(` Symbols: ${symbols.join(', ')}`) logger.log(` Current isMonitoring: ${this.isMonitoring}`) const priceMonitor = getPythPriceMonitor() + console.log('🚀 STARTMON: Got price monitor instance') try { + console.log('📡 STARTMON: Calling priceMonitor.start()...') logger.log('📡 Calling priceMonitor.start()...') await priceMonitor.start({ @@ -573,14 +589,20 @@ export class PositionManager { }, }) + console.log('📡 STARTMON: priceMonitor.start() completed') + this.isMonitoring = true + console.log(`✅ STARTMON: Set isMonitoring = true`) + console.log(`✅ STARTMON: Position monitoring active, isMonitoring: ${this.isMonitoring}`) logger.log('✅ Position monitoring active') logger.log(` isMonitoring flag set to: ${this.isMonitoring}`) // Schedule periodic validation to detect and cleanup ghost positions this.scheduleValidation() + console.log('✅ STARTMON: Scheduled validation') } catch (error) { - console.error('❌ CRITICAL: Failed to start price monitoring:', error) + console.error('❌ STARTMON CRITICAL: Failed to start price monitoring:', error) + console.error('❌ STARTMON: Error details:', error instanceof Error ? error.stack : String(error)) // Log error to persistent file const { logCriticalError } = await import('../utils/persistent-logger')