AdminController.coffee 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. metrics = require("metrics-sharelatex")
  2. logger = require('logger-sharelatex')
  3. _ = require('underscore')
  4. User = require('../../models/User').User
  5. Project = require('../../models/Project').Project
  6. DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler')
  7. Settings = require('settings-sharelatex')
  8. util = require('util')
  9. RecurlyWrapper = require('../Subscription/RecurlyWrapper')
  10. SubscriptionHandler = require('../Subscription/SubscriptionHandler')
  11. projectEntityHandler = require('../Project/ProjectEntityHandler')
  12. TpdsUpdateSender = require("../ThirdPartyDataStore/TpdsUpdateSender")
  13. EditorRealTimeController = require("../Editor/EditorRealTimeController")
  14. SystemMessageManager = require("../SystemMessages/SystemMessageManager")
  15. oneMinInMs = 60 * 1000
  16. updateOpenConnetionsMetrics = ()->
  17. metrics.gauge "open_connections.socketio", require("../../infrastructure/Server").io?.sockets?.clients()?.length
  18. metrics.gauge "open_connections.http", _.size(require('http').globalAgent?.sockets)
  19. metrics.gauge "open_connections.https", _.size(require('https').globalAgent?.sockets)
  20. setTimeout updateOpenConnetionsMetrics, oneMinInMs
  21. setTimeout updateOpenConnetionsMetrics, oneMinInMs
  22. module.exports = AdminController =
  23. index : (req, res, next)=>
  24. http = require('http')
  25. openSockets = {}
  26. for url, agents of require('http').globalAgent.sockets
  27. openSockets["http://#{url}"] = (agent._httpMessage.path for agent in agents)
  28. for url, agents of require('https').globalAgent.sockets
  29. openSockets["https://#{url}"] = (agent._httpMessage.path for agent in agents)
  30. SystemMessageManager.getMessagesFromDB (error, systemMessages) ->
  31. return next(error) if error?
  32. res.render 'admin/index',
  33. title: 'System Admin'
  34. openSockets: openSockets
  35. systemMessages: systemMessages
  36. registerNewUser: (req, res, next) ->
  37. res.render 'admin/register'
  38. dissconectAllUsers: (req, res)=>
  39. logger.warn "disconecting everyone"
  40. EditorRealTimeController.emitToAll 'forceDisconnect', "Sorry, we are performing a quick update to the editor and need to close it down. Please refresh the page to continue."
  41. res.sendStatus(200)
  42. closeEditor : (req, res)->
  43. logger.warn "closing editor"
  44. Settings.editorIsOpen = req.body.isOpen
  45. res.sendStatus(200)
  46. writeAllToMongo : (req, res)->
  47. logger.log "writing all docs to mongo"
  48. Settings.mongo.writeAll = true
  49. DocumentUpdaterHandler.flushAllDocsToMongo ()->
  50. logger.log "all docs have been saved to mongo"
  51. res.send()
  52. syncUserToSubscription: (req, res)->
  53. {user_id, subscription_id} = req.body
  54. RecurlyWrapper.getSubscription subscription_id, {}, (err, subscription)->
  55. User.findById user_id, (err, user)->
  56. SubscriptionHandler.syncSubscriptionToUser subscription, user._id, (err)->
  57. logger.log user_id:user_id, subscription_id:subscription_id, "linked account to subscription"
  58. res.send()
  59. flushProjectToTpds: (req, res)->
  60. projectEntityHandler.flushProjectToThirdPartyDataStore req.body.project_id, (err)->
  61. res.sendStatus 200
  62. pollDropboxForUser: (req, res)->
  63. user_id = req.body.user_id
  64. TpdsUpdateSender.pollDropboxForUser user_id, () ->
  65. res.sendStatus 200
  66. createMessage: (req, res, next) ->
  67. SystemMessageManager.createMessage req.body.content, (error) ->
  68. return next(error) if error?
  69. res.sendStatus 200
  70. clearMessages: (req, res, next) ->
  71. SystemMessageManager.clearMessages (error) ->
  72. return next(error) if error?
  73. res.sendStatus 200