questionnaire-cron.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import axios from '~/utils/axios';
  2. import Crowi from '../crowi';
  3. import { QuestionnaireOrderDocument } from '../models/questionnaire/questionnaire-order';
  4. const nodeCron = require('node-cron');
  5. const getRandomInt = (min: number, max: number): number => {
  6. const minInt = Math.ceil(min);
  7. const maxInt = Math.floor(max);
  8. return Math.floor(Math.random() * (maxInt - minInt) + minInt);
  9. };
  10. const sleep = msec => new Promise(resolve => setTimeout(resolve, msec));
  11. class QuestionnaireCronService {
  12. growiQuestionnaireUri: string;
  13. cronSchedule: string;
  14. maxHoursUntilRequest: number;
  15. constructor(crowi: Crowi) {
  16. this.growiQuestionnaireUri = crowi.configManager?.getConfig('crowi', 'app:growiQuestionnaireUri');
  17. this.cronSchedule = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronSchedule');
  18. this.maxHoursUntilRequest = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronMaxHoursUntilRequest');
  19. }
  20. setUpCron(): void {
  21. const maxSecondsUntilRequest = this.maxHoursUntilRequest * 60 * 60;
  22. this.questionnaireOrderGetCron(this.cronSchedule, maxSecondsUntilRequest);
  23. }
  24. questionnaireOrderGetCron(cronSchedule: string, maxSecondsUntilRequest: number): void {
  25. nodeCron.schedule(cronSchedule, async() => {
  26. const secToSleep = getRandomInt(0, maxSecondsUntilRequest);
  27. await sleep(secToSleep * 1000);
  28. try {
  29. const response = await axios.get(`${this.growiQuestionnaireUri}/questionnaire-order/index`);
  30. const questionnaireOrders: QuestionnaireOrderDocument[] = response.data.questionnaireOrders;
  31. console.log(response.data);
  32. console.log(questionnaireOrders);
  33. }
  34. catch (e) {
  35. console.log(e);
  36. }
  37. }).start();
  38. }
  39. }
  40. export default QuestionnaireCronService;