Files
trading_bot_v3/test-orphaned-order-cleanup.js
mindesbunister 08970acc85 fix: eliminate excessive P&L calculations and restore CoinGecko price source
- Fixed Prisma table name errors in price-monitor.ts (trades vs trade, automation_sessions vs automationSession)
- Commented out excessive P&L calculation logging in analysis-details API that was processing all 69 trades
- Restored CoinGecko as primary price source (was falling back to Binance due to DB errors)
- Optimized analysis-details to skip P&L calculations for FAILED/EXECUTED trades
- Added comprehensive cleanup system for orphaned orders
- Performance improvement: eliminated unnecessary processing of old trade data

Result: Clean logs, efficient price fetching from CoinGecko, no excessive calculations
2025-07-28 13:45:17 +02:00

125 lines
4.8 KiB
JavaScript

#!/usr/bin/env node
/**
* Test script to verify orphaned order cleanup functionality
*/
async function testOrphanedOrderCleanup() {
console.log('🧪 TESTING: Orphaned Order Cleanup Functionality\n');
const baseUrl = process.env.INTERNAL_API_URL || 'http://localhost:3000';
try {
// 1. Check current orders
console.log('1. Checking current order status...');
const ordersResponse = await fetch(`${baseUrl}/api/drift/orders`);
const ordersData = await ordersResponse.json();
if (ordersData.success) {
console.log(`📊 Current orders: ${ordersData.orders?.length || 0}`);
console.log(`📊 Active orders: ${ordersData.totalActiveOrders || 0}`);
if (ordersData.totalActiveOrders > 0) {
console.log(' Found orders to clean up');
ordersData.orders.slice(0, 3).forEach((order, idx) => {
console.log(` ${idx + 1}. Order ${order.orderId} - ${JSON.stringify(order.status)} - ${order.baseAssetAmount}`);
});
} else {
console.log(' No active orders found');
}
}
// 2. Check current positions
console.log('\n2. Checking current positions...');
const positionsResponse = await fetch(`${baseUrl}/api/drift/positions`);
const positionsData = await positionsResponse.json();
if (positionsData.success) {
console.log(`📊 Active positions: ${positionsData.positions?.length || 0}`);
if (positionsData.positions?.length > 0) {
positionsData.positions.forEach((pos, idx) => {
console.log(` ${idx + 1}. ${pos.symbol} ${pos.side.toUpperCase()} ${pos.size} @ $${pos.entryPrice.toFixed(4)}`);
});
} else {
console.log(' No active positions found');
}
}
// 3. Test cleanup-orders endpoint
console.log('\n3. Testing cleanup-orders endpoint...');
const cleanupResponse = await fetch(`${baseUrl}/api/drift/cleanup-orders`, {
method: 'POST'
});
if (cleanupResponse.ok) {
const cleanupResult = await cleanupResponse.json();
console.log('✅ Cleanup-orders endpoint successful');
console.log(`📊 Summary:`, cleanupResult.summary);
console.log(`📋 Message: ${cleanupResult.message}`);
if (cleanupResult.summary?.totalCanceled > 0) {
console.log(`🧹 Cleaned up ${cleanupResult.summary.totalCanceled} orders`);
}
if (cleanupResult.summary?.activeOrders > 0) {
console.log(`⚠️ ${cleanupResult.summary.activeOrders} orders still remain after cleanup`);
}
} else {
console.error(`❌ Cleanup-orders failed: ${cleanupResponse.status}`);
const errorText = await cleanupResponse.text();
console.error(`Error details: ${errorText}`);
}
// 4. Test cancel-all-orders endpoint if needed
if (ordersData.totalActiveOrders > 0) {
console.log('\n4. Testing cancel-all-orders endpoint...');
const cancelAllResponse = await fetch(`${baseUrl}/api/drift/cancel-all-orders`, {
method: 'POST'
});
if (cancelAllResponse.ok) {
const cancelAllResult = await cancelAllResponse.json();
console.log('✅ Cancel-all-orders endpoint successful');
console.log(`📊 Total canceled: ${cancelAllResult.totalCanceled || 0}`);
console.log(`📊 Successful: ${cancelAllResult.successfulCancellations || 0}`);
console.log(`📊 Failed: ${cancelAllResult.failedCancellations || 0}`);
} else {
console.error(`❌ Cancel-all-orders failed: ${cancelAllResponse.status}`);
const errorText = await cancelAllResponse.text();
console.error(`Error details: ${errorText}`);
}
}
// 5. Final verification - check orders again
console.log('\n5. Final verification - checking orders after cleanup...');
const finalOrdersResponse = await fetch(`${baseUrl}/api/drift/orders`);
const finalOrdersData = await finalOrdersResponse.json();
if (finalOrdersData.success) {
console.log(`📊 Final active orders: ${finalOrdersData.totalActiveOrders || 0}`);
if (finalOrdersData.totalActiveOrders === 0) {
console.log('✅ SUCCESS: All orders successfully cleaned up!');
} else {
console.log(`⚠️ WARNING: ${finalOrdersData.totalActiveOrders} orders still remain`);
console.log(' This may indicate orders that cannot be canceled (e.g., filled orders)');
}
}
console.log('\n✅ Orphaned order cleanup test completed');
} catch (error) {
console.error('❌ Test failed:', error.message);
console.error('Full error:', error);
}
}
// Run the test
testOrphanedOrderCleanup()
.then(() => {
console.log('\n🎯 Test execution completed');
})
.catch((error) => {
console.error('❌ Test execution failed:', error);
});