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