This commit is contained in:
Xavier Trochu 2015-07-21 09:02:16 +02:00
commit c9b5bb028d
8 changed files with 39 additions and 6 deletions

View file

@ -52,6 +52,9 @@ module.exports = (grunt) ->
options: options:
ext:"*.coffee" ext:"*.coffee"
execute:
app:
src: "app.js"
concurrent: concurrent:
dev: dev:
@ -79,13 +82,15 @@ module.exports = (grunt) ->
grunt.loadNpmTasks 'grunt-concurrent' grunt.loadNpmTasks 'grunt-concurrent'
grunt.loadNpmTasks 'grunt-mocha-test' grunt.loadNpmTasks 'grunt-mocha-test'
grunt.loadNpmTasks 'grunt-forever' grunt.loadNpmTasks 'grunt-forever'
grunt.loadNpmTasks 'grunt-bunyan'
grunt.loadNpmTasks 'grunt-execute'
grunt.registerTask "test:unit", ["coffee", "mochaTest:unit"] grunt.registerTask "test:unit", ["coffee", "mochaTest:unit"]
grunt.registerTask "test:acceptence", ["coffee", "mochaTest:acceptence"] grunt.registerTask "test:acceptence", ["coffee", "mochaTest:acceptence"]
grunt.registerTask "test:acceptance", ["test:acceptence"] grunt.registerTask "test:acceptance", ["test:acceptence"]
grunt.registerTask "ci", "test:unit" grunt.registerTask "ci", "test:unit"
grunt.registerTask 'default', ['coffee', 'concurrent'] grunt.registerTask 'default', ['coffee', 'bunyan','execute']
grunt.registerTask "compile", "coffee" grunt.registerTask "compile", "coffee"
grunt.registerTask "install", "compile" grunt.registerTask "install", "compile"

View file

@ -13,6 +13,7 @@ streamBuffers = require("stream-buffers")
Metrics = require "metrics-sharelatex" Metrics = require "metrics-sharelatex"
Metrics.initialize("filestore") Metrics.initialize("filestore")
Metrics.open_sockets.monitor(logger) Metrics.open_sockets.monitor(logger)
Metrics.event_loop?.monitor(logger)
app.configure -> app.configure ->
app.use express.bodyParser() app.use express.bodyParser()
@ -74,8 +75,17 @@ app.put "/project/:project_id/file/:file_id", keyBuilder.userFileKey, fileContro
app.del "/project/:project_id/file/:file_id", keyBuilder.userFileKey, fileController.deleteFile app.del "/project/:project_id/file/:file_id", keyBuilder.userFileKey, fileController.deleteFile
app.get "/template/:template_id/v/:version/:format", keyBuilder.templateFileKey, fileController.getFile app.get "/template/:template_id/v/:version/:format", keyBuilder.templateFileKey, fileController.getFile
app.get "/template/:template_id/v/:version/:format/:sub_type", keyBuilder.templateFileKey, fileController.getFile
app.post "/template/:template_id/v/:version/:format", keyBuilder.templateFileKey, fileController.insertFile app.post "/template/:template_id/v/:version/:format", keyBuilder.templateFileKey, fileController.insertFile
app.get "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey, fileController.getFile
app.post "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey, fileController.insertFile
app.put "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey, fileController.copyFile
app.del "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey, fileController.deleteFile
app.get "/heapdump", (req, res)-> app.get "/heapdump", (req, res)->
require('heapdump').writeSnapshot '/tmp/' + Date.now() + '.filestore.heapsnapshot', (err, filename)-> require('heapdump').writeSnapshot '/tmp/' + Date.now() + '.filestore.heapsnapshot', (err, filename)->
res.send filename res.send filename
@ -125,7 +135,7 @@ beginShutdown = () ->
logger.log "server will stop accepting connections" logger.log "server will stop accepting connections"
server.listen port, host, -> server.listen port, host, ->
logger.log("filestore listening on #{host}:#{port}") logger.info "Filestore starting up, listening on #{host}:#{port}"
process.on 'SIGTERM', () -> process.on 'SIGTERM', () ->
logger.log("filestore got SIGTERM, shutting down gracefully") logger.log("filestore got SIGTERM, shutting down gracefully")

View file

