incr by bulk. (#9952)

* incr by bulk.

* Update analytics.js

* Update analytics.js

* lint: fix

Co-authored-by: Barış Soner Uşaklı <baris@nodebb.org>
Co-authored-by: Barış Soner Uşaklı <barisusakli@gmail.com>
isekai-main
sadaszewski 3 years ago committed by GitHub
parent 6ea3b51f12
commit a1c9a69cd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -87,10 +87,19 @@ Analytics.pageView = async function (payload) {
}
};
function sortedSetIncrByBulk(data) {
if ('sortedSetIncrByBulk' in db) {
return db.sortedSetIncrByBulk(data);
}
const queue = data.map(([key, increment, value]) => db.sortedSetIncrBy(key, increment, value));
return Promise.all(queue);
}
Analytics.writeData = async function () {
const today = new Date();
const month = new Date();
const dbQueue = [];
const incrByBulk = [];
// Build list of metrics that were updated
let metrics = [
@ -108,31 +117,31 @@ Analytics.writeData = async function () {
month.setHours(0, 0, 0, 0);
if (pageViews > 0) {
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews', pageViews, today.getTime()));
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month', pageViews, month.getTime()));
incrByBulk.push(['analytics:pageviews', pageViews, today.getTime()]);
incrByBulk.push(['analytics:pageviews:month', pageViews, month.getTime()]);
pageViews = 0;
}
if (pageViewsRegistered > 0) {
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:registered', pageViewsRegistered, today.getTime()));
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month:registered', pageViewsRegistered, month.getTime()));
incrByBulk.push(['analytics:pageviews:registered', pageViewsRegistered, today.getTime()]);
incrByBulk.push(['analytics:pageviews:month:registered', pageViewsRegistered, month.getTime()]);
pageViewsRegistered = 0;
}
if (pageViewsGuest > 0) {
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:guest', pageViewsGuest, today.getTime()));
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month:guest', pageViewsGuest, month.getTime()));
incrByBulk.push(['analytics:pageviews:guest', pageViewsGuest, today.getTime()]);
incrByBulk.push(['analytics:pageviews:month:guest', pageViewsGuest, month.getTime()]);
pageViewsGuest = 0;
}
if (pageViewsBot > 0) {
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:bot', pageViewsBot, today.getTime()));
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month:bot', pageViewsBot, month.getTime()));
incrByBulk.push(['analytics:pageviews:bot', pageViewsBot, today.getTime()]);
incrByBulk.push(['analytics:pageviews:month:bot', pageViewsBot, month.getTime()]);
pageViewsBot = 0;
}
if (uniquevisitors > 0) {
dbQueue.push(db.sortedSetIncrBy('analytics:uniquevisitors', uniquevisitors, today.getTime()));
incrByBulk.push(['analytics:uniquevisitors', uniquevisitors, today.getTime()]);
uniquevisitors = 0;
}
@ -142,11 +151,15 @@ Analytics.writeData = async function () {
}
for (const [key, value] of Object.entries(counters)) {
dbQueue.push(db.sortedSetIncrBy(`analytics:${key}`, value, today.getTime()));
incrByBulk.push([`analytics:${key}`, value, today.getTime()]);
metrics.push(key);
delete counters[key];
}
if (incrByBulk.length) {
dbQueue.push(sortedSetIncrByBulk(incrByBulk));
}
// Update list of tracked metrics
dbQueue.push(db.sortedSetAdd('analyticsKeys', metrics.map(() => +Date.now()), metrics));

Loading…
Cancel
Save