file-uploader-switch.ts 1.7 KB

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