47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
// scripts/monitor-worker.ts
|
||
const path = require('path')
|
||
const dbPath = process.env.DATABASE_PATH || path.join(process.cwd(), 'data', 'issue.db')
|
||
process.env.DATABASE_PATH = dbPath
|
||
|
||
const { getDb } = require('../src/lib/db')
|
||
const { initDatabase } = require('../src/lib/db-schema')
|
||
const { BackgroundWorker } = require('../src/lib/monitor/worker')
|
||
const { setSetting, getSetting } = require('../src/lib/monitor/settings-manager')
|
||
|
||
initDatabase()
|
||
const db = getDb()
|
||
|
||
// 生成加密密钥(首次启动)
|
||
if (!getSetting('monitor.encryption_key')) {
|
||
const crypto = require('crypto')
|
||
const newKey = crypto.randomBytes(32).toString('hex')
|
||
setSetting('monitor.encryption_key', newKey, 'security')
|
||
console.log('[Worker] 已生成加密密钥')
|
||
}
|
||
|
||
const worker = new BackgroundWorker()
|
||
if (getSetting('monitor.enabled') === 'true') {
|
||
worker.start()
|
||
console.log('[Worker] 邮件监控已启动')
|
||
} else {
|
||
console.log('[Worker] 邮件监控未启用,等待 API 启用')
|
||
}
|
||
|
||
// 保持进程存活,定期检查监控状态是否变更
|
||
const CHECK_INTERVAL = 30_000 // 30秒
|
||
setInterval(() => {
|
||
if (getSetting('monitor.enabled') === 'true' && !worker.cronJob) {
|
||
worker.start()
|
||
console.log('[Worker] 检测到监控已启用,自动启动')
|
||
} else if (getSetting('monitor.enabled') !== 'true' && worker.cronJob) {
|
||
worker.stop()
|
||
console.log('[Worker] 检测到监控已禁用,自动停止')
|
||
}
|
||
}, CHECK_INTERVAL)
|
||
|
||
process.on('SIGTERM', () => {
|
||
console.log('[Worker] 收到 SIGTERM,正在停止...')
|
||
worker.stop()
|
||
process.exit(0)
|
||
})
|