From 4b188ce1205f45eb696370b0bd89e1da24d8fc16 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 22 May 2017 13:31:02 +0100 Subject: [PATCH 1/5] support separate processes for web and api via an environment variable WEB_TYPE --- .../app/coffee/infrastructure/Server.coffee | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/services/web/app/coffee/infrastructure/Server.coffee b/services/web/app/coffee/infrastructure/Server.coffee index 4c031a8bd1..ab636e8d53 100644 --- a/services/web/app/coffee/infrastructure/Server.coffee +++ b/services/web/app/coffee/infrastructure/Server.coffee @@ -161,16 +161,28 @@ app.get "/heapdump", (req, res)-> logger.info ("creating HTTP server").yellow server = require('http').createServer(app) -# process api routes first, if nothing matched fall though and use -# web middlewear + routes -app.use(apiRouter) -app.use(ErrorController.handleApiError) -app.use(webRouter) -app.use(ErrorController.handleError) +# can set WEB_TYPE=api-only or WEB_TYPE=web-only for separate web and +# api processes +switch process.env.WEB_TYPE + when "api-only" + logger.info("providing api router"); + app.use(apiRouter) + app.use(ErrorController.handleApiError) + when "web-only" + logger.info("providing web router"); + app.use(webRouter) + app.use(ErrorController.handleError) + else + logger.info("providing web and api router"); + # process api routes first, if nothing matched fall though and use + # web middleware + routes + app.use(apiRouter) + app.use(ErrorController.handleApiError) + app.use(webRouter) + app.use(ErrorController.handleError) router = new Router(webRouter, apiRouter) - module.exports = app: app server: server From 62d6933886c6db01ba9dd4d2d70d09e19620cada Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Tue, 6 Jun 2017 11:31:29 +0100 Subject: [PATCH 2/5] use settings instead of ENV for web/api split --- .../app/coffee/infrastructure/Server.coffee | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/services/web/app/coffee/infrastructure/Server.coffee b/services/web/app/coffee/infrastructure/Server.coffee index ab636e8d53..c42590b15f 100644 --- a/services/web/app/coffee/infrastructure/Server.coffee +++ b/services/web/app/coffee/infrastructure/Server.coffee @@ -161,25 +161,21 @@ app.get "/heapdump", (req, res)-> logger.info ("creating HTTP server").yellow server = require('http').createServer(app) -# can set WEB_TYPE=api-only or WEB_TYPE=web-only for separate web and -# api processes -switch process.env.WEB_TYPE - when "api-only" - logger.info("providing api router"); - app.use(apiRouter) - app.use(ErrorController.handleApiError) - when "web-only" - logger.info("providing web router"); - app.use(webRouter) - app.use(ErrorController.handleError) - else - logger.info("providing web and api router"); - # process api routes first, if nothing matched fall though and use - # web middleware + routes - app.use(apiRouter) - app.use(ErrorController.handleApiError) - app.use(webRouter) - app.use(ErrorController.handleError) +# provide settings for separate web and api processes +# if enableApiRouter and enableWebRouter are not defined they default +# to true. +notDefined = (x) -> !x? +enableApiRouter = Settings.web?.enableApiRouter +if enableApiRouter or notDefined(enableApiRouter) + logger.info("providing api router"); + app.use(apiRouter) + app.use(ErrorController.handleApiError) + +enableWebRouter = Settings.web?.enableWebRouter +if enableWebRouter or notDefined(enableWebRouter) + logger.info("providing web router"); + app.use(webRouter) + app.use(ErrorController.handleError) router = new Router(webRouter, apiRouter) From 02cb0f2295dd3365a942035ba6d1076941cef43e Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 19 Jun 2017 15:52:04 +0100 Subject: [PATCH 3/5] make compiler health check available on web --- services/web/app/coffee/router.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index 549cc50e81..762d8065e4 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -276,7 +276,7 @@ module.exports = class Router apiRouter.get '/health_check', HealthCheckController.check apiRouter.get '/health_check/redis', HealthCheckController.checkRedis - apiRouter.get "/status/compiler/:Project_id", AuthorizationMiddlewear.ensureUserCanReadProject, (req, res) -> + webRouter.get "/status/compiler/:Project_id", AuthorizationMiddlewear.ensureUserCanReadProject, (req, res) -> project_id = req.params.Project_id sendRes = _.once (statusCode, message)-> res.status statusCode From d32a3fbaf5fb6fae1b0ce4af7e6b1a1b2b3df6ca Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 19 Jun 2017 15:54:14 +0100 Subject: [PATCH 4/5] support status and health check on web and web-api --- services/web/app/coffee/router.coffee | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index 762d8065e4..fde8b6cc8e 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -267,13 +267,18 @@ module.exports = class Router apiRouter.get '/perfTest', (req,res)-> res.send("hello") - apiRouter.get '/status', (req,res)-> + webRouter.get '/status', (req,res)-> res.send("websharelatex is up") + apiRouter.get '/status', (req,res)-> + res.send("websharelatex api is up") webRouter.get '/dev/csrf', (req, res) -> res.send res.locals.csrfToken + webRouter.get '/health_check', HealthCheckController.check apiRouter.get '/health_check', HealthCheckController.check + + webRouter.get '/health_check/redis', HealthCheckController.checkRedis apiRouter.get '/health_check/redis', HealthCheckController.checkRedis webRouter.get "/status/compiler/:Project_id", AuthorizationMiddlewear.ensureUserCanReadProject, (req, res) -> From bac275962f6577a92c328739a0036511e69fdd84 Mon Sep 17 00:00:00 2001 From: Brian Gough Date: Mon, 19 Jun 2017 15:54:57 +0100 Subject: [PATCH 5/5] put /ip on web router --- services/web/app/coffee/router.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index fde8b6cc8e..07c907c0f1 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -304,7 +304,7 @@ module.exports = class Router else sendRes 500, "Compiler returned failure #{status}" - apiRouter.get "/ip", (req, res, next) -> + webRouter.get "/ip", (req, res, next) -> res.send({ ip: req.ip ips: req.ips