openvibers/openvibe.network Commits

Open stats: a number a source does not know stays unknown, never a zero (#549)

OP OpenVibers committed 10 days ago · f3d2653c91 · 2 files, +6 −2

num() turned a source's null into 0 (Number(null) is 0). Live answers null for its chat counts while
Chat's numbers are not read yet, so /stats said "Messages 0" and "Chatted, 7 days 0" now and then,
and Report's shadow saw 0 against 75,056 (11-03). null now stays null: the page shows a dash.

Changes

ddiff --git a/server/stats/open.js b/server/stats/open.js
iindex a44bc4ff..6e864102 100644
---- a/server/stats/open.js
++++ b/server/stats/open.js
@@@ -34,7 +34,9 @@ const shareCard = require('openvibe-shared/social').url('network', 'https://open
const PLUMBING = /^(\/metrics|\/api\/(ready|health)|static|\/release\.json|\/robots\.txt|\/favicon\.ico|\/internal\/|\/api\/frame\/hit|\/oauth\/token|\/\.well-known\/|\/api\/admin)/;
const dayOf = (ms) => new Date(ms).toISOString().slice(0, 10);
--const num = (v) => (Number.isFinite(Number(v)) ? Number(v) : null);
++// A number, or null when the source does not know it. Number(null) is 0: a source's null (Live's chat count while
++// Chat's numbers are not read yet) must stay unknown, not become a zero on the public page (11-03: "Messages 0").
++const num = (v) => (v == null || v === '' || !Number.isFinite(Number(v)) ? null : Number(v));
const fmt = (n) => {
if (n == null || !Number.isFinite(Number(n))) return '—';
const v = Number(n), a = Math.abs(v);
ddiff --git a/test/open-stats.test.js b/test/open-stats.test.js
iindex 78b8f0c9..54b09037 100644
---- a/test/open-stats.test.js
++++ b/test/open-stats.test.js
@@@ -40,7 +40,7 @@ const { createOpenStats, render } = require('../server/stats/open');
const d = Number(u.searchParams.get('days'));
return json({ ok: true, summary: { total_pageviews: d === 7 ? 500 : 800, total_unique_visitors: 120, total_unique_users: 30 } });
}
-- if (u.pathname === '/api/home/hero') return json({ stats: { liveNow: 2, viewersNow: 9, streamers: 127, users: 437, chatMessages: 74680, vods: 829 } });
++ if (u.pathname === '/api/home/hero') return json({ stats: { liveNow: 2, viewersNow: 9, streamers: 127, users: 437, chatMessages: 74680, vods: 829, weeklyActive: null } });
throw new Error('down');
};
const stats = createOpenStats({ db, selfToken: () => 'tok', statusRows: () => [{ exposure: { state: 'live' }, status: 'up' }, { exposure: { state: 'live' }, status: 'down' }],
@@@ -59,6 +59,8 @@ const { createOpenStats, render } = require('../server/stats/open');
assert.strictEqual(d.accounts.prev, 1);
assert.deepStrictEqual(d.totals.services, { up: 1, checked: 2 });
assert.strictEqual(d.live.live_now, 2);
++ assert.strictEqual(d.live.chatted_7d, null, 'a number Live does not know yet (null) stays unknown, never a zero');
++ assert.strictEqual(d.live.messages, 74680);
assert.strictEqual(d.busiest_pages_24h, null, 'Prometheus down: no traffic part, never zeros');
assert.strictEqual(site('tools').traffic_24h, null);