diff --git a/.gitignore b/.gitignore index 30bb0b8..2a37d12 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ test/report doc_compiled.md docs-md/cn/doc.md docs-md/en/doc.md -docs/gitbook/gitbook-plugin-livereload/ \ No newline at end of file +docs/gitbook/gitbook-plugin-livereload/ +node_modules diff --git a/lib/recorder.js b/lib/recorder.js index 525ff0c..d4decf7 100644 --- a/lib/recorder.js +++ b/lib/recorder.js @@ -86,11 +86,22 @@ class Recorder extends events.EventEmitter { this.globalId = 1; this.cachePath = getCacheDir(); this.db = new Datastore(); - this.db.persistence.setAutocompactionInterval(5001); this.recordBodyMap = []; // id - body } + setDbAutoCompact() { + this.db.persistence.setAutocompactionInterval(5001); + } + + stopDbAutoCompact() { + try { + this.db.persistence.stopAutocompaction(); + } catch (e) { + logUtil.printLog(e, logUtil.T_ERR); + } + } + emitUpdate(id, info) { const self = this; if (info) { @@ -333,6 +344,7 @@ class Recorder extends events.EventEmitter { } clear() { + logUtil.printLog('clearing cache file...'); const self = this; proxyUtil.deleteFolderContentsRecursive(self.cachePath, true); } diff --git a/lib/util.js b/lib/util.js index 0d6a78c..bfe9644 100644 --- a/lib/util.js +++ b/lib/util.js @@ -216,8 +216,6 @@ function deleteFolderContentsRecursive(dirPath, ifClearFolderItself) { throw new Error('can_not_delete_this_dir'); } - logUtil.info('==>>> clearing cache ', dirPath); - if (fs.existsSync(dirPath)) { fs.readdirSync(dirPath).forEach((file) => { const curPath = path.join(dirPath, file); diff --git a/lib/webInterface.js b/lib/webInterface.js index f3041a9..8d1925d 100644 --- a/lib/webInterface.js +++ b/lib/webInterface.js @@ -308,11 +308,15 @@ class webInterface extends events.EventEmitter { } close() { - this.server && this.server.close(); - this.wsServer && this.wsServer.closeAll(); - this.server = null; - this.wsServer = null; - this.proxyInstance = null; + const self = this; + return new Promise((resolve, reject) => { + self.server && self.server.close(); + self.wsServer && self.wsServer.closeAll(); + self.server = null; + self.wsServer = null; + self.proxyInstance = null; + resolve(); + }); } } diff --git a/proxy.js b/proxy.js index 2977acb..841faa5 100644 --- a/proxy.js +++ b/proxy.js @@ -248,7 +248,6 @@ class ProxyCore extends events.EventEmitter { return self; } - /** * close the proxy server * @@ -326,54 +325,47 @@ class ProxyServer extends ProxyCore { } start() { + if (this.recorder) { + this.recorder.setDbAutoCompact(); + } + // start web interface if neeeded if (this.proxyWebinterfaceConfig && this.proxyWebinterfaceConfig.enable) { this.webServerInstance = new WebInterface(this.proxyWebinterfaceConfig, this.recorder); // start web server - this.webServerInstance.start().then(() => { - // start proxy core - super.start(); - }) - .catch((e) => { - this.emit('error', e); - }); + this.webServerInstance.start() + // start proxy core + .then(() => { + super.start(); + }) + .catch((e) => { + this.emit('error', e); + }); } else { super.start(); } } close() { - return new Promise((resolve, reject) => { - super.close() - .then((error) => { - if (error) { - resolve(error); - } - }); + const self = this; + // release recorder + if (self.recorder) { + self.recorder.stopDbAutoCompact(); + self.recorder.clear(); + } + self.recorder = null; - if (this.recorder) { - logUtil.printLog('clearing cache file...'); - this.recorder.clear(); - } - const tmpWebServer = this.webServerInstance; - this.recorder = null; - this.webServerInstance = null; - if (tmpWebServer) { - logUtil.printLog('closing webserver...'); - tmpWebServer.close((error) => { - if (error) { - console.error(error); - logUtil.printLog(`proxy web server close FAILED: ${error.message}`, logUtil.T_ERR); - } else { - logUtil.printLog(`proxy web server closed at ${this.proxyHostName} : ${this.webPort}`); - } - - resolve(error); - }) - } else { - resolve(null); - } - }); + // close ProxyCore + return super.close() + // release webInterface + .then(() => { + if (self.webServerInstance) { + const tmpWebServer = self.webServerInstance; + self.webServerInstance = null; + logUtil.printLog('closing webInterface...'); + return tmpWebServer.close(); + } + }); } }