file-uploader-switch.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import loggerFactory from '~/utils/logger';
  2. import type Crowi from '../crowi';
  3. import S2sMessage from '../models/vo/s2s-message';
  4. import { configManager } from './config-manager';
  5. import type { S2sMessagingService } from './s2s-messaging/base';
  6. import type { S2sMessageHandlable } from './s2s-messaging/handlable';
  7. const logger = loggerFactory('growi:service:FileUploaderSwitch');
  8. class FileUploaderSwitch implements S2sMessageHandlable {
  9. crowi: Crowi;
  10. s2sMessagingService: S2sMessagingService;
  11. lastLoadedAt?: Date;
  12. constructor(crowi: Crowi) {
  13. this.crowi = crowi;
  14. this.s2sMessagingService = crowi.s2sMessagingService;
  15. }
  16. /**
  17. * @inheritdoc
  18. */
  19. shouldHandleS2sMessage(s2sMessage) {
  20. const { eventName, updatedAt } = s2sMessage;
  21. if (eventName !== 'fileUploadServiceUpdated' || updatedAt == null) {
  22. return false;
  23. }
  24. return this.lastLoadedAt == null || this.lastLoadedAt < new Date(s2sMessage.updatedAt);
  25. }
  26. /**
  27. * @inheritdoc
  28. */
  29. async handleS2sMessage(s2sMessage) {
  30. logger.info('Reset fileupload service by pubsub notification');
  31. await configManager.loadConfigs();
  32. await this.crowi.setUpFileUpload(true);
  33. }
  34. async publishUpdatedMessage() {
  35. const { s2sMessagingService } = this;
  36. if (s2sMessagingService != null) {
  37. const s2sMessage = new S2sMessage('fileUploadServiceUpdated', { updatedAt: new Date() });
  38. try {
  39. await s2sMessagingService.publish(s2sMessage);
  40. }
  41. catch (e) {
  42. logger.error('Failed to publish update message with S2sMessagingService: ', e.message);
  43. }
  44. }
  45. }
  46. }
  47. module.exports = FileUploaderSwitch;