|
|
@@ -2,6 +2,7 @@ import nodeCron from 'node-cron';
|
|
|
|
|
|
import { configManager } from '~/server/service/config-manager';
|
|
|
import loggerFactory from '~/utils/logger';
|
|
|
+import { getRandomIntInRange } from '~/utils/rand';
|
|
|
|
|
|
import { getOpenaiService, type IOpenaiService } from './openai';
|
|
|
|
|
|
@@ -19,6 +20,8 @@ class VectorStoreFileDeletionCronService {
|
|
|
|
|
|
vectorStoreFileDeletionApiCallInterval: number;
|
|
|
|
|
|
+ sleep = (msec: number): Promise<void> => new Promise(resolve => setTimeout(resolve, msec));
|
|
|
+
|
|
|
startCron(): void {
|
|
|
const isAiEnabled = configManager.getConfig('crowi', 'app:aiEnabled');
|
|
|
if (!isAiEnabled) {
|
|
|
@@ -48,6 +51,10 @@ class VectorStoreFileDeletionCronService {
|
|
|
private generateCronJob() {
|
|
|
return nodeCron.schedule(this.vectorStoreFileDeletionCronExpression, async() => {
|
|
|
try {
|
|
|
+ // Sleep for a random number of minutes between 0 and 60 to distribute request load
|
|
|
+ const randomMilliseconds = getRandomIntInRange(0, 60) * 60 * 1000;
|
|
|
+ this.sleep(randomMilliseconds);
|
|
|
+
|
|
|
await this.executeJob();
|
|
|
}
|
|
|
catch (e) {
|