PersistorFactory.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const Logger = require('logger-sharelatex')
  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. paths: settings.paths,
  17. Metrics: settings.Metrics
  18. })
  19. case 'gcs':
  20. return new GcsPersistor(
  21. Object.assign({}, settings.gcs, { Metrics: settings.Metrics })
  22. )
  23. default:
  24. throw new SettingsError({ message: 'unknown backend', info: { backend } })
  25. }
  26. }
  27. module.exports = function create(settings) {
  28. Logger.info(
  29. {
  30. backend: settings.backend,
  31. fallback: settings.fallback && settings.fallback.backend
  32. },
  33. 'Loading backend'
  34. )
  35. if (!settings.backend) {
  36. throw new SettingsError({
  37. message: 'no backend specified - config incomplete',
  38. info: {}
  39. })
  40. }
  41. let persistor = getPersistor(settings.backend, settings)
  42. if (settings.fallback && settings.fallback.backend) {
  43. const primary = persistor
  44. const fallback = getPersistor(settings.fallback.backend, settings)
  45. persistor = new MigrationPersistor(
  46. primary,
  47. fallback,
  48. Object.assign({}, settings.fallback, { Metrics: settings.Metrics })
  49. )
  50. }
  51. return persistor
  52. }