From 31a460e750679981bd6a2703f89f7f37b5f0b7bb Mon Sep 17 00:00:00 2001 From: Michael C Date: Mon, 20 Feb 2023 22:56:38 -0500 Subject: [PATCH] fix countcontributingusers --- src/routes/getTotalStats.ts | 51 +++++++++++++++++++++---------------- test/cases/getTotalStats.ts | 6 ++--- test/test.ts | 4 +-- test/utils/reset.ts | 2 +- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/routes/getTotalStats.ts b/src/routes/getTotalStats.ts index 4a89b8f..44b160f 100644 --- a/src/routes/getTotalStats.ts +++ b/src/routes/getTotalStats.ts @@ -27,30 +27,32 @@ let lastFetch: DBStatsData = { minutesSaved: 0 }; +updateExtensionUsers(); + export async function getTotalStats(req: Request, res: Response): Promise { - const row = await getStats(!!req.query.countContributingUsers); + const countContributingUsers = Boolean(req.query?.countContributingUsers == "true"); + const row = await getStats(countContributingUsers); lastFetch = row; - if (row !== undefined) { - const extensionUsers = chromeUsersCache + firefoxUsersCache; + if (!row) res.sendStatus(500); + const extensionUsers = chromeUsersCache + firefoxUsersCache; - //send this result - res.send({ - userCount: row.userCount, - activeUsers: extensionUsers, - apiUsers: Math.max(apiUsersCache, extensionUsers), - viewCount: row.viewCount, - totalSubmissions: row.totalSubmissions, - minutesSaved: row.minutesSaved, - }); + //send this result + res.send({ + userCount: row.userCount ?? 0, + activeUsers: extensionUsers, + apiUsers: Math.max(apiUsersCache, extensionUsers), + viewCount: row.viewCount, + totalSubmissions: row.totalSubmissions, + minutesSaved: row.minutesSaved, + }); - // Check if the cache should be updated (every ~14 hours) - const now = Date.now(); - if (now - lastUserCountCheck > 5000000) { - lastUserCountCheck = now; + // Check if the cache should be updated (every ~14 hours) + const now = Date.now(); + if (now - lastUserCountCheck > 5000000) { + lastUserCountCheck = now; - await updateExtensionUsers(); - } + updateExtensionUsers(); } } @@ -66,7 +68,7 @@ function getStats(countContributingUsers: boolean): Promise { } -async function updateExtensionUsers() { +function updateExtensionUsers() { if (config.userCounterURL) { axios.get(`${config.userCounterURL}/api/v1/userCount`) .then(res => apiUsersCache = Math.max(apiUsersCache, res.data.userCount)) @@ -77,13 +79,18 @@ async function updateExtensionUsers() { const chromeExtensionUrl = "https://chrome.google.com/webstore/detail/sponsorblock-for-youtube/mnjggcdmjocbbbhaepdhchncahnbgone"; const chromeExtId = "mnjggcdmjocbbbhaepdhchncahnbgone"; - firefoxUsersCache = await axios.get(mozillaAddonsUrl) - .then(res => res.data.average_daily_users ) + axios.get(mozillaAddonsUrl) + .then(res => firefoxUsersCache = res.data.average_daily_users ) .catch( /* istanbul ignore next */ () => { Logger.debug(`Failing to connect to ${mozillaAddonsUrl}`); return 0; }); - chromeUsersCache = await getCWSUsers(chromeExtId) ?? await getChromeUsers(chromeExtensionUrl); + getCWSUsers(chromeExtId) + .then(res => chromeUsersCache = res) + .catch(() => + getChromeUsers(chromeExtensionUrl) + .then(res => chromeUsersCache = res) + ); } function getChromeUsers(chromeExtensionUrl: string): Promise { diff --git a/test/cases/getTotalStats.ts b/test/cases/getTotalStats.ts index 3b53a84..bf09653 100644 --- a/test/cases/getTotalStats.ts +++ b/test/cases/getTotalStats.ts @@ -9,7 +9,7 @@ describe("getTotalStats", () => { it("Can get total stats", async () => { const result = await client({ url: endpoint }); const data = result.data; - assert.ok(data.userCount >= 0); + assert.strictEqual(data.userCount, 0, "User count should default false"); assert.ok(data.activeUsers >= 0); assert.ok(data.apiUsers >= 0); assert.ok(data.viewCount >= 0); @@ -31,9 +31,9 @@ describe("getTotalStats", () => { it("Can get total stats with old cws method", async () => { const stub = sinon.stub(getCWSUsers, "getCWSUsers"); stub.resolves(undefined); - const result = await client({ url: `${endpoint}?countContributingUsers=false` }); + const result = await client({ url: `${endpoint}?countContributingUsers=true` }); const data = result.data; - assert.strictEqual(data.userCount, 0); + assert.ok(data.userCount >= 0); assert.ok(data.activeUsers >= 0); assert.ok(data.apiUsers >= 0); assert.ok(data.viewCount >= 0); diff --git a/test/test.ts b/test/test.ts index 69748f8..edc8740 100644 --- a/test/test.ts +++ b/test/test.ts @@ -20,8 +20,8 @@ async function init() { // delete old test database if (fs.existsSync(config.db)) fs.unlinkSync(config.db); if (fs.existsSync(config.privateDB)) fs.unlinkSync(config.privateDB); - await resetRedis(); - await resetPostgres(); + if (config?.redis?.enabled) await resetRedis(); + if (config?.postgres) await resetPostgres(); await initDb(); diff --git a/test/utils/reset.ts b/test/utils/reset.ts index d6e4915..dc31aa9 100644 --- a/test/utils/reset.ts +++ b/test/utils/reset.ts @@ -6,7 +6,7 @@ import { Pool } from "pg"; import { Logger } from "../../src/utils/logger"; export async function resetRedis() { - if (config.redis) { + if (config?.redis?.enabled) { const client = createClient(config.redis); await client.connect(); await client.flushAll();