Files
trading_bot_v4/instrumentation.ts
mindesbunister 66c3c42547 feat: Add automated database sync validator for ghost position detection
PROBLEM:
- Analytics page showed 3 open trades when only 1 actually open on Drift
- Ghost positions in database (realizedPnL set but exitReason = NULL)
- Happens when on-chain orders fill but database update fails
- Manual cleanup required = unreliable dashboard

SOLUTION: Automated Database Sync Validator
1. Runs every 10 minutes (independent of Position Manager)
2. Validates ALL 'open' database trades against actual Drift positions
3. Auto-fixes ghost positions (marks as closed with exitReason)
4. Provides manual validation endpoint: GET /api/admin/validate-db

FEATURES:
- Detects ghost positions (DB open, Drift closed)
- Detects orphan positions (DB closed, Drift open)
- Provides detailed validation reports
- Runs on server startup + periodic intervals
- Zero manual intervention required

FILES:
- lib/database/sync-validator.ts: Core validation logic
- app/api/admin/validate-db/route.ts: Manual validation endpoint
- instrumentation.ts: Auto-start on server initialization

RESULT: Reliable dashboard data - always matches Drift reality
2025-11-16 21:30:29 +01:00

23 lines
798 B
TypeScript

/**
* Next.js Instrumentation Hook
*
* This file is automatically called when the Next.js server starts
* Use it to initialize services that need to run on startup
*/
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
console.log('🎯 Server starting - initializing services...')
// Initialize Position Manager to restore trades from database
const { initializePositionManagerOnStartup } = await import('./lib/startup/init-position-manager')
await initializePositionManagerOnStartup()
// Start database sync validator (runs every 10 minutes)
const { startDatabaseSyncValidator } = await import('./lib/database/sync-validator')
startDatabaseSyncValidator()
console.log('✅ Server initialization complete')
}
}