_wait_rebuild.mjs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // P93:低频长时等待"数据重算"完成 —— 每 60s 破缓存探测;成功(200 且数据量正常)或任务结束即退出
  2. const GW = 'http://106.120.102.238:28084'
  3. const t0 = Date.now()
  4. const st = () => ((Date.now() - t0) / 1000 / 60).toFixed(1).padStart(5) + 'm'
  5. const bust = 'ts=' + Date.now()
  6. async function get(path) {
  7. try {
  8. const r = await fetch(GW + path + (path.includes('?') ? '&' : '?') + bust + Math.random(), {
  9. headers: { 'Cache-Control': 'no-cache' },
  10. })
  11. const b = await r.text()
  12. return { status: r.status, len: b.length, txt: b }
  13. } catch (e) { return { status: 0, len: 0, txt: String(e) } }
  14. }
  15. let last = null
  16. for (let i = 0; i < 120; i++) {
  17. const f = await get('/api/fleet')
  18. const s = await get('/ops/api/state')
  19. let j = null
  20. try { j = JSON.parse(s.txt) } catch { /* ignore */ }
  21. const job = (j && j.job) || {}
  22. const tail = (job.log_tail || []).slice(-1)[0] || ''
  23. console.log(st() + ' fleet=' + f.status + '(' + f.len + 'B) job=' + (job.status || '?') + ' rc=' + (job.rc ?? '-') + ' · ' + String(tail).trim().slice(0, 110))
  24. last = { f, job }
  25. if (f.status === 200 && f.len > 50000) { console.log('✅ 数据已恢复(fleet 200 · ' + f.len + ' B)—— 可以复跑判据'); break }
  26. if (job.rc !== null && job.rc !== undefined) {
  27. console.log('⚠️ 任务已结束 rc=' + job.rc + '(' + (job.status || '') + ')')
  28. for (const l of (job.log_tail || []).slice(-12)) console.log(' ' + String(l).slice(0, 190))
  29. break
  30. }
  31. await new Promise((r) => setTimeout(r, 60000))
  32. }
  33. console.log('END ' + st() + ' fleet=' + (last ? last.f.status : '?') + '/' + (last ? last.f.len : '?') + 'B')