HttpApiController.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* eslint-disable
  2. camelcase,
  3. */
  4. const WebsocketLoadBalancer = require('./WebsocketLoadBalancer')
  5. const DrainManager = require('./DrainManager')
  6. const logger = require('@overleaf/logger')
  7. module.exports = {
  8. sendMessage(req, res) {
  9. logger.debug({ message: req.params.message }, 'sending message')
  10. if (Array.isArray(req.body)) {
  11. for (const payload of req.body) {
  12. WebsocketLoadBalancer.emitToRoom(
  13. req.params.project_id,
  14. req.params.message,
  15. payload
  16. )
  17. }
  18. } else {
  19. WebsocketLoadBalancer.emitToRoom(
  20. req.params.project_id,
  21. req.params.message,
  22. req.body
  23. )
  24. }
  25. res.sendStatus(204)
  26. },
  27. startDrain(req, res) {
  28. const io = req.app.get('io')
  29. let rate = req.query.rate || '4'
  30. rate = parseFloat(rate) || 0
  31. logger.info({ rate }, 'setting client drain rate')
  32. DrainManager.startDrain(io, rate)
  33. res.sendStatus(204)
  34. },
  35. disconnectClient(req, res, next) {
  36. const io = req.app.get('io')
  37. const { client_id } = req.params
  38. const client = io.sockets.sockets[client_id]
  39. if (!client) {
  40. logger.debug({ client_id }, 'api: client already disconnected')
  41. res.sendStatus(404)
  42. return
  43. }
  44. logger.info({ client_id }, 'api: requesting client disconnect')
  45. client.on('disconnect', () => res.sendStatus(204))
  46. client.disconnect()
  47. },
  48. }