From 2db92d72a55c3dfc17d879f3defae2742044a295 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Mon, 28 Jan 2013 15:53:26 -0500 Subject: [PATCH] cleanup cron --- migrations/20130128_remove_dummy_accounts.js | 19 ----------- src/server/cron.coffee | 36 ++++++++++++-------- 2 files changed, 22 insertions(+), 33 deletions(-) delete mode 100644 migrations/20130128_remove_dummy_accounts.js diff --git a/migrations/20130128_remove_dummy_accounts.js b/migrations/20130128_remove_dummy_accounts.js deleted file mode 100644 index 964c307206..0000000000 --- a/migrations/20130128_remove_dummy_accounts.js +++ /dev/null @@ -1,19 +0,0 @@ -// run with %mongo server:port/dbname node_modules/moment/moment.js migrations/my_commands.js -var unRegistered = { 'auth.local': { $exists: false }, 'auth.facebook': { $exists: false} }, - registered = { $or: [ - { 'auth.local': { $exists: true } }, - { 'auth.facebook': { $exists: true} } - ]}; -db.users.count(registered); -db.users.count(unRegistered); -db.users.find(unRegistered).forEach(function(user) { - var lastCron = new Date(user.lastCron), - today = new Date(), - diff = Math.abs(moment(today).sod().diff(moment(lastCron).sod(), 'days')); - - if (diff > 30) { - db.users.remove({ _id: user._id }); - } -}); -db.users.count(registered); -db.users.count(unRegistered); \ No newline at end of file diff --git a/src/server/cron.coffee b/src/server/cron.coffee index 6431e24b90..bf2100cdcb 100644 --- a/src/server/cron.coffee +++ b/src/server/cron.coffee @@ -2,9 +2,14 @@ moment = require('moment') mongo = require("mongoskin") _ = require('underscore') -module.exports.deleteStaleAccounts = () -> +### + Users are allowed to experiment with the site before registering. Every time a new browser visits habitrpg, a new + "staged" account is created - and if the user later registeres, that staged account is considered a "production" account. + This function removes all staged accounts that have been abandoned - either older than a month, or corrupted in some way (lastCron==undefined) +### +module.exports.deleteStaleAccounts = -> - unRegistered = { "auth.local": {$exists: false} , "auth.facebook": {$exists: false} } + un_registered = { "auth.local": {$exists: false} , "auth.facebook": {$exists: false} } registered = registered = { $or: [ { 'auth.local': { $exists: true } }, { 'auth.facebook': { $exists: true} } @@ -13,21 +18,24 @@ module.exports.deleteStaleAccounts = () -> collection = mongo.db(process.env.NODE_DB_URI, {safe:true}).collection("users") collection.count registered, (err, result) -> console.log("#{result} registered users [before]") - collection.count unRegistered, (err, result) -> console.log("#{result} un-registered users [before]") + collection.count un_registered, (err, result) -> console.log("#{result} un-registered users [before]") + + today = +new Date isValidDate = (d) -> return false if Object::toString.call(d) isnt "[object Date]" not isNaN(d.getTime()) - today = +new Date - collection.findEach unRegistered, (err, user) -> - throw err if err - return unless user? - lastCron = new Date(user.lastCron) - return unless isValidDate(lastCron) # still gotta figure out what to do with users with "undefined" lastCron - diff = Math.abs(moment(today).sod().diff(moment(lastCron).sod(), "days")) - if diff > 15 - collection.remove {_id: user._id}, (err, res) -> throw err if err + removeAccount = (collection, id) -> collection.remove {_id: id}, (err, res) -> throw err if err - collection.count registered, (err, result) -> console.log("#{result} registered users [after]") - collection.count unRegistered, (err, result) -> console.log("#{result} un-registered users [after]") \ No newline at end of file + collection.findEach un_registered, (err, user) -> + throw err if err + return unless user? #why does this happen sometimes? + lastCron = new Date(user.lastCron) + if !isValidDate(lastCron) + removeAccount(collection, user._id) + return + diff = Math.abs(moment(today).sod().diff(moment(lastCron).sod(), "days")) + if diff > 30 + removeAccount(collection, user._id) + return \ No newline at end of file