Return of sizePurgeQueue

- you can also say return of the Q (hehe)
merge-requests/33/head
Moe 2018-10-08 18:39:10 -07:00
parent b1c27f8359
commit 69f7543c79
2 changed files with 59 additions and 42 deletions

View File

@ -524,7 +524,7 @@ module.exports = function(s,config,lang){
fs.mkdirSync(e.dir); fs.mkdirSync(e.dir);
} }
} }
fs.chmod(e.dir,0o777,function(err){ exec('chmod -R 777 '+e.dir,function(err){
}) })
//set the temporary files directory //set the temporary files directory
@ -542,7 +542,7 @@ module.exports = function(s,config,lang){
} }
} }
setStreamDir() setStreamDir()
fs.chmod(e.sdir,0o777,function(err){ exec('chmod -R 777 '+e.sdir,function(err){
}) })
return setStreamDir return setStreamDir

View File

@ -50,6 +50,7 @@ module.exports = function(s,config){
if(!s.group[e.ke].fileBin){s.group[e.ke].fileBin={}}; if(!s.group[e.ke].fileBin){s.group[e.ke].fileBin={}};
if(!s.group[e.ke].users){s.group[e.ke].users={}} if(!s.group[e.ke].users){s.group[e.ke].users={}}
if(!s.group[e.ke].dashcamUsers){s.group[e.ke].dashcamUsers={}} if(!s.group[e.ke].dashcamUsers){s.group[e.ke].dashcamUsers={}}
if(!s.group[e.ke].sizePurgeQueue){s.group[e.ke].sizePurgeQueue=[]}
if(!e.limit||e.limit===''){e.limit=10000}else{e.limit=parseFloat(e.limit)} if(!e.limit||e.limit===''){e.limit=10000}else{e.limit=parseFloat(e.limit)}
//save global space limit for group key (mb) //save global space limit for group key (mb)
s.group[e.ke].sizeLimit=e.limit; s.group[e.ke].sizeLimit=e.limit;
@ -151,48 +152,64 @@ module.exports = function(s,config){
}) })
s.group[e.ke].diskUsedEmitter.on('purge',function(){ s.group[e.ke].diskUsedEmitter.on('purge',function(){
if(config.cron.deleteOverMax === true){ if(config.cron.deleteOverMax === true){
//set queue processor s.group[e.ke].sizePurgeQueue.push(1)
var finish=function(){ if(s.group[e.ke].sizePurging !== true){
s.sendDiskUsedAmountToClients(e) s.group[e.ke].sizePurging = true
} var finish = function(){
var deleteVideos = function(){ //remove value just used from queue
//run purge command s.group[e.ke].sizePurgeQueue.shift()
if(s.group[e.ke].usedSpace > (s.group[e.ke].sizeLimit*config.cron.deleteOverMaxOffset)){ //do next one
s.sqlQuery('SELECT * FROM Videos WHERE status != 0 AND details NOT LIKE \'%"archived":"1"%\' AND ke=? ORDER BY `time` ASC LIMIT 2',[e.ke],function(err,videos){ if(s.group[e.ke].sizePurgeQueue.length > 0){
var videosToDelete = [] checkQueue()
var queryValues = [e.ke] }else{
if(!videos)return console.log(err) s.group[e.ke].sizePurging=false
videos.forEach(function(video){ s.sendDiskUsedAmountToClients(e)
video.dir = s.getVideoDirectory(video) + s.formattedTime(video.time) + '.' + video.ext }
videosToDelete.push('(mid=? AND `time`=?)')
queryValues.push(video.mid)
queryValues.push(video.time)
s.file('delete',video.dir)
s.setDiskUsedForGroup(e,-(video.size/1000000))
s.tx({
f: 'video_delete',
ff: 'over_max',
filename: s.formattedTime(video.time)+'.'+video.ext,
mid: video.mid,
ke: video.ke,
time: video.time,
end: s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss')
},'GRP_'+e.ke)
})
if(videosToDelete.length > 0){
videosToDelete = videosToDelete.join(' OR ')
s.sqlQuery('DELETE FROM Videos WHERE ke =? AND ('+videosToDelete+')',queryValues,function(){
deleteVideos()
})
}else{
finish()
}
})
}else{
finish()
} }
var checkQueue=function(){
//get first in queue
var currentPurge = s.group[e.ke].sizePurgeQueue[0]
var deleteVideos = function(){
//run purge command
if(s.group[e.ke].usedSpace > (s.group[e.ke].sizeLimit*config.cron.deleteOverMaxOffset)){
s.sqlQuery('SELECT * FROM Videos WHERE status != 0 AND details NOT LIKE \'%"archived":"1"%\' AND ke=? ORDER BY `time` ASC LIMIT 2',[e.ke],function(err,videos){
var videosToDelete = []
var queryValues = [e.ke]
if(!videos)return console.log(err)
videos.forEach(function(video){
video.dir = s.getVideoDirectory(video) + s.formattedTime(video.time) + '.' + video.ext
videosToDelete.push('(mid=? AND `time`=?)')
queryValues.push(video.mid)
queryValues.push(video.time)
s.file('delete',video.dir)
s.setDiskUsedForGroup(e,-(video.size/1000000))
s.tx({
f: 'video_delete',
ff: 'over_max',
filename: s.formattedTime(video.time)+'.'+video.ext,
mid: video.mid,
ke: video.ke,
time: video.time,
end: s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss')
},'GRP_'+e.ke)
})
if(videosToDelete.length > 0){
videosToDelete = videosToDelete.join(' OR ')
s.sqlQuery('DELETE FROM Videos WHERE ke =? AND ('+videosToDelete+')',queryValues,function(){
deleteVideos()
})
}else{
finish()
}
})
}else{
finish()
}
}
deleteVideos()
} }
deleteVideos() checkQueue()
}
}else{ }else{
s.sendDiskUsedAmountToClients(e) s.sendDiskUsedAmountToClients(e)
} }