test_manual_cleanup.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/env npx tsx
  2. import { OrderCleanupService } from './src/modules/cleanup/OrderCleanupService.js'
  3. import { AccountManager } from './src/modules/account/AccountManager.js'
  4. import { CacheManager } from './src/modules/cache/CacheManager.js'
  5. import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js'
  6. import { logger } from './src/utils/logger.js'
  7. async function testManualCleanup() {
  8. logger.info('🧹 测试手动订单清理功能')
  9. try {
  10. // 1. 创建基础服务
  11. const cacheManager = new CacheManager()
  12. const accountManager = new AccountManager(cacheManager)
  13. // 2. 创建 Pacifica 客户端
  14. const client1 = new PacificaProxyClient({
  15. privateKey: process.env.PACIFICA_PRIVATE_KEY_1 || '',
  16. account: process.env.PACIFICA_ACCOUNT_1 || '3v2fE8y6uPVu5pmNCpmygpGNgdP3kGL3SMoVa86uvLLu',
  17. })
  18. const client2 = new PacificaProxyClient({
  19. privateKey: process.env.PACIFICA_PRIVATE_KEY_2 || '',
  20. account: process.env.PACIFICA_ACCOUNT_2 || 'GkFi4YUFVTYKVqzsT98QiiUVbwuTiXWe8XsbRZRYafv3',
  21. })
  22. // 禁用WebSocket,使用HTTP
  23. client1.setWebSocketEnabled(false)
  24. client2.setWebSocketEnabled(false)
  25. // 3. 配置账户管理器
  26. const accounts = [
  27. { account: process.env.PACIFICA_ACCOUNT_1, privateKey: process.env.PACIFICA_PRIVATE_KEY_1 },
  28. { account: process.env.PACIFICA_ACCOUNT_2, privateKey: process.env.PACIFICA_PRIVATE_KEY_2 }
  29. ]
  30. accountManager.setAccounts(accounts)
  31. accountManager.addClient('pacifica-1', client1)
  32. accountManager.addClient('pacifica-2', client2)
  33. // 4. 创建订单清理服务(5秒间隔,60秒超时,最多3个订单用于测试)
  34. const cleanupInterval = 5000 // 5秒测试间隔
  35. const maxOrderAge = 60000 // 60秒超时
  36. const maxOrderCount = 3 // 最多3个订单(用于快速测试)
  37. const orderCleanupService = new OrderCleanupService(
  38. accountManager,
  39. cleanupInterval,
  40. maxOrderAge,
  41. maxOrderCount
  42. )
  43. // 5. 初始化和启动服务
  44. await cacheManager.initialize()
  45. await accountManager.initialize()
  46. await orderCleanupService.initialize()
  47. await cacheManager.start()
  48. await accountManager.start()
  49. await orderCleanupService.start()
  50. logger.info('🚀 服务已启动,开始手动清理测试...')
  51. // 6. 手动触发清理
  52. logger.info('🔧 手动触发第一次清理...')
  53. try {
  54. await orderCleanupService.manualCleanup()
  55. logger.info('✅ 第一次清理完成')
  56. } catch (cleanupError: any) {
  57. logger.error('❌ 第一次清理失败:', {
  58. error: cleanupError.message,
  59. stack: cleanupError.stack,
  60. name: cleanupError.name,
  61. details: cleanupError
  62. })
  63. throw cleanupError
  64. }
  65. logger.info('⏱️ 等待5秒后再次清理...')
  66. await new Promise(resolve => setTimeout(resolve, 5000))
  67. logger.info('🔧 手动触发第二次清理...')
  68. await orderCleanupService.manualCleanup()
  69. // 7. 获取清理统计
  70. const stats = orderCleanupService.getCleanupStats()
  71. logger.info('📊 清理统计:', stats)
  72. // 8. 停止服务
  73. await orderCleanupService.stop()
  74. await accountManager.stop()
  75. await cacheManager.stop()
  76. logger.info('✅ 手动清理测试完成')
  77. } catch (error: any) {
  78. logger.error('❌ 测试失败:', {
  79. error: error.message,
  80. stack: error.stack,
  81. })
  82. }
  83. }
  84. // 立即执行
  85. testManualCleanup().then(() => {
  86. logger.info('🎯 测试完成')
  87. process.exit(0)
  88. }).catch(error => {
  89. logger.error('🚨 测试脚本执行失败:', error)
  90. process.exit(1)
  91. })