فهرست منبع

Implement node-cron template

Shun Miyazawa 1 سال پیش
والد
کامیت
503334822f
2فایلهای تغییر یافته به همراه49 افزوده شده و 0 حذف شده
  1. 44 0
      apps/app/src/features/openai/server/services/thread-deletion-cron.ts
  2. 5 0
      apps/app/src/server/crowi/index.js

+ 44 - 0
apps/app/src/features/openai/server/services/thread-deletion-cron.ts

@@ -0,0 +1,44 @@
+import nodeCron from 'node-cron';
+
+import loggerFactory from '~/utils/logger';
+
+const logger = loggerFactory('growi:service:thread-deletion-cron');
+
+class ThreadDeletionCronService {
+
+  cronJob: nodeCron.ScheduledTask;
+
+  startCron(): void {
+    // Executed at 0 minutes of every hour
+    // const cronSchedule = '0 * * * *';
+
+    // debug mode
+    const cronSchedule = '* * * * *';
+
+    this.cronJob?.stop();
+    this.cronJob = this.generateCronJob(cronSchedule);
+    this.cronJob.start();
+  }
+
+  stopCron(): void {
+    this.cronJob.stop();
+  }
+
+  async executeJob(): Promise<void> {
+    // implement
+  }
+
+  private generateCronJob(cronSchedule: string) {
+    return nodeCron.schedule(cronSchedule, async() => {
+      try {
+        this.executeJob();
+      }
+      catch (e) {
+        logger.error(e);
+      }
+    });
+  }
+
+}
+
+export default ThreadDeletionCronService;

+ 5 - 0
apps/app/src/server/crowi/index.js

@@ -12,6 +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 QuestionnaireService from '~/features/questionnaire/server/service/questionnaire';
 import QuestionnaireCronService from '~/features/questionnaire/server/service/questionnaire-cron';
 import loggerFactory from '~/utils/logger';
@@ -102,6 +103,7 @@ class Crowi {
     this.commentService = null;
     this.questionnaireService = null;
     this.questionnaireCronService = null;
+    this.openaiThreadDeletionCronService = null;
 
     this.tokens = null;
 
@@ -312,6 +314,9 @@ Crowi.prototype.setupSocketIoService = async function() {
 Crowi.prototype.setupCron = function() {
   this.questionnaireCronService = new QuestionnaireCronService(this);
   this.questionnaireCronService.startCron();
+
+  this.openaiThreadDeletionCronService = new OpenaiThreadDeletionCronService();
+  this.openaiThreadDeletionCronService.startCron();
 };
 
 Crowi.prototype.setupQuestionnaireService = function() {