Добавил периодическую чистку каталогов
This commit is contained in:
@@ -8,6 +8,10 @@ const FileDecompressor = require('./FileDecompressor');
|
||||
const BookConverter = require('./BookConverter');
|
||||
const utils = require('./utils');
|
||||
|
||||
const maxTempPublicDirSize = 512*1024*1024;//512Мб
|
||||
const maxUploadDirSize = 100*1024*1024;//100Мб
|
||||
let singleCleanExecute = false;
|
||||
|
||||
class ReaderWorker {
|
||||
constructor(config) {
|
||||
this.config = Object.assign({}, config);
|
||||
@@ -21,6 +25,12 @@ class ReaderWorker {
|
||||
this.down = new FileDownloader();
|
||||
this.decomp = new FileDecompressor();
|
||||
this.bookConverter = new BookConverter();
|
||||
|
||||
if (!singleCleanExecute) {
|
||||
this.periodicCleanDir(this.config.tempPublicDir, maxTempPublicDirSize, 60*60*1000);//1 раз в час
|
||||
this.periodicCleanDir(this.config.uploadDir, maxUploadDirSize, 60*60*1000);//1 раз в час
|
||||
singleCleanExecute = true;
|
||||
}
|
||||
}
|
||||
|
||||
async loadBook(url, wState) {
|
||||
@@ -113,6 +123,34 @@ class ReaderWorker {
|
||||
|
||||
return `file://${hash}`;
|
||||
}
|
||||
|
||||
async periodicCleanDir(dir, maxSize, timeout) {
|
||||
const list = await fs.readdir(dir);
|
||||
|
||||
let size = 0;
|
||||
let files = [];
|
||||
for (const name of list) {
|
||||
const stat = await fs.stat(`${dir}/${name}`);
|
||||
if (!stat.isDirectory()) {
|
||||
size += stat.size;
|
||||
files.push({name, stat});
|
||||
}
|
||||
}
|
||||
|
||||
files.sort((a, b) => a.stat.mtimeMs - b.stat.mtimeMs);
|
||||
|
||||
let i = 0;
|
||||
while (i < files.length && size > maxSize) {
|
||||
const file = files[i];
|
||||
await fs.remove(`${dir}/${file.name}`);
|
||||
size -= file.stat.size;
|
||||
i++;
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
this.periodicCleanDir(dir, maxSize, timeout);
|
||||
}, timeout);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ReaderWorker;
|
||||
Reference in New Issue
Block a user