PersistorFactory.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const Logger = require('@overleaf/logger')
  2. const { SettingsError } = require('./Errors')
  3. const GcsPersistor = require('./GcsPersistor')
  4. const S3Persistor = require('./S3Persistor')
  5. const FSPersistor = require('./FSPersistor')
  6. const MigrationPersistor = require('./MigrationPersistor')
  7. function getPersistor(backend, settings) {
  8. switch (backend) {
  9. case 'aws-sdk':
  10. case 's3':
  11. return new S3Persistor(
  12. Object.assign({}, settings.s3, { Metrics: settings.Metrics })
  13. )
  14. case 'fs':
  15. return new FSPersistor({
  16. useSubdirectories: settings.useSubdirectories,
  17. paths: settings.paths,
  18. Metrics: settings.Metrics,
  19. })
  20. case 'gcs':
  21. return new GcsPersistor(
  22. Object.assign({}, settings.gcs, { Metrics: settings.Metrics })
  23. )
  24. default:
  25. throw new SettingsError('unknown backend', { backend })
  26. }
  27. }
  28. module.exports = function create(settings) {
  29. Logger.info(
  30. {
  31. backend: settings.backend,
  32. fallback: settings.fallback && settings.fallback.backend,
  33. },
  34. 'Loading backend'
  35. )
  36. if (!settings.backend) {
  37. throw new SettingsError('no backend specified - config incomplete')
  38. }
  39. let persistor = getPersistor(settings.backend, settings)
  40. if (settings.fallback && settings.fallback.backend) {
  41. const primary = persistor
  42. const fallback = getPersistor(settings.fallback.backend, settings)
  43. persistor = new MigrationPersistor(
  44. primary,
  45. fallback,
  46. Object.assign({}, settings.fallback, { Metrics: settings.Metrics })
  47. )
  48. }
  49. return persistor
  50. }