From 92d160a9db7ae173c8960bedfff86fcff363fcaa Mon Sep 17 00:00:00 2001 From: mervyn Date: Mon, 4 Jul 2022 10:09:31 +0800 Subject: [PATCH] #49 add the configuration to check time interval --- main.js | 6 +++++- monitor.js | 17 +++++++++++++---- preference.html | 9 +++++++-- renderer.js | 11 ++++++++++- store.js | 1 + test/monitor.test.js | 28 ++++++++++++++++++++++++++++ 6 files changed, 64 insertions(+), 8 deletions(-) diff --git a/main.js b/main.js index 1099b3f..b42e30e 100644 --- a/main.js +++ b/main.js @@ -6,7 +6,7 @@ const { store, STORE_KEY } = require('./store') const { MenuTray, MENU_CLICK_EVENT } = require('./menu') const logger = require('electron-log') -const monitorConfig = isDev() ? { windowSize: 5 } : {} +const monitorConfig = isDev() ? { windowSize: 5, intervalMs: 1000 } : { intervalMs: store.get(STORE_KEY.intervalTimeSd, 1000) } const monitor = new Monitor(monitorConfig) monitor.on(ACTION_EVENT.REMOVE, ({ pid }) => { @@ -49,6 +49,10 @@ function initListeners () { openAtLogin: value }) }) + + ipcMain.on(getIpcStoreKey(STORE_KEY.intervalTimeSd), (event, intervalMs) => { + monitor.setInterval(intervalMs) + }) } // This method will be called when Electron has done everything diff --git a/monitor.js b/monitor.js index 8e5a52a..7980fdf 100644 --- a/monitor.js +++ b/monitor.js @@ -61,7 +61,7 @@ class Monitor extends EventEmitter { if (this.running) return this.running = true this.emit(STATUS_EVENT.START) - const interval = async (time) => { + const interval = async () => { setTimeout(async () => { if (!this.running) return @@ -72,11 +72,11 @@ class Monitor extends EventEmitter { this.stats.addPidStat(pid, stat) } - interval(time) - }, time) + interval() + }, this.intervalMs) } - interval(this.intervalMs) + interval() this.checkTimer.start() } @@ -96,6 +96,11 @@ class Monitor extends EventEmitter { const nums = [...data].sort((a, b) => a.cpu - b.cpu) return dLen % 2 !== 0 ? nums[mid].cpu : (nums[mid - 1].cpu + nums[mid].cpu) / 2 } + + setInterval (intervalMs) { + this.intervalMs = intervalMs + this.checkTimer.setInterval(intervalMs * this.windowSize) + } } class Statistics { @@ -149,6 +154,10 @@ class CheckTimer { stop () { clearInterval(this.interval) } + + setInterval (interval) { + this.intervalMs = interval + } } module.exports = { Monitor, Statistics, CheckTimer, ACTION_EVENT, STATUS_EVENT } diff --git a/preference.html b/preference.html index f458ef0..bd7f593 100644 --- a/preference.html +++ b/preference.html @@ -9,8 +9,13 @@
- - 1h + + 1 hour +
+
+ + + 1 second
diff --git a/renderer.js b/renderer.js index f04b044..4c5a872 100644 --- a/renderer.js +++ b/renderer.js @@ -5,7 +5,16 @@ silentTimeRange.addEventListener('change', (event) => { }) silentTimeRange.value = window.api.getStore(window.api.STORE_KEY.silentTimeHr) -silentTimeRange.nextElementSibling.value = `${silentTimeRange.value}h` +silentTimeRange.nextElementSibling.value = `${silentTimeRange.value} hour` + +const intervalTimeRange = document.querySelector('#interval-time') + +intervalTimeRange.addEventListener('change', (event) => { + window.api.setStore(window.api.STORE_KEY.intervalTimeSd, parseInt(event.target.value, 10) * 1000) +}) + +intervalTimeRange.value = window.api.getStore(window.api.STORE_KEY.intervalTimeSd) / 1000 +intervalTimeRange.nextElementSibling.value = `${intervalTimeRange.value} second` const autoLaunch = document.querySelector('#auto-launch') diff --git a/store.js b/store.js index 3126d65..0dd4bb1 100644 --- a/store.js +++ b/store.js @@ -3,6 +3,7 @@ const store = new Store() const STORE_KEY = { silentTimeHr: 'silentTimeHr', + intervalTimeSd: 'intervalTimeSd', autoLaunch: 'autoLaunch', appInfo: 'appInfo' } diff --git a/test/monitor.test.js b/test/monitor.test.js index 6c28546..0d5fa0a 100644 --- a/test/monitor.test.js +++ b/test/monitor.test.js @@ -14,10 +14,12 @@ describe('monitor module', () => { describe('monitor', () => { let clock beforeEach(() => { + i = 0 clock = sinon.useFakeTimers() }) afterEach(() => { clock.restore() + i = 0 }) it('should monitor successfully', async () => { let addCbCount = 0 @@ -62,6 +64,32 @@ describe('monitor module', () => { done() }) }) + + it('should setInterval successfully', async () => { + let addCbCount = 0 + let removeCbCount = 0 + const monitor = new Monitor() + monitor.on(ACTION_EVENT.ADD, ({ pid, stat, type }) => { + addCbCount += 1 + }) + monitor.on(ACTION_EVENT.REMOVE, ({ pid, stat, type }) => { + removeCbCount += 1 + }) + monitor.stats.windowSize = 2 + + monitor.setInterval(4000) + monitor.start() + + monitor.isRunning().should.equal(true) + await clock.tickAsync(3000) + addCbCount.should.equal(0) + removeCbCount.should.equal(0) + await clock.tickAsync(5000) + addCbCount.should.equal(1) + removeCbCount.should.equal(0) + await monitor.stop() + monitor.isRunning().should.equal(false) + }) }) describe('statistics', () => {