Files
trading_bot_v3/app/api/automation/emergency-stop/route.js
mindesbunister d38511f580 feat: fix orphaned order detection and enhance automation UI
- Fixed Drift orders API to handle new object-based status format
- Updated cleanup API to properly detect orphaned TAKE PROFIT orders
- Changed status filtering from order.status === 0 to order.status.hasOwnProperty('open')

- Restored automation-v2 page with emergency stop functionality
- Added position monitor integration with real-time cleanup status
- Enhanced UI with emoji indicators and better status display
- Added emergency stop API endpoint for immediate trading halt

- Enhanced orphaned order detection for lingering SL/TP orders
- Added comprehensive debug logging for order processing
- Improved error handling and status reporting
- Real-time cleanup reporting in position monitor

 Verified working:
- Orders API correctly detects active orders with new Drift format
- Cleanup system successfully processes orphaned orders
- Position monitor shows accurate cleanup status
- Emergency stop functionality integrated
2025-07-26 20:07:40 +02:00

113 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { NextResponse } from 'next/server'
export async function POST() {
try {
console.log('🚨 EMERGENCY STOP INITIATED')
const results = {
automationStopped: false,
processesKilled: false,
cleanupCompleted: false,
errors: []
}
// 1. Stop automation normally first
try {
const stopResponse = await fetch('http://localhost:3000/api/automation/stop', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
if (stopResponse.ok) {
results.automationStopped = true
console.log('✅ Automation stopped successfully')
}
} catch (error) {
results.errors.push(`Automation stop failed: ${error.message}`)
console.error('❌ Automation stop failed:', error)
}
// 2. Kill background processes
try {
const { exec } = require('child_process')
const util = require('util')
const execAsync = util.promisify(exec)
// Kill Chromium/Chrome processes
try {
await execAsync('pkill -f "chrome|chromium" 2>/dev/null || true')
console.log('🔫 Chrome/Chromium processes terminated')
} catch (e) {
console.log(' No Chrome processes to kill')
}
// Kill any screenshot services
try {
await execAsync('pkill -f "screenshot|puppeteer" 2>/dev/null || true')
console.log('🔫 Screenshot processes terminated')
} catch (e) {
console.log(' No screenshot processes to kill')
}
results.processesKilled = true
} catch (error) {
results.errors.push(`Process cleanup failed: ${error.message}`)
console.error('❌ Process cleanup failed:', error)
}
// 3. Cleanup temporary files
try {
const fs = require('fs').promises
const path = require('path')
// Clean up screenshot directories
const tempDirs = [
'/tmp/trading-screenshots',
'/app/screenshots',
'/app/temp'
]
for (const dir of tempDirs) {
try {
await fs.rmdir(dir, { recursive: true })
console.log(`🧹 Cleaned up ${dir}`)
} catch (e) {
// Directory doesn't exist or already clean
}
}
results.cleanupCompleted = true
} catch (error) {
results.errors.push(`Cleanup failed: ${error.message}`)
console.error('❌ Cleanup failed:', error)
}
console.log('🚨 EMERGENCY STOP COMPLETED')
console.log('Results:', results)
return NextResponse.json({
success: true,
message: 'Emergency stop completed',
results,
timestamp: new Date().toISOString()
})
} catch (error) {
console.error('🚨 EMERGENCY STOP ERROR:', error)
return NextResponse.json({
success: false,
error: 'Emergency stop failed',
message: error.message,
timestamp: new Date().toISOString()
}, { status: 500 })
}
}
export async function GET() {
return NextResponse.json({
message: 'Emergency Stop API - use POST method to trigger emergency stop',
description: 'Immediately stops all automation processes and cleans up resources'
})
}