From 89d5605874939d129753794e3bb1f31db01c72ea Mon Sep 17 00:00:00 2001 From: James Allen Date: Fri, 22 Jun 2018 15:33:02 +0100 Subject: [PATCH 1/4] Add script that refreshes all v1 users' features in v2 --- services/web/scripts/sync_v1_subscriptions.js | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 services/web/scripts/sync_v1_subscriptions.js diff --git a/services/web/scripts/sync_v1_subscriptions.js b/services/web/scripts/sync_v1_subscriptions.js new file mode 100644 index 0000000000..f6ba9c9ce2 --- /dev/null +++ b/services/web/scripts/sync_v1_subscriptions.js @@ -0,0 +1,37 @@ +const {db} = require('../app/js/infrastructure/mongojs') +const FeaturesUpdater = require( + '../app/js/Features/Subscription/FeaturesUpdater' +) +const V1SubscriptionManager = require( + '../app/js/Features/Subscription/V1SubscriptionManager' +) +const async = require('async') +const logger = require('logger-sharelatex') +logger.logger.level('error') + +db.users.find({ + 'overleaf.id': { $exists: true } +}, { + overleaf: 1 +}, function (error, users) { + if (error) throw error + console.log('Found users:', users.length) + async.mapSeries(users, function (user, callback) { + console.log('refreshing in v2', user._id) + FeaturesUpdater.refreshFeatures(user._id, false, function (error) { + if (error) console.error('ERROR', error) + console.log('refreshing in v1', user._id) + V1SubscriptionManager.notifyV1OfFeaturesChange( + user._id, + function (error) { + if (error) console.error('ERROR', error) + callback() + } + ) + }) + }, function (error) { + if (error) throw error + console.log('FINISHED!') + process.exit() + }) +}) From de519f545fb49c2ac6359dfde2ca0d8ea44104a5 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 26 Jun 2018 11:07:13 +0100 Subject: [PATCH 2/4] Add in check to see if user was out of sync --- services/web/scripts/sync_v1_subscriptions.js | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/services/web/scripts/sync_v1_subscriptions.js b/services/web/scripts/sync_v1_subscriptions.js index f6ba9c9ce2..2f56eb7f56 100644 --- a/services/web/scripts/sync_v1_subscriptions.js +++ b/services/web/scripts/sync_v1_subscriptions.js @@ -9,29 +9,56 @@ const async = require('async') const logger = require('logger-sharelatex') logger.logger.level('error') +const areFeaturesEqual = function(featuresA, featuresB) { + for (const feature in featuresA) { + if (featuresA[feature] !== featuresB[feature]) { + return false + } + } + return true +} + +var outOfSyncUserCount = 0 +var userCount = null + db.users.find({ 'overleaf.id': { $exists: true } }, { - overleaf: 1 + overleaf: 1, + features: 1 }, function (error, users) { if (error) throw error - console.log('Found users:', users.length) + console.log('USER COUNT', userCount = users.length) async.mapSeries(users, function (user, callback) { - console.log('refreshing in v2', user._id) + console.log('REFRESHING IN v2', user._id) FeaturesUpdater.refreshFeatures(user._id, false, function (error) { if (error) console.error('ERROR', error) - console.log('refreshing in v1', user._id) + console.log('REFRESHING IN v1', user._id) V1SubscriptionManager.notifyV1OfFeaturesChange( user._id, function (error) { if (error) console.error('ERROR', error) - callback() + db.users.find({ + _id: user._id + }, { + features: 1 + }, function (error, [updatedUser]) { + if (error) throw error + if (areFeaturesEqual(user.features, updatedUser.features)) { + console.log('UNCHANGED', user._id) + } else { + console.log('MODIFIED', user._id) + outOfSyncUserCount = outOfSyncUserCount + 1 + } + callback() + }) } ) }) }, function (error) { if (error) throw error console.log('FINISHED!') + console.log('OUT OF SYNC USERS', outOfSyncUserCount, '/', userCount) process.exit() }) }) From 6838904d65337fbdfd1ef65c829f2da097ec6a06 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 26 Jun 2018 11:30:27 +0100 Subject: [PATCH 3/4] Add in option to sync all users --- services/web/scripts/sync_v1_subscriptions.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/services/web/scripts/sync_v1_subscriptions.js b/services/web/scripts/sync_v1_subscriptions.js index 2f56eb7f56..c043a5589c 100644 --- a/services/web/scripts/sync_v1_subscriptions.js +++ b/services/web/scripts/sync_v1_subscriptions.js @@ -1,3 +1,13 @@ +let USER_QUERY = null +if (process.argv[2] === '--all') { + USER_QUERY = {} +} else if (process.argv[2] === '--v1-only') { + USER_QUERY = { 'overleaf.id': { $exists: true } } +} else { + console.error(`Usage:\n\n\tnode ${process.argv[1]} (--all|--v1-only)`) + process.exit(1) +} + const {db} = require('../app/js/infrastructure/mongojs') const FeaturesUpdater = require( '../app/js/Features/Subscription/FeaturesUpdater' @@ -9,7 +19,7 @@ const async = require('async') const logger = require('logger-sharelatex') logger.logger.level('error') -const areFeaturesEqual = function(featuresA, featuresB) { +const areFeaturesEqual = function (featuresA, featuresB) { for (const feature in featuresA) { if (featuresA[feature] !== featuresB[feature]) { return false @@ -21,9 +31,7 @@ const areFeaturesEqual = function(featuresA, featuresB) { var outOfSyncUserCount = 0 var userCount = null -db.users.find({ - 'overleaf.id': { $exists: true } -}, { +db.users.find(USER_QUERY, { overleaf: 1, features: 1 }, function (error, users) { From a54a69159a76088f2eb248b925ca6286e0ac6b7a Mon Sep 17 00:00:00 2001 From: James Allen Date: Fri, 6 Jul 2018 09:07:55 +0100 Subject: [PATCH 4/4] Revert "Add in option to sync all users" - too dangerous! This reverts commit 218e042aba6784f32777f496e1706300845c3f44. --- services/web/scripts/sync_v1_subscriptions.js | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/services/web/scripts/sync_v1_subscriptions.js b/services/web/scripts/sync_v1_subscriptions.js index c043a5589c..2f56eb7f56 100644 --- a/services/web/scripts/sync_v1_subscriptions.js +++ b/services/web/scripts/sync_v1_subscriptions.js @@ -1,13 +1,3 @@ -let USER_QUERY = null -if (process.argv[2] === '--all') { - USER_QUERY = {} -} else if (process.argv[2] === '--v1-only') { - USER_QUERY = { 'overleaf.id': { $exists: true } } -} else { - console.error(`Usage:\n\n\tnode ${process.argv[1]} (--all|--v1-only)`) - process.exit(1) -} - const {db} = require('../app/js/infrastructure/mongojs') const FeaturesUpdater = require( '../app/js/Features/Subscription/FeaturesUpdater' @@ -19,7 +9,7 @@ const async = require('async') const logger = require('logger-sharelatex') logger.logger.level('error') -const areFeaturesEqual = function (featuresA, featuresB) { +const areFeaturesEqual = function(featuresA, featuresB) { for (const feature in featuresA) { if (featuresA[feature] !== featuresB[feature]) { return false @@ -31,7 +21,9 @@ const areFeaturesEqual = function (featuresA, featuresB) { var outOfSyncUserCount = 0 var userCount = null -db.users.find(USER_QUERY, { +db.users.find({ + 'overleaf.id': { $exists: true } +}, { overleaf: 1, features: 1 }, function (error, users) {