import cron from 'node-cron' import { prisma } from './db.js' import mysql from 'mysql2/promise' import { fetchNewsList, persistNews } from '../scripts/fetchers/news.fetcher.js' import { checkAfterRefresh } from './alert-engine.js' function parseUrl(url) { const u = new URL(url) return { host: u.hostname, port: Number(u.port) || 3306, user: decodeURIComponent(u.username), password: decodeURIComponent(u.password), database: u.pathname.replace(/^\//, '') } } async function openConn() { return mysql.createConnection(parseUrl(process.env.DATABASE_URL)) } // 每天凌晨 3:00 (本地时间) 拉取新闻 + 跑跨源对比 function scheduleNews() { cron.schedule('0 3 * * *', async () => { console.log('[cron] 3:00 触发') try { const list = await fetchNewsList() const r = await persistNews(list) console.log('[cron] 新闻入库: 新增 ' + r.inserted + ' / 跳过 ' + r.skipped) const conn = await openConn() try { const a = await checkAfterRefresh(conn) console.log('[cron] 报警检测: 新增 ' + a.inserted + ' 条 (扫描 ' + a.scanned + ')') } finally { await conn.end() } } catch (e) { console.error('[cron] 任务失败:', e.message) } }) console.log('[cron] 已注册: 每天 03:00 拉取新闻 + 跨源报警检测') } scheduleNews()