@ -39,7 +39,7 @@ module.exports =
args = "nice convert -flatten -background white -density 300 -define pdf:fit-page=#{width} #{sourcePath} -resize #{width} #{destPath}" args = "nice convert -flatten -background white -density 300 -define pdf:fit-page=#{width} #{sourcePath} -resize #{width} #{destPath}"
safe_exec args, childProcessOpts, (err, stdout, stderr)-> safe_exec args, childProcessOpts, (err, stdout, stderr)->
if err? if err?
logger.err err:err, stderr:stderr, sourcePath:sourcePath, "something went wrong converting file to preview" logger.err err:err, stderr:stderr, sourcePath:sourcePath, "something went wrong converting file to thumbnail"
else else
logger.log sourcePath:sourcePath, destPath:destPath, "finished thumbnailing file" logger.log sourcePath:sourcePath, destPath:destPath, "finished thumbnailing file"
callback(err, destPath) callback(err, destPath)

View file

@ -23,9 +23,20 @@ module.exports =
req.bucket = settings.filestore.stores.user_files req.bucket = settings.filestore.stores.user_files
next() next()
publicFileKey: (req, res, next)->
{project_id, public_file_id} = req.params
if not settings.filestore.stores.public_files?
res.status(501).send("public files not available")
else
req.key = "#{project_id}/#{public_file_id}"
req.bucket = settings.filestore.stores.public_files
next()
templateFileKey: (req, res, next)-> templateFileKey: (req, res, next)->
{template_id, format, version} = req.params {template_id, format, version, sub_type} = req.params
req.key = "#{template_id}/v/#{version}/#{format}" req.key = "#{template_id}/v/#{version}/#{format}"
if sub_type?
req.key = "#{req.key}/#{sub_type}"
req.bucket = settings.filestore.stores.template_files req.bucket = settings.filestore.stores.template_files
req.version = version req.version = version
opts = req.query opts = req.query

View file

@ -14,7 +14,6 @@ module.exports =
fsPath = @_getPath(key) fsPath = @_getPath(key)
logger.log fsPath:fsPath, "writing file locally" logger.log fsPath:fsPath, "writing file locally"
writeStream = fs.createWriteStream(fsPath) writeStream = fs.createWriteStream(fsPath)
stream.pipe writeStream
writeStream.on "finish", -> writeStream.on "finish", ->
timer.done() timer.done()
logger.log fsPath:fsPath, "finished writing file locally" logger.log fsPath:fsPath, "finished writing file locally"
@ -25,6 +24,7 @@ module.exports =
stream.on "error", (err)-> stream.on "error", (err)->
logger.log err:err, fsPath:fsPath, "problem writing file locally, with read stream" logger.log err:err, fsPath:fsPath, "problem writing file locally, with read stream"
callback err callback err
stream.pipe writeStream
deleteFile: (fsPath, callback)-> deleteFile: (fsPath, callback)->
logger.log fsPath:fsPath, "removing local temp file" logger.log fsPath:fsPath, "removing local temp file"

View file

@ -104,6 +104,9 @@ module.exports =
secret: settings.filestore.s3.secret secret: settings.filestore.s3.secret
bucket: bucketName bucket: bucketName
s3Client.list prefix:key, (err, data)-> s3Client.list prefix:key, (err, data)->
if err?
logger.err err:err, bucketName:bucketName, key:key, "something went wrong listing prefix in aws"
return callback(err)
keys = _.map data.Contents, (entry)-> keys = _.map data.Contents, (entry)->
return entry.Key return entry.Key
s3Client.deleteMultiple keys, callback s3Client.deleteMultiple keys, callback

View file

@ -21,6 +21,7 @@ module.exports =
# Must contain full path, e.g. "/var/lib/sharelatex/data". # Must contain full path, e.g. "/var/lib/sharelatex/data".
# This path must exist, not be tmpfs and be writable to by the user sharelatex is run as. # This path must exist, not be tmpfs and be writable to by the user sharelatex is run as.
user_files: Path.resolve(__dirname + "/../user_files") user_files: Path.resolve(__dirname + "/../user_files")
public_files: Path.resolve(__dirname + "/../public_files")
template_files: Path.resolve(__dirname + "/../template_files") template_files: Path.resolve(__dirname + "/../template_files")
# if you are using S3, then fill in your S3 details below # if you are using S3, then fill in your S3 details below
# s3: # s3:

View file

@ -8,8 +8,11 @@
}, },
"dependencies": { "dependencies": {
"async": "~0.2.10", "async": "~0.2.10",
"bunyan": "^1.3.5",
"coffee-script": "~1.7.1", "coffee-script": "~1.7.1",
"express": "~3.4.8", "express": "~3.4.8",
"grunt-bunyan": "^0.5.0",
"grunt-execute": "^0.2.2",
"grunt-mocha-test": "~0.8.2", "grunt-mocha-test": "~0.8.2",
"heapdump": "^0.3.2", "heapdump": "^0.3.2",
"knox": "~0.9.1", "knox": "~0.9.1",