issue-ai/scripts/monitor-worker.ts

47 lines
1.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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)
})