add size function for each persitor

This commit is contained in:
Henrique Santos 2016-03-12 11:08:07 -03:00
parent 5d2fc89137
commit 1f20744a68
6 changed files with 46 additions and 11 deletions

View file

@ -4,6 +4,7 @@ logger.initialize("filestore")
settings = require("settings-sharelatex")
request = require("request")
fileController = require("./app/js/FileController")
projectController = require("./app/js/ProjectController")
keyBuilder = require("./app/js/KeyBuilder")
domain = require("domain")
appIsOk = true
@ -85,7 +86,7 @@ app.post "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey
app.put "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey, express.bodyParser(), fileController.copyFile
app.del "/project/:project_id/public/:public_file_id", keyBuilder.publicFileKey, fileController.deleteFile
app.get "project/:project_id/size", keyBuilder.publicProjectKey, projectController.projectSize
app.get "/project/:project_id/size", keyBuilder.publicProjectKey, projectController.projectSize
app.get "/heapdump", (req, res)->
require('heapdump').writeSnapshot '/tmp/' + Date.now() + '.filestore.heapsnapshot', (err, filename)->

View file

@ -87,5 +87,15 @@ module.exports =
getProjectSize:(bucketName, key, callback)->
logger.log bucketName:bucketName, key:key, "get project size in s3"
callback null, 1024
s3.listObjects {Bucket: bucketName, Prefix: key}, (err, data) ->
if err?
logger.err err:err, bucketName:bucketName, key:key, "something went wrong listing prefix in s3"
return callback err
if data.Contents.length == 0
logger.log bucketName:bucketName, key:key, "the directory is empty"
return callback()
totalSize = 0
_.each data.Contents, (entry)->
totalSize += entry.Size
callback null, totalSize

View file

@ -89,5 +89,17 @@ module.exports =
callback null, exists
getProjectSize:(location, name, callback)->
logger.log location:location, name:name, "get project size in file system"
callback null, 1024
filteredName = filterName name.replace(/\/$/,'')
logger.log location:location, name:filteredName, "get project size in file system"
fs.readdir "#{location}/#{filteredName}", (err, files) ->
if err?
logger.err err:err, location:location, name:filteredName, "something went wrong listing prefix in aws"
return callback(err)
totalSize = 0
_.each files, (entry)->
fd = fs.openSync "#{location}/#{filteredName}/#{entry}", 'r'
fileStats = fs.fstatSync(fd)
totalSize += fileStats.size
fs.closeSync fd
logger.log totalSize:totalSize, "total size", files:files
callback null, totalSize

View file

@ -2,7 +2,7 @@ settings = require("settings-sharelatex")
logger = require("logger-sharelatex")
metrics = require("metrics-sharelatex")
Errors = require('./Errors')
ProjectHandler = require("./ProjectHandler")
module.exports = projectController =
@ -10,7 +10,7 @@ module.exports = projectController =
metrics.inc "projectSize"
{project_id, bucket} = req
logger.log project_id:project_id, bucket:bucket, "reciving request to project size"
ProjectHandler.getSize bucket, project_id, req, (err, size)->
ProjectHandler.getSize bucket, project_id, (err, size)->
if err?
logger.log err: err, project_id: project_id, bucket: bucket, "error inserting file"
res.send 500

View file

@ -5,9 +5,9 @@ async = require("async")
module.exports =
getSize: (bucket, project_id, opts = {}, callback)->
logger.log bucket:bucket, project_id:project_id, opts:opts, "getting project size"
PersistorManager.getProjectSize bucket, project_id, opts, (err, size)->
getSize: (bucket, project_id, callback)->
logger.log bucket:bucket, project_id:project_id, "getting project size"
PersistorManager.getProjectSize bucket, project_id, (err, size)->
if err?
logger.err bucket:bucket, project_id:project_id, opts:opts, "error getting size"
logger.err bucket:bucket, project_id:project_id, "error getting size"
callback err, size

View file

@ -140,4 +140,16 @@ module.exports =
getProjectSize:(bucketName, key, callback)->
logger.log bucketName:bucketName, key:key, "get project size in s3"
callback null, 1024
s3Client = knox.createClient
key: settings.filestore.s3.key
secret: settings.filestore.s3.secret
bucket: bucketName
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)
totalSize = 0
_.each data.Contents, (entry)->
totalSize += entry.Size
logger.log totalSize:totalSize, "total size"
callback null, totalSize