mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-16 10:46:14 +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 () {
|
Analytics.writeData = async function () {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const month = new Date();
|
const month = new Date();
|
||||||
const dbQueue = [];
|
const dbQueue = [];
|
||||||
|
const incrByBulk = [];
|
||||||
|
|
||||||
// Build list of metrics that were updated
|
// Build list of metrics that were updated
|
||||||
let metrics = [
|
let metrics = [
|
||||||
@@ -108,31 +117,31 @@ Analytics.writeData = async function () {
|
|||||||
month.setHours(0, 0, 0, 0);
|
month.setHours(0, 0, 0, 0);
|
||||||
|
|
||||||
if (pageViews > 0) {
|
if (pageViews > 0) {
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews', pageViews, today.getTime()));
|
incrByBulk.push(['analytics:pageviews', pageViews, today.getTime()]);
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month', pageViews, month.getTime()));
|
incrByBulk.push(['analytics:pageviews:month', pageViews, month.getTime()]);
|
||||||
pageViews = 0;
|
pageViews = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pageViewsRegistered > 0) {
|
if (pageViewsRegistered > 0) {
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:registered', pageViewsRegistered, today.getTime()));
|
incrByBulk.push(['analytics:pageviews:registered', pageViewsRegistered, today.getTime()]);
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month:registered', pageViewsRegistered, month.getTime()));
|
incrByBulk.push(['analytics:pageviews:month:registered', pageViewsRegistered, month.getTime()]);
|
||||||
pageViewsRegistered = 0;
|
pageViewsRegistered = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pageViewsGuest > 0) {
|
if (pageViewsGuest > 0) {
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:guest', pageViewsGuest, today.getTime()));
|
incrByBulk.push(['analytics:pageviews:guest', pageViewsGuest, today.getTime()]);
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month:guest', pageViewsGuest, month.getTime()));
|
incrByBulk.push(['analytics:pageviews:month:guest', pageViewsGuest, month.getTime()]);
|
||||||
pageViewsGuest = 0;
|
pageViewsGuest = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pageViewsBot > 0) {
|
if (pageViewsBot > 0) {
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:bot', pageViewsBot, today.getTime()));
|
incrByBulk.push(['analytics:pageviews:bot', pageViewsBot, today.getTime()]);
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:pageviews:month:bot', pageViewsBot, month.getTime()));
|
incrByBulk.push(['analytics:pageviews:month:bot', pageViewsBot, month.getTime()]);
|
||||||
pageViewsBot = 0;
|
pageViewsBot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uniquevisitors > 0) {
|
if (uniquevisitors > 0) {
|
||||||
dbQueue.push(db.sortedSetIncrBy('analytics:uniquevisitors', uniquevisitors, today.getTime()));
|
incrByBulk.push(['analytics:uniquevisitors', uniquevisitors, today.getTime()]);
|
||||||
uniquevisitors = 0;
|
uniquevisitors = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,11 +151,15 @@ Analytics.writeData = async function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(counters)) {
|
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);
|
metrics.push(key);
|
||||||
delete counters[key];
|
delete counters[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (incrByBulk.length) {
|
||||||
|
dbQueue.push(sortedSetIncrByBulk(incrByBulk));
|
||||||
|
}
|
||||||
|
|
||||||
// Update list of tracked metrics
|
// Update list of tracked metrics
|
||||||
dbQueue.push(db.sortedSetAdd('analyticsKeys', metrics.map(() => +Date.now()), metrics));
|
dbQueue.push(db.sortedSetAdd('analyticsKeys', metrics.map(() => +Date.now()), metrics));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user