Browse Source

refactor starting cron services

Yuki Takei 1 year ago
parent
commit
991464c096

+ 20 - 0
apps/app/src/features/openai/server/services/cron/index.ts

@@ -0,0 +1,20 @@
+import loggerFactory from '~/utils/logger';
+
+import { isAiEnabled } from '../is-ai-enabled';
+
+
+const logger = loggerFactory('growi:openai:service:cron');
+
+export const startCronIfEnabled = async(): Promise<void> => {
+  if (isAiEnabled()) {
+    logger.info('Starting cron service for thread deletion');
+    const { ThreadDeletionCronService } = await import('./thread-deletion-cron');
+    const threadDeletionCronService = new ThreadDeletionCronService();
+    threadDeletionCronService.startCron();
+
+    logger.info('Starting cron service for vector store file deletion');
+    const { VectorStoreFileDeletionCronService } = await import('./vector-store-file-deletion-cron');
+    const vectorStoreFileDeletionCronService = new VectorStoreFileDeletionCronService();
+    vectorStoreFileDeletionCronService.startCron();
+  }
+};

+ 5 - 6
apps/app/src/features/openai/server/services/thread-deletion-cron.ts → apps/app/src/features/openai/server/services/cron/thread-deletion-cron.ts

@@ -4,11 +4,13 @@ import { configManager } from '~/server/service/config-manager';
 import loggerFactory from '~/utils/logger';
 import { getRandomIntInRange } from '~/utils/rand';
 
-import { getOpenaiService, type IOpenaiService } from './openai';
+import { isAiEnabled } from '../is-ai-enabled';
+import { getOpenaiService, type IOpenaiService } from '../openai';
+
 
 const logger = loggerFactory('growi:service:thread-deletion-cron');
 
-class ThreadDeletionCronService {
+export class ThreadDeletionCronService {
 
   cronJob: nodeCron.ScheduledTask;
 
@@ -25,8 +27,7 @@ class ThreadDeletionCronService {
   sleep = (msec: number): Promise<void> => new Promise(resolve => setTimeout(resolve, msec));
 
   startCron(): void {
-    const isAiEnabled = configManager.getConfig('crowi', 'app:aiEnabled');
-    if (!isAiEnabled) {
+    if (!isAiEnabled()) {
       return;
     }
 
@@ -67,5 +68,3 @@ class ThreadDeletionCronService {
   }
 
 }
-
-export default ThreadDeletionCronService;

+ 4 - 6
apps/app/src/features/openai/server/services/vector-store-file-deletion-cron.ts → apps/app/src/features/openai/server/services/cron/vector-store-file-deletion-cron.ts

@@ -4,11 +4,12 @@ import { configManager } from '~/server/service/config-manager';
 import loggerFactory from '~/utils/logger';
 import { getRandomIntInRange } from '~/utils/rand';
 
-import { getOpenaiService, type IOpenaiService } from './openai';
+import { isAiEnabled } from '../is-ai-enabled';
+import { getOpenaiService, type IOpenaiService } from '../openai';
 
 const logger = loggerFactory('growi:service:vector-store-file-deletion-cron');
 
-class VectorStoreFileDeletionCronService {
+export class VectorStoreFileDeletionCronService {
 
   cronJob: nodeCron.ScheduledTask;
 
@@ -25,8 +26,7 @@ class VectorStoreFileDeletionCronService {
   sleep = (msec: number): Promise<void> => new Promise(resolve => setTimeout(resolve, msec));
 
   startCron(): void {
-    const isAiEnabled = configManager.getConfig('crowi', 'app:aiEnabled');
-    if (!isAiEnabled) {
+    if (!isAiEnabled()) {
       return;
     }
 
@@ -67,5 +67,3 @@ class VectorStoreFileDeletionCronService {
   }
 
 }
-
-export default VectorStoreFileDeletionCronService;

+ 3 - 8
apps/app/src/server/crowi/index.js

@@ -12,8 +12,7 @@ import pkg from '^/package.json';
 
 import { KeycloakUserGroupSyncService } from '~/features/external-user-group/server/service/keycloak-user-group-sync';
 import { LdapUserGroupSyncService } from '~/features/external-user-group/server/service/ldap-user-group-sync';
-import OpenaiThreadDeletionCronService from '~/features/openai/server/services/thread-deletion-cron';
-import OpenaiVectorStoreFileDeletionCronService from '~/features/openai/server/services/vector-store-file-deletion-cron';
+import { startCronIfEnabled as startOpenaiCronIfEnabled } from '~/features/openai/server/services/cron';
 import QuestionnaireService from '~/features/questionnaire/server/service/questionnaire';
 import QuestionnaireCronService from '~/features/questionnaire/server/service/questionnaire-cron';
 import loggerFactory from '~/utils/logger';
@@ -322,15 +321,11 @@ Crowi.prototype.setupSocketIoService = async function() {
   this.socketIoService = new SocketIoService(this);
 };
 
-Crowi.prototype.setupCron = function() {
+Crowi.prototype.setupCron = async function() {
   this.questionnaireCronService = new QuestionnaireCronService(this);
   this.questionnaireCronService.startCron();
 
-  this.openaiThreadDeletionCronService = new OpenaiThreadDeletionCronService();
-  this.openaiThreadDeletionCronService.startCron();
-
-  this.openaiThreadDeletionCronService = new OpenaiVectorStoreFileDeletionCronService();
-  this.openaiThreadDeletionCronService.startCron();
+  startOpenaiCronIfEnabled();
 };
 
 Crowi.prototype.setupQuestionnaireService = function() {