add query string parameters for compileGroup= and pdfng=

compileGroup will  bypass mongo check for compileGroup priority
pdfng will pass pdf Range: headers through from user request to CLSI
This commit is contained in:
Brian Gough 2014-12-12 16:47:43 +00:00
parent fbf9111d80
commit 660bb75df4
4 changed files with 34 additions and 20 deletions

View file

@ -25,12 +25,13 @@ module.exports = CompileController =
if req.body?.compiler if req.body?.compiler
options.compiler = req.body.compiler options.compiler = req.body.compiler
logger.log {options, project_id}, "got compile request" logger.log {options, project_id}, "got compile request"
CompileManager.compile project_id, user_id, options, (error, status, outputFiles) -> CompileManager.compile project_id, user_id, options, (error, status, outputFiles, output, limits) ->
return next(error) if error? return next(error) if error?
res.contentType("application/json") res.contentType("application/json")
res.send 200, JSON.stringify { res.send 200, JSON.stringify {
status: status status: status
outputFiles: outputFiles outputFiles: outputFiles
compileGroup: limits.compileGroup
} }
downloadPdf: (req, res, next = (error) ->)-> downloadPdf: (req, res, next = (error) ->)->
@ -69,23 +70,30 @@ module.exports = CompileController =
CompileController.proxyToClsi(req.params.Project_id, req.url, req, res, next) CompileController.proxyToClsi(req.params.Project_id, req.url, req, res, next)
proxyToClsi: (project_id, url, req, res, next = (error) ->) -> proxyToClsi: (project_id, url, req, res, next = (error) ->) ->
CompileManager.getProjectCompileLimits project_id, (error, limits) -> if req.query?.compileGroup
return next(error) if error? CompileController.proxyToClsiWithLimits(project_id, url, {compileGroup: req.query.compileGroup}, req, res, next)
if limits.compileGroup == "priority" else
compilerUrl = Settings.apis.clsi_priority.url CompileManager.getProjectCompileLimits project_id, (error, limits) ->
else return next(error) if error?
compilerUrl = Settings.apis.clsi.url CompileController.proxyToClsiWithLimits(project_id, url, limits, req, res, next)
url = "#{compilerUrl}#{url}"
logger.log url: url, "proxying to CLSI" proxyToClsiWithLimits: (project_id, url, limits, req, res, next = (error) ->) ->
oneMinute = 60 * 1000 if limits.compileGroup == "priority"
# pass through If-* and Range headers for byte serving pdfs compilerUrl = Settings.apis.clsi_priority.url
# do not send any others, potential proxying loop if Host: is passed! else
compilerUrl = Settings.apis.clsi.url
url = "#{compilerUrl}#{url}"
logger.log url: url, "proxying to CLSI"
oneMinute = 60 * 1000
# pass through If-* and Range headers for byte serving pdfs
# do not send any others, potential proxying loop if Host: is passed!
if req.query?.pdfng
newHeaders = {} newHeaders = {}
for h, v of req.headers for h, v of req.headers
newHeaders[h] = req.headers[h] if h.match /^(If-|Range)/i newHeaders[h] = req.headers[h] if h.match /^(If-|Range)/i
proxy = request(url: url, method: req.method, timeout: oneMinute, headers: newHeaders) proxy = request(url: url, method: req.method, timeout: oneMinute, headers: newHeaders)
proxy.pipe(res) else
proxy.on "error", (error) -> proxy = request(url: url, method: req.method, timeout: oneMinute)
logger.warn err: error, url: url, "CLSI proxy error" proxy.pipe(res)
proxy.on "error", (error) ->
logger.warn err: error, url: url, "CLSI proxy error"

View file

@ -39,7 +39,7 @@ module.exports = CompileManager =
ClsiManager.sendRequest project_id, options, (error, status, outputFiles, output) -> ClsiManager.sendRequest project_id, options, (error, status, outputFiles, output) ->
return callback(error) if error? return callback(error) if error?
logger.log files: outputFiles, "output files" logger.log files: outputFiles, "output files"
callback(null, status, outputFiles, output) callback(null, status, outputFiles, output, limits)
deleteAuxFiles: (project_id, callback = (error) ->) -> deleteAuxFiles: (project_id, callback = (error) ->) ->
CompileManager.getProjectCompileLimits project_id, (error, limits) -> CompileManager.getProjectCompileLimits project_id, (error, limits) ->

View file

@ -38,7 +38,12 @@ define [
$scope.pdf.failure = true $scope.pdf.failure = true
fetchLogs() fetchLogs()
else if response.status == "success" else if response.status == "success"
$scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}" if response.compileGroup?
$scope.pdf.compileGroup = response.compileGroup
$scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}" +
"&compileGroup=#{$scope.pdf.compileGroup}"
else
$scope.pdf.url = "/project/#{$scope.project_id}/output/output.pdf?cache_bust=#{Date.now()}"
fetchLogs() fetchLogs()
IGNORE_FILES = ["output.fls", "output.fdb_latexmk"] IGNORE_FILES = ["output.fls", "output.fdb_latexmk"]

View file

@ -26,7 +26,8 @@ define [
$scope.document.destroy() if $scope.document? $scope.document.destroy() if $scope.document?
$scope.document = new PDFRenderer($scope.pdfSrc, { # TODO need a proper url manipulation library to add to query string
$scope.document = new PDFRenderer($scope.pdfSrc + '&pdfng=true' , {
scale: 1, scale: 1,
navigateFn: (ref) -> navigateFn: (ref) ->
# this function captures clicks on the annotation links # this function captures clicks on the annotation links