HttpApiController.js 1.3 KB

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