feat(MED-87): update status on results

This commit is contained in:
2025-08-11 10:41:01 +03:00
parent d582e222ce
commit 63b86c0abb
8 changed files with 87 additions and 17 deletions

View File

@@ -4,6 +4,8 @@
*/
import { type Instrumentation } from 'next';
const isEnabledInDev = process.env.ENABLE_LOCAL_JOBS === 'true';
export async function register() {
const { registerMonitoringInstrumentation } = await import(
'@kit/monitoring/instrumentation'
@@ -12,6 +14,9 @@ export async function register() {
// Register monitoring instrumentation
// based on the MONITORING_PROVIDER environment variable.
await registerMonitoringInstrumentation();
// Register lightweight in-process job scheduler
await registerJobScheduler();
}
/**
@@ -28,3 +33,53 @@ export const onRequestError: Instrumentation.onRequestError = async (err) => {
await service.ready();
await service.captureException(err as Error);
};
async function registerJobScheduler() {
const isProd = process.env.NODE_ENV === 'production';
if (!isProd && !isEnabledInDev) {
console.info('Job scheduler disabled');
return;
}
// Prevent duplicate intervals on hot reloads/dev
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const globalAny = globalThis as any;
if (globalAny.__mrJobSchedulerInitialized) {
console.info('Job scheduler already initialized');
return;
}
globalAny.__mrJobSchedulerInitialized = true;
let isRunning = false;
const runSyncAnalysisResults = async () => {
if (isRunning) {
console.info('Scheduled job syncAnalysisResults skipped: previous run still in progress');
return;
}
isRunning = true;
try {
// Ensure env variables are loaded for the handler
try {
const { default: loadEnv } = await import('./app/api/job/handler/load-env');
loadEnv();
} catch {
// ignore if not available or already loaded
}
const { default: syncAnalysisResults } = await import(
'./app/api/job/handler/sync-analysis-results'
);
await syncAnalysisResults();
} catch (error) {
// Log and continue; do not crash the process
console.error('Scheduled job syncAnalysisResults failed:', error);
} finally {
isRunning = false;
}
};
// Run every 10 minutes
setTimeout(runSyncAnalysisResults, 15_000);
setInterval(runSyncAnalysisResults, 10 * 60 * 1000);
}