Răsfoiți Sursa

Добавил периодическую чистку каталогов

Book Pauk 6 ani în urmă
părinte
comite
ae744fb80f
1 a modificat fișierele cu 38 adăugiri și 0 ștergeri
  1. 38 0
      server/core/ReaderWorker.js

+ 38 - 0
server/core/ReaderWorker.js

@@ -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;