ProxySync.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const API = require('../../lib/API.js')
  2. const { BaseStdResponse } = require('../../BaseStdResponse.js')
  3. const { importFromRemoteUrl, batchCheckProxies, getGlobalOrThrow } = require('../../lib/Lepao/lepaoProxyPoolService')
  4. /**
  5. * Corn:拉取全局 import_url 上的代理文本并写入池,随后全表探活。
  6. * 建议由 crontab 定时 GET 调用(与 UpdateState 类同,依赖网络隔离)。
  7. */
  8. class ProxySync extends API {
  9. constructor() {
  10. super()
  11. this.noEncrypt()
  12. this.setPath('/Corn/ProxySync')
  13. this.setMethod('GET')
  14. }
  15. async onRequest(req, res) {
  16. try {
  17. res.json({ ...BaseStdResponse.OK })
  18. try {
  19. const g = await getGlobalOrThrow()
  20. const url = String(g.import_url || '').trim()
  21. if (!url) {
  22. this.logger.error('[Corn/ProxySync] import_url 为空')
  23. return
  24. }
  25. const impr = await importFromRemoteUrl(url, 'cron')
  26. this.logger.info(`[Corn/ProxySync] 导入完成 imported=${impr.imported} url=${url}`)
  27. } catch (e) {
  28. this.logger.error(`[Corn/ProxySync] 导入失败: ${e.stack || e}`)
  29. }
  30. try {
  31. const st = await batchCheckProxies(null, { logger: this.logger })
  32. this.logger.info(
  33. `[Corn/ProxySync] 探活完成 total=${st.total} ok=${st.ok} fail=${st.fail} probe=${st.probeUrl}`
  34. )
  35. } catch (e) {
  36. this.logger.error(`[Corn/ProxySync] 探活失败: ${e.stack || e}`)
  37. }
  38. } catch (e) {
  39. this.logger.error(`[Corn/ProxySync]: ${e.stack || e}`)
  40. }
  41. }
  42. }
  43. module.exports.ProxySync = ProxySync