Queues.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const Queue = require('bull')
  2. const Settings = require('settings-sharelatex')
  3. // Bull will keep a fixed number of the most recently completed jobs. This is
  4. // useful to inspect recently completed jobs. The bull prometheus exporter also
  5. // uses the completed job records to report on job duration.
  6. const MAX_COMPLETED_JOBS_RETAINED = 10000
  7. const MAX_FAILED_JOBS_RETAINED = 50000
  8. const queues = {}
  9. function getAnalyticsEventsQueue() {
  10. if (Settings.analytics.enabled) {
  11. return getOrCreateQueue('analytics-events')
  12. }
  13. }
  14. function getAnalyticsEditingSessionsQueue() {
  15. if (Settings.analytics.enabled) {
  16. return getOrCreateQueue('analytics-editing-sessions')
  17. }
  18. }
  19. function getAnalyticsUserPropertiesQueue() {
  20. if (Settings.analytics.enabled) {
  21. return getOrCreateQueue('analytics-user-properties')
  22. }
  23. }
  24. function getOnboardingEmailsQueue() {
  25. return getOrCreateQueue('emails-onboarding')
  26. }
  27. function getPostRegistrationAnalyticsQueue() {
  28. return getOrCreateQueue('post-registration-analytics')
  29. }
  30. function getOrCreateQueue(queueName, defaultJobOptions) {
  31. if (!queues[queueName]) {
  32. queues[queueName] = new Queue(queueName, {
  33. redis: Settings.redis.queues,
  34. defaultJobOptions: {
  35. removeOnComplete: MAX_COMPLETED_JOBS_RETAINED,
  36. removeOnFail: MAX_FAILED_JOBS_RETAINED,
  37. attempts: 11,
  38. backoff: {
  39. type: 'exponential',
  40. delay: 3000,
  41. },
  42. },
  43. })
  44. }
  45. return queues[queueName]
  46. }
  47. module.exports = {
  48. getAnalyticsEventsQueue,
  49. getAnalyticsEditingSessionsQueue,
  50. getAnalyticsUserPropertiesQueue,
  51. getOnboardingEmailsQueue,
  52. getPostRegistrationAnalyticsQueue,
  53. }