Ppchelko has submitted this change and it was merged.

Change subject: Use Map for storing trending information
......................................................................


Use Map for storing trending information

It's better suited to this job.

Change-Id: I41f21fb26b96176b05eb196ef7632e4c3d72f1ed
---
M lib/processor.js
1 file changed, 25 insertions(+), 25 deletions(-)

Approvals:
  Ppchelko: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/processor.js b/lib/processor.js
index 8c7edab..a11e99f 100644
--- a/lib/processor.js
+++ b/lib/processor.js
@@ -1,15 +1,14 @@
 "use strict";
 
 // Capture the status of the wiki
-var pages = {};
-var totalPages = 0;
+var pages = new Map();
 
 /**
  * Return unsorted array of objects representing edit activity on pages
  * @return {Array} of all pages that have been processed
  */
 function getPages() {
-    return Object.values(pages);
+    return Array.from(pages.values());
 }
 
 /**
@@ -19,10 +18,7 @@
  * @param {Number} id
  */
 function remove(id) {
-    if (pages[id]) {
-        delete pages[id];
-        totalPages--;
-    }
+    pages.delete(id);
 }
 
 /**
@@ -37,19 +33,20 @@
     var time = date.getTime();
     var maxAgeDate = new Date(time - options.max_age * 60000);
     var maxInactivityDate = new Date(time - options.max_inactivity * 60000);
-    Object.entries(pages).forEach((entry) => {
-        var page = entry[1];
+    pages.forEach((page) => {
         var timePassed = (date - page.from) / 60000;
         var speed = timePassed > 0 ? page.edits / timePassed : page.edits;
         if (page.updated < maxInactivityDate || page.from < maxAgeDate || 
speed < options.min_speed) {
             remove(page.id);
         }
     });
+
+    var size = pages.size;
     // Only do this if we have to
-    if (totalPages > options.max_pages) {
+    if (size > options.max_pages) {
         getPages().sort(function(a, b) {
             return a.from < b.from ? -1 : 1;
-        }).slice(0, totalPages - options.max_pages).forEach(function(page) {
+        }).slice(0, size - options.max_pages).forEach(function(page) {
             remove(page.id);
         });
     }
@@ -59,8 +56,7 @@
  * Reset all previous processing of edits
  */
 function reset() {
-    pages = {};
-    totalPages = 0;
+    pages.clear();
 }
 
 /**
@@ -70,6 +66,7 @@
  */
 function process(edit) {
     var contributors;
+    var page;
     var id = edit.page_id;
     var ts = new Date(edit.rev_timestamp);
     var performer = edit.performer;
@@ -79,18 +76,19 @@
 
     if (topic === 'mediawiki.page-delete') {
         remove(id);
-    } else if (topic === 'mediawiki.page-move' && pages[id]) {
-        pages[id].title = edit.page_title;
+    } else if (topic === 'mediawiki.page-move' && pages.has(id)) {
+        page = pages.get(id);
+        page.title = edit.page_title;
         // assumption here made that anons cannot move pages so we do not 
touch anonEdits
-        pages[id].edits -= 1;
+        page.edits -= 1;
     } else if (topic === 'mediawiki.revision-create' && !edit.page_is_redirect 
&&
             !performer.user_is_bot && edit.page_namespace === 0) {
-        if (pages[id]) {
-            pages[id].edits++;
-            pages[id].updated = ts;
+        if (pages.has(id)) {
+            page = pages.get(id);
+            page.edits++;
+            page.updated = ts;
         } else {
-            totalPages++;
-            pages[id] = {
+            page = {
                 id: id,
                 isNew: edit.rev_parent_id === undefined,
                 edits: 1,
@@ -107,9 +105,9 @@
                 title: edit.page_title
             };
         }
-        contributors = pages[id].contributors;
+        contributors = page.contributors;
         if (isAnon) {
-            pages[id].anonEdits += 1;
+            page.anonEdits += 1;
             if (!contributors.names[username]) {
                 contributors.anons++;
             }
@@ -125,8 +123,10 @@
         if (contributors.names[username].edits > 
contributors.names[contributors.main].edits) {
             contributors.main = username;
         }
-        pages[id].bytes = edit.rev_len - pages[id].rev_len;
-        pages[id].bias = contributors.names[contributors.main].edits / 
pages[id].edits;
+        page.bytes = edit.rev_len - page.rev_len;
+        page.bias = contributors.names[contributors.main].edits / page.edits;
+        // update
+        pages.set(id,page);
     }
 }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/323489
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I41f21fb26b96176b05eb196ef7632e4c3d72f1ed
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/services/trending-edits
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: Mobrovac <mobro...@wikimedia.org>
Gerrit-Reviewer: Pmiazga <pmia...@wikimedia.org>
Gerrit-Reviewer: Ppchelko <ppche...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to