Docker Build and Push / build-image (push) Successful in 2m37s
- 宏观只保留本地 新闻/经济文章, 外接 ifinance categories[] 动态成为 tab (纯前端直连, CORS/_headers, https) - 报警从宏观迁到监控第 4 个 tab (保留 Alert 模块, 供未来新增报警源) - 彻底删除油价/经济数据/策略研究: 前端组件+api、后端 apizero/data 路由、cron、fetchers、种子数据 - 新增迁移 DROP Indicator/IndicatorPoint/Strategy/OilPriceHistory; 重新生成 Prisma Client - CSP 放开 *.honor3.com (含端口通配), 避免新增子域反复重装外壳
53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
import cron from 'node-cron'
|
|
|
|
// scripts/ 下的可选脚本模块 (部署容器可能缺失或依赖不全): 惰性加载,
|
|
// 单个 fetcher 缺失只降级对应任务, 不拖垮 cron 整体注册。
|
|
async function importNewsFetcher() {
|
|
const mod = await import('../scripts/fetchers/news.fetcher.js')
|
|
return { fetchNewsList: mod.fetchNewsList, persistNews: mod.persistNews }
|
|
}
|
|
|
|
async function alertError(taskName, message) {
|
|
try {
|
|
const { insertCronAlert } = await import('../scripts/lib/cron-alert.js')
|
|
await insertCronAlert(taskName, message)
|
|
} catch (e) {
|
|
console.error('[cron] 报警写入失败(忽略):', e.message)
|
|
}
|
|
}
|
|
|
|
// 每天 6:00 (Asia/Shanghai) 拉取新闻, 出错生成报警
|
|
function scheduleNews() {
|
|
cron.schedule('0 6 * * *', async () => {
|
|
console.log('[cron] 6:00 触发')
|
|
try {
|
|
const { fetchNewsList, persistNews } = await importNewsFetcher()
|
|
const list = await fetchNewsList()
|
|
const r = await persistNews(list)
|
|
console.log('[cron] 新闻入库: 新增 ' + r.inserted + ' / 跳过 ' + r.skipped)
|
|
} catch (e) {
|
|
console.error('[cron] 任务失败:', e.message)
|
|
await alertError('新闻拉取', e.message)
|
|
}
|
|
}, { timezone: 'Asia/Shanghai' })
|
|
console.log('[cron] 已注册: 每天 06:00 拉取新闻')
|
|
}
|
|
|
|
// 每小时兜底: 任务自动归档扫描 (T-ARC-02; 项目加载时另有读时惰性执行)
|
|
function scheduleAutoArchive() {
|
|
cron.schedule('30 * * * *', async () => {
|
|
try {
|
|
const { runAutoArchiveSweep } = await import('./task-domain/archive.js')
|
|
const n = await runAutoArchiveSweep()
|
|
if (n > 0) console.log('[cron] 自动归档:', n, '条')
|
|
} catch (e) {
|
|
console.error('[cron] 自动归档失败:', e.message)
|
|
await alertError('任务自动归档', e.message)
|
|
}
|
|
}, { timezone: 'Asia/Shanghai' })
|
|
console.log('[cron] 已注册: 每小时 30 分 任务自动归档扫描')
|
|
}
|
|
|
|
scheduleNews()
|
|
scheduleAutoArchive()
|