mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-15 18:26:15 +01:00
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>
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user