diff --git a/backend/src/sync/scheduler.ts b/backend/src/sync/scheduler.ts index a2b83c5..8e4657e 100644 --- a/backend/src/sync/scheduler.ts +++ b/backend/src/sync/scheduler.ts @@ -1,6 +1,9 @@ +import { v4 as uuid } from 'uuid'; import { Cron } from 'croner'; import { syncGitea } from './sync-gitea'; import { analyzeCommitsForOKR } from '../services/okr-ai-sync'; +import { db } from '../db/index'; +import { syncLogs } from '../db/schema'; import { config } from '../config'; let giteaJob: Cron | null = null; @@ -12,6 +15,17 @@ async function runSyncAndAnalyze() { await analyzeCommitsForOKR().catch(e => console.error('[SCHEDULER] AI OKR 分析失败:', e) ); + } else { + const reason = !config.AI_ENABLED ? 'AI_ENABLED=false' : 'AI_API_KEY 为空'; + console.warn(`[SCHEDULER] 跳过 AI 分析: ${reason}`); + await db.insert(syncLogs).values({ + id: uuid(), + source: 'ai_okr', + status: 'error', + message: `AI 分析被跳过: ${reason} (AI_ENABLED=${config.AI_ENABLED}, AI_API_KEY length=${config.AI_API_KEY?.length || 0}, AI_MODEL=${config.AI_MODEL})`, + recordsProcessed: 0, + syncedAt: new Date(), + }); } } @@ -22,7 +36,17 @@ export function startScheduler(): void { await runSyncAndAnalyze(); }); - console.info('[SCHEDULER] Gitea 自动同步已启动(每天 02:00 + 19:00)'); + console.info(`[SCHEDULER] Gitea 自动同步已启动(每天 02:00 + 19:00 UTC), AI_ENABLED=${config.AI_ENABLED}, AI_API_KEY length=${config.AI_API_KEY?.length || 0}`); + + // 启动时立刻写一条诊断日志(不阻塞) + db.insert(syncLogs).values({ + id: uuid(), + source: 'ai_okr', + status: 'success', + message: `[BOOT] Scheduler started. AI_ENABLED=${config.AI_ENABLED}, AI_API_KEY length=${config.AI_API_KEY?.length || 0}, AI_MODEL=${config.AI_MODEL}, AI_BASE_URL=${config.AI_BASE_URL}`, + recordsProcessed: 0, + syncedAt: new Date(), + }).catch(e => console.error('[SCHEDULER] 启动诊断日志写入失败:', e)); // 启动后 10 秒执行一次首次同步 setTimeout(async () => {