CooldownManager.mjs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import RedisWrapper from '../../infrastructure/RedisWrapper.js'
  2. import logger from '@overleaf/logger'
  3. import { promisify } from '@overleaf/promise-utils'
  4. const rclient = RedisWrapper.client('cooldown')
  5. const COOLDOWN_IN_SECONDS = 60 * 10
  6. const CooldownManager = {
  7. _buildKey(projectId) {
  8. return `Cooldown:{${projectId}}`
  9. },
  10. putProjectOnCooldown(projectId, callback) {
  11. if (callback == null) {
  12. callback = function () {}
  13. }
  14. logger.debug(
  15. { projectId },
  16. `[Cooldown] putting project on cooldown for ${COOLDOWN_IN_SECONDS} seconds`
  17. )
  18. rclient.set(
  19. CooldownManager._buildKey(projectId),
  20. '1',
  21. 'EX',
  22. COOLDOWN_IN_SECONDS,
  23. callback
  24. )
  25. },
  26. isProjectOnCooldown(projectId, callback) {
  27. if (callback == null) {
  28. callback = function () {}
  29. }
  30. rclient.get(CooldownManager._buildKey(projectId), function (err, result) {
  31. if (err != null) {
  32. return callback(err)
  33. }
  34. return callback(null, result === '1')
  35. })
  36. },
  37. }
  38. CooldownManager.promises = {
  39. putProjectOnCooldown: promisify(CooldownManager.putProjectOnCooldown),
  40. isProjectOnCooldown: promisify(CooldownManager.isProjectOnCooldown),
  41. }
  42. export default CooldownManager