From e674d9789ec33b91db5986e0654136a2fb0f3c95 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Sun, 14 Feb 2021 02:50:10 -0500 Subject: [PATCH] express: Change `httpUptime` to `httpStartTime` (#4777) It's better to provide a primitive value and let the consumer of the metric do math if desired. Co-authored-by: John McLear --- CHANGELOG.md | 6 ++++-- src/node/hooks/express.js | 6 +++--- src/tests/frontend/specs/adminsettings.js | 14 +++++++------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b082c646..4460795a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,9 +30,11 @@ * You can now generate a link to a specific line number in a pad. Appending `#L10` to a pad URL will cause your browser to scroll down to line 10. * Database performance is significantly improved. -* Browser caching improvements. -* New stats/metrics: `activePads`, `httpUptime`, `lastDisconnected`, +* Admin UI now has test coverage in CI. (The tests are not enabled by default; + see `settings.json`.) +* New stats/metrics: `activePads`, `httpStartTime`, `lastDisconnected`, `memoryUsageHeap`. +* Browser caching improvements. * Users can now pick absolute white (`#fff`) as their color. * The `settings.json` template used for Docker images has new variables for controlling rate limiting. diff --git a/src/node/hooks/express.js b/src/node/hooks/express.js index 36bf2e695..351ab5bf2 100644 --- a/src/node/hooks/express.js +++ b/src/node/hooks/express.js @@ -17,7 +17,7 @@ const logger = log4js.getLogger('http'); let serverName; const sockets = new Set(); const socketsEvents = new events.EventEmitter(); -let startTime = null; +const startTime = stats.settableGauge('httpStartTime'); exports.server = null; @@ -46,11 +46,11 @@ const closeServer = async () => { await p; clearTimeout(timeout); exports.server = null; + startTime.setValue(0); logger.info('HTTP server closed'); }; exports.createServer = async () => { - stats.gauge('httpUptime', () => startTime == null ? 0 : new Date() - startTime); console.log('Report bugs at https://github.com/ether/etherpad-lite/issues'); serverName = `Etherpad ${settings.getGitCommit()} (https://etherpad.org)`; @@ -217,7 +217,7 @@ exports.restartServer = async () => { }); }); await util.promisify(exports.server.listen).bind(exports.server)(settings.port, settings.ip); - startTime = new Date(); + startTime.setValue(Date.now()); logger.info('HTTP server listening for connections'); }; diff --git a/src/tests/frontend/specs/adminsettings.js b/src/tests/frontend/specs/adminsettings.js index 71535c68f..3eb6e41a6 100644 --- a/src/tests/frontend/specs/adminsettings.js +++ b/src/tests/frontend/specs/adminsettings.js @@ -56,28 +56,28 @@ describe('Admin > Settings', function () { it('restart works', async function () { this.timeout(60000); - const getUptime = async () => { + const getStartTime = async () => { try { - const {httpUptime} = await $.ajax({ + const {httpStartTime} = await $.ajax({ url: new URL('/stats', window.location.href), method: 'GET', dataType: 'json', timeout: 450, // Slightly less than the waitForPromise() interval. }); - return httpUptime; + return httpStartTime; } catch (err) { return null; } }; await helper.waitForPromise(async () => { - const uptime = await getUptime(); - return uptime != null && uptime > 0; + const startTime = await getStartTime(); + return startTime != null && startTime > 0 && Date.now() > startTime; }, 1000, 500); const clickTime = Date.now(); helper.admin$('#restartEtherpad').click(); await helper.waitForPromise(async () => { - const uptime = await getUptime(); - return uptime != null && Date.now() - uptime >= clickTime; + const startTime = await getStartTime(); + return startTime != null && startTime >= clickTime; }, 60000, 500); }); });