Добавил периодическую чистку каталогов
This commit is contained in:
@@ -8,6 +8,10 @@ const FileDecompressor = require('./FileDecompressor');
|
|||||||
const BookConverter = require('./BookConverter');
|
const BookConverter = require('./BookConverter');
|
||||||
const utils = require('./utils');
|
const utils = require('./utils');
|
||||||
|
|
||||||
|
const maxTempPublicDirSize = 512*1024*1024;//512Мб
|
||||||
|
const maxUploadDirSize = 100*1024*1024;//100Мб
|
||||||
|
let singleCleanExecute = false;
|
||||||
|
|
||||||
class ReaderWorker {
|
class ReaderWorker {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
this.config = Object.assign({}, config);
|
this.config = Object.assign({}, config);
|
||||||
@@ -21,6 +25,12 @@ class ReaderWorker {
|
|||||||
this.down = new FileDownloader();
|
this.down = new FileDownloader();
|
||||||
this.decomp = new FileDecompressor();
|
this.decomp = new FileDecompressor();
|
||||||
this.bookConverter = new BookConverter();
|
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) {
|
async loadBook(url, wState) {
|
||||||
@@ -113,6 +123,34 @@ class ReaderWorker {
|
|||||||
|
|
||||||
return `file://${hash}`;
|
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;
|
module.exports = ReaderWorker;
|
||||||
Reference in New Issue
Block a user