Synchronize server startup

This prevents an edge case where the server begins processing inbound API / AP requests before any of the chart / management daemons are ready, potentially leading to incorrect chart statistics.
This commit is contained in:
Hazelnoot 2024-11-27 23:19:14 -05:00 committed by fly_mc
parent cd6c87af0c
commit 2c4fc485e4
3 changed files with 15 additions and 11 deletions

View file

@ -12,21 +12,25 @@ import { QueueStatsService } from '@/daemons/QueueStatsService.js';
import { ServerStatsService } from '@/daemons/ServerStatsService.js';
import { ServerService } from '@/server/ServerService.js';
import { MainModule } from '@/MainModule.js';
import { envOption } from '@/env.js';
export async function server() {
const app = await NestFactory.createApplicationContext(MainModule, {
logger: new NestLogger(),
});
if (process.env.NODE_ENV !== 'test') {
await app.get(ChartManagementService).start();
}
if (!envOption.noDaemons) {
await app.get(QueueStatsService).start();
await app.get(ServerStatsService).start();
}
// Start server last so the other services can register hooks first
const serverService = app.get(ServerService);
await serverService.launch();
if (process.env.NODE_ENV !== 'test') {
app.get(ChartManagementService).start();
app.get(QueueStatsService).start();
app.get(ServerStatsService).start();
}
return app;
}
@ -35,8 +39,8 @@ export async function jobQueue() {
logger: new NestLogger(),
});
jobQueue.get(QueueProcessorService).start();
jobQueue.get(ChartManagementService).start();
await jobQueue.get(QueueProcessorService).start();
await jobQueue.get(ChartManagementService).start();
return jobQueue;
}

View file

@ -33,7 +33,7 @@ export class QueueStatsService implements OnApplicationShutdown {
* Report queue stats regularly
*/
@bindThis
public start(): void {
public async start(): Promise<void> {
const log = [] as any[];
ev.on('requestQueueStatsLog', x => {
@ -82,7 +82,7 @@ export class QueueStatsService implements OnApplicationShutdown {
activeInboxJobs = 0;
};
tick();
await tick();
this.intervalId = setInterval(tick, interval);
}

View file

@ -68,7 +68,7 @@ export class ServerStatsService implements OnApplicationShutdown {
if (log.length > 200) log.pop();
};
tick();
await tick();
this.intervalId = setInterval(tick, interval);
